1.溫溼度站
Tingspeak回傳圖表
我家溫度
我家濕度
無Arduino
請先設定好你要連線的AP SSID 與 密碼
再設定你是使用DHT11 或 DHT22
然後按照以下圖片刷韌體進入ESP8266
進入AP控制介面,看看AP分配給ESP8266的IP是什麼
可以設定固定這個IP (像我家分配給這個ESP8266是 192.168.1.91)
然後連入 http://192.168.1.91
每10秒會刷新一次溫溼度
如果是電子電路苦手,3.3V電源可以買這個(15元而已) 參考網址
刷ESP8266韌體的工具CIP2102 USB轉UART(65元) 參考網址
NodeMCU 腳位配置
溫度濕度 WEBSERVER
#include <ESP8266WiFi.h>
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT22
WiFiServer server(80);
DHT dht(DHTPIN, DHTTYPE);
////////////////////////////////////////////////////////////////////////////////////////
const char* ssid = "SSID";
const char* password = "Password";
////////////////////////////////////////////////////////////////////////////////////////
double Fahrenheit(double celsius) {
return ((double)(9 / 5) * celsius) + 32;
}
double Kelvin(double celsius) {
return celsius + 273.15;
}
void setup() {
Serial.begin(115200);
delay(10);
Serial.println();
// Connect to WiFi network
WiFi.mode(WIFI_STA);
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Start the server
server.begin();
Serial.println("Server started");
// Print the IP address
Serial.println(WiFi.localIP());
}
void loop() {
float humi = dht.readHumidity();
float temp = dht.readTemperature();
Serial.print("temperature:");
Serial.print(temp);
Serial.print(" humidity:");
Serial.print(humi);
Serial.println();
WiFiClient client = server.available();
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println("Refresh: 10");
client.println();
client.println("<!DOCTYPE html>");
client.println("<head>\n<meta charset='UTF-8'>");
client.println("<title>ESP8266 Temperature & Humidity DHT11 Sensor</title>");
client.println("</head>\n<body>");
client.println("<H2>ESP8266 & DHT22 Sensor</H2>");
client.println("<H3>Maker Lab</H3>");
client.println("<pre>");
client.print("Humidity (%) : ");
client.println(humi, 2);
client.print("Temperature (°C) : ");
client.println(temp, 2);
//client.print("Temperature (°F) : ");
//client.println(Fahrenheit(temp), 2);
//client.print("Temperature (°K) : ");
//client.println(Kelvin(temp), 2);
client.println("</pre>");
client.print("</body>\n</html>");
}
溫度濕度 WEBSERVER,加入Tingspeak 程式
#include <ESP8266WiFi.h>
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
WiFiServer server(80);
const int httpPort = 80;
////////////////////////////////////////////////////////////////////////////////
const char* ssid = "----";
const char* password = "----";
const char* host = "api.thingspeak.com";
const char* writeAPIKey = "VLGNCOYLSQHRG6RW";
///////////////////////////////////////////////////////////////////////////////
unsigned long t1,t2;
String humidity,temperature;
void data_to_html(String data1, String data2){
WiFiClient client = server.available();
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE html>");
client.println("<head>\n<meta charset='UTF-8'>");
client.println("<title>ESP8266 Temperature & Humidity DHT11 Sensor</title>");
client.println("</head>\n<body>");
client.println("<H2>ESP8266 & DHT22 Sensor</H2>");
client.println("<H3>Maker Lab</H3>");
client.println("<pre>");
client.print("Humidity (%) : ");
client.println(data1);
client.print("Temperature (°C) : ");
client.println(data2);
client.println("</pre>");
client.print("</body>\n</html>");
}
void data_to_tingspeak(String data3, String data4){
WiFiClient client = server.available();
if (!client.connect(host, httpPort)) {
return;
}
String url = "/update?key=";
url+=writeAPIKey;
url+="&field1=";
url+=data3;
url+="&field2=";
url+=data4;
url+="\r\n";
// This will send the request to the server
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
}
void setup() {
// Initialize sensor
// We start by connecting to a WiFi network
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
server.begin();
t1=millis();
}
void loop() {
t2=millis();
if(t2>t1+60000){
Serial.println(WiFi.localIP());
humidity = String(dht.readHumidity());
temperature = String(dht.readTemperature());
data_to_tingspeak(temperature, humidity);
t1=t2;
}
data_to_html(humidity,temperature);
}
溫溼度(DHT22)
#include <ESP8266WiFi.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 2
#define DHTTYPE DHT22
LiquidCrystal_I2C lcd(0x3F,20,4);
/////////////////////////////////////////////////////////////////////////////////////////////
const char* ssid = "tomorrows";
const char* password = "--------------------";
const char* host = "api.thingspeak.com";
const char* writeAPIKey = "YWMRI4C7NF1IF0H2";
const int httpPort = 80;
unsigned long time_interval=60000;
////////////////////////////////////////////////////////////////////////////////////////////
unsigned long t1,t2,t3,t4;
int sw1=1,sw2=1;
float humidity , temperature;
DHT dht(DHTPIN, DHTTYPE);
WiFiServer server(80);
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
lcd.init();
lcd.backlight();
lcd.clear();
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
server.begin();
Serial.println(WiFi.localIP());
t1=millis();
t3=millis();
}
void loop() {
if(sw1==1){
humidity = dht.readHumidity();
temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
return;
}
lcd.setCursor(0,0);
lcd.print("RH= ");
lcd.print(humidity);
lcd.print(" %");
lcd.setCursor(0,1);
lcd.print("T= ");
lcd.print(temperature);
lcd.print((char) 0xDF);
lcd.print("C");
lcd.setCursor(0,2);
lcd.print("P= ");
lcd.setCursor(0,3);
lcd.print(WiFi.localIP());
}
t2=millis();
if(t2 >= t1 + 1000){
sw1=1;
t1=t2;
}else{
sw1=0;
}
WiFiClient client = server.available();
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println("Refresh: 10");
client.println();
client.println("<!DOCTYPE html>");
client.println("<head>\n<meta charset='UTF-8'>");
client.println("<title>ESP8266 Temperature & Humidity DHT11 Sensor</title>");
client.println("</head>\n<body>");
client.println("<H2>ESP8266 & DHT22 Sensor</H2>");
client.println("<H3>Maker Lab</H3>");
client.println("<pre>");
client.print("Humidity (%) : ");
client.println(humidity, 2);
client.print("Temperature (°C) : ");
client.println(temperature, 2);
client.println("</pre>");
client.print("</body>\n</html>");
if(sw2==1){
if (!client.connect(host, httpPort)) {
return;
}
String url = "/update?key=";
url+=writeAPIKey;
url+="&field1=";
url+=String(temperature);
url+="&field2=";
url+=String(humidity);
url+="\r\n";
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
}
t4=millis();
if(t4 >= t3 + time_interval){
sw2=1;
t3=t4;
}else{
sw2=0;
}
}
加入溫溼度(DHT22)+氣壓(BMP085)
接線接法:
所有的程式碼只需要設定在
///////////////////////////
內容
///////////////////////////
之間的內容,其他盡量不要更動。
#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <LiquidCrystal_I2C.h>
#include <ESP8266WiFi.h>
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT22
LiquidCrystal_I2C lcd(0x3F,20,4);
/////////////////////////////////////////////////////////////////////////////////////////////
const char* ssid = "Maker"; //填入你的WIFI AP SSID
const char* password = "--------"; //填入你的WIFI AP 密碼
const char* host = "api.thingspeak.com";
const char* writeAPIKey = "YWMRI4C7NF1IF0H2"; //填入你申請好的Tingspeak API Key
const int httpPort = 80;
unsigned long time_interval=60000; //設定60000毫秒= 60秒傳送一次數據
////////////////////////////////////////////////////////////////////////////////////////////
unsigned long t1,t2,t3,t4;
int sw1=1,sw2=1;
float humidity , temperature , pressure , temperature2;
Adafruit_BMP085 bmp;
DHT dht(DHTPIN, DHTTYPE);
WiFiServer server(80);
void setup() { //這部分是設定
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
lcd.init();
lcd.backlight();
lcd.clear();
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
server.begin();
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
}
Serial.println(WiFi.localIP());
t1=millis();
t3=millis();
}
void loop() {
if(sw1==1){ //這部分在讀取感測器讀數
humidity = dht.readHumidity();
temperature = dht.readTemperature();
temperature2 = bmp.readTemperature();
pressure = bmp.readPressure()/100.00;
if (isnan(humidity) || isnan(temperature)) {
return;
}
lcd.setCursor(0,0); //這個部分會決定LCD畫面輸出的內容
lcd.print("T= ");
lcd.print(temperature);
lcd.print((char) 0xDF);
lcd.print("C");
lcd.setCursor(12,0);
lcd.print(temperature2);
lcd.print((char) 0xDF);
lcd.print("C");
lcd.setCursor(0,1);
lcd.print("RH= ");
lcd.print(humidity);
lcd.print(" %");
lcd.setCursor(0,2);
lcd.print("P= ");
lcd.print(pressure);
lcd.print(" hPa");
lcd.setCursor(0,3);
lcd.print("IP= ");
lcd.print(WiFi.localIP());
}
t2=millis();
if(t2 >= t1 + 1000){
sw1=1;
t1=t2;
}else{
sw1=0;
}
WiFiClient client = server.available(); //這個部分是簡易的靜態網路伺服器,可連線查詢
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println("Refresh: 10");
client.println();
client.println("<!DOCTYPE html>");
client.println("<head>\n<meta charset='UTF-8'>");
client.println("<title>ESP8266 Temperature & Humidity DHT11 Sensor</title>");
client.println("</head>\n<body>");
client.println("<H2>BMP085 & DHT22 Sensor</H2>");
client.println("<H3>Maker Lab</H3>");
client.println("<pre>");
client.print("Humidity (%) : ");
client.println(humidity, 2);
client.print("Temperature (DHT22) (°C) : ");
client.println(temperature, 2);
client.print("Temperature (BMP085) (°C) : ");
client.println(temperature2, 2);
client.print("Pressure (hPa) : ");
client.println(pressure, 2);
client.println("</pre>");
client.print("</body>\n</html>");
if(sw2==1){ //這個部分是用GET法把數據上傳tingspeak網站
if (!client.connect(host, httpPort)) {
return;
}
String url = "/update?key=";
url+=writeAPIKey;
url+="&field1=";
url+=String(temperature);
url+="&field2=";
url+=String(temperature2);
url+="&field3=";
url+=String(humidity);
url+="&field4=";
url+=String(pressure);
url+="\r\n";
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
}
t4=millis(); //這個部份可以控制多久上傳一次資料
if(t4 >= t3 + time_interval){
sw2=1;
t3=t4;
}else{
sw2=0;
}
}