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;

}

}