最近因為需要對工作場所進行持續的溫度及濕度監測,
不如就來製作一台實時監測器以及相關的數據記錄圖表生成系統吧。
Let’s Go!
▊材料
- WeMos D1 mini 開發板 x 1
(端子可能需要自行焊接,如果不太擅長可請店家代焊或直接購買已焊的版本)
- DHT11 溫度濕度感應器 (連 FF 杜邦線) x 1
也可以到 Jason Workshop 的 Online Shop 選購套件哦!
▊運作原理
- 溫度及濕度的數值會由 DHT11 感應並傳到 D1 mini 開發板。
- WeMos D1 mini 是一塊能連接 WiFi 的開發板,
會將數據透過互聯網傳送到 ThingSpeak 平台。
- ThingSpeak 能將數據收集並自動生成圖表。
▊製作硬件
請將 DHT11 的端子連到 WeMos D1 mini 的對應端子上,硬件部份便完成了!
DHT11 | D1 mini |
---|---|
+ | 5V |
out | D4 |
– | G |
▊預備軟件開發環境
- 請到 https://www.arduino.cc/en/software
下載並安裝最新版本的 Arduino IDE。
- 開啟 Arduino IDE 並在 Arduino \ Preferences \ Additional Boards Manager URLs 框框輸入 “http://arduino.esp8266.com/stable/package_esp8266com_index.json”
- 在 Arduino \ Board \ Boards Manager
搜尋 “esp8266” 然後按 Install
這樣 Arduio IDE 便支援 WeMos D1 mini 開發板了!
- 在需要使用 WeMos D1 mini 時,只要在 Arduino \ Tools \ Board 選擇 ESP8266 Boards \ LOLIN(WEMOS) D1 mini (clone) 便可。
▊加入需要到的 Library
由於這個 Project 中使用到 DHT11 感應器,這就需要安裝額外的 Library 讓編寫程式更方便。
- 在 Arduino \ Sketch \ Include Library 選擇 Manage Libraries。
搜尋 “DHT11” 然後選擇 “DHT sensor library by Adafruit” 再按 Install。
- 由於 DHT sensor library 會用到 Adafruit Unified Sensor 這個 library,所以系統會問是否順道安裝,可以在這裏按 Install all。
▊申請 ThingSpeak 並建立一個 Channel
由於篇幅比較長,所以將這篇獨立了出來,大家可以先申請帳戶、建立 Channel、記下 Write API Key 以及將 Channel 發佈。
https://jasonworkshop.com/b20210930
▊編寫程式
請將以下程式碼複製到 Arduino IDE,注意修改 apiKey, ssid, password 需要修改成適合自己的。
#include <DHT.h>
#include <ESP8266WiFi.h>
#define DHTPIN 2 // D4 = GPIO 2
#define DHTTYPE DHT11
// your thingspeak channel API key and your WiFi SSID and password
String apiKey = "Your Write API Key from ThingSpeak";
const char* ssid = "Your WiFi SSID";
const char* password = "Your WiFi Password";
const char* server = "api.thingspeak.com";
DHT dht(DHTPIN, DHTTYPE);
WiFiClient client;
void setup() {
Serial.begin(115200);
delay(50);
dht.begin();
WiFi.begin(ssid, password);
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");
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
if (client.connect(server,80)) {
String postStr = apiKey;
postStr +="&field1=";
postStr += String(t);
postStr +="&field2=";
postStr += String(h);
postStr += "\r\n\r\n";
client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" degrees Celsius, Humidity: ");
Serial.print(h);
Serial.println(", Sending data to Thingspeak");
}
client.stop();
Serial.println("Waiting 20 sec"); // thingspeak needs at least a 15 sec delay between updates
delay(20000); // 20 sec
}
▊執行並測試成果
- 用 USB 線連接 WeMos D1 mini,再在 Arduino \ Tools \ Port 選擇能連上 WeMos D1 mini 的 Port。
如果無法找到可連接的 Port,可能是 USB Driver 的問題,
請到 https://www.wemos.cc/en/latest/ch340_driver.html 下載並安裝 WeMos D1 mini 的 USB Driver。
- 選好 Port 後按 Upload,當上載完成後溫度濕度監測器便會啟動。
- 大家可以按 Arduino \ Tools \ Serial Monitor 觀察運作情況。
- 一齊正常的話,便可以在你的 Channel 看到已收集的數據所生成的圖表。
整個 Project 大功告成!