![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUqKN-DurBKLNVpJTIbIkABVSO8KXsbsh4mroeqJHJ6TujWLnMR2O-5HmO2VPL20LhKsuoJp3MeeK6YVgJd-T-O4w3QIwelBThxmgaP04lWbyB-xU6LXRjlJyzBx2pr8YiZ1nCWcaST6It/s1600/20170901001.jpg)
上年曾經為大家介紹如何製作「溫度濕度監測器」
http://www.jasonworkshop.com/2016/06/20160615.html
十多個月後回望這個 Project 在硬件體積有點大,軟件方面也有點複雜。
今次的「自製溫度濕度監測器」將會使用內置 WiFi 的單微板 Wemos D1 mini + 溫濕度感應器 DHT11 再配合線上 LoT 分析網站 ThingSpeak 來組成這個 Project。
大家有興趣的話也可以跟著做一個哦。
製作步驟如下:
[Part 1 硬件的準備工作]
首先將 DHT11 的 + 連接到 Wemos 的 5V 接腳;
將 DHT11 的 - 連接到 Wemos 的 G 接腳;
將 DHT11 中間的 out 連接到 Wemos 的 D4 接腳。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc40-Q8q935cmIK5cSGBoLzMe_XdE2swX9LldMHoFzjaoOtXgsCjFQb3yuPYLsDvpZJrI4arWoF1pAi6GwxaF_m8UtZiWuW9B8GOSPP7Kcbo1ymk7ECa3U5RtfTsinY400qjJvuRESnKpE/s1600/20170901002.jpg)
[Part 2 安裝 Wemos D1 mini 驅動程式]
請到 https://wiki.wemos.cc/downloads 下載並安裝 Wemos D1 mini 的驅動程式。
[Part 3 安裝 Arduino IDE]
請到 https://www.arduino.cc/en/Main/Software 下載並安裝最新的 Arduino IDE。
[Part 4 在 Arduino IDE 加入 ESP8266 開發板]
在 Arduino \ Preferences \
在 Additional Boards Manager URLs 框框輸入 "http://arduino.esp8266.com/stable/package_esp8266com_index.json"
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh396irFOdhIBMx2VfFy4V6OftWvKL3Z_jo9gR4LxIo0WNRj-0tP08E-Nm7tgcsdVADoFOftfQEEomSms4jTDydfsdHycEtCoia22TjNX34A7Ex3txjSXL6ILhDqkS3fA286g0RE6NYBWM/s1600/make0302004.jpg)
在 Arduino \ Board \ Boards Manager
選擇 "esp8266" 然後按 Install
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjJn6sCCUUdwu_viefSQXG7cEJL6X5XCYiiYZD_DtM1rZdLQQFBO40kXpZaMKfR7mvoVK-QMlClSrtnGeLWrAW35CReYxeAIBBRQNK6ZPL3-owHN4ep9L3MdP-tH4s1bDj6jPPeqZs4t4/s1600/make0302005.jpg)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5Kl09O3k-xdyQzOc-Yjk1eG6MZ2iFQu1aixKx7FWk3mIFuggBNuwjU5PZLazmqaThSVRi8Fmd9rZSPCg5Q2f2uuNgQq4ugHUKgiNYuYO8pDGAHmJRLdg57OyNg5IeiS5E7aZHejMyHOo/s1600/make0302006.jpg)
"Generic ESP8266 Module" 就會出現在 Board menu
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAPoli7jRA5ilo2B96DGdVU8qWo3A9lQQyklNFW2atwhO8cyl10Hc5CuACbOY99ABvA4pHW5UmHLr_YuDsP0gRxhwsea8mUNLOJC6S1GHn8hpDCtrXQn-IbNzxT1uLPREBkdLQg4nZeEQ/s1600/make0302007.jpg)
[Part 5 在 Arduino IDE 加入需要的 Library]
在 Arduino \ Sketch \ Include Library \ Manage Libraries
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWO2tZ5xfD3vxZvS9J5XVf4Xi4jW2_12GuologT75L2XPU-qTmkiSF6NOXL16EmNdCXtQnT2ibYSwULlQBdy0vCHBiiBfWFAveRZ7e1uwN6kyRG1bKGkPPrwqyRzCUj2uKIVeYHgyVriq-/s1600/20170901003.jpg)
尋找並安裝 DHT Sensor library by Adafruit
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoofuXdytYvM2abIfuLbAll_-TkNbTGDLDxbhMOml-3YI1tonzVa5HPnEdO8wtAo_VEuPR0Jb-eeBlhJLQAa46SArrHopWqsdefwL9QlIgHnKctVkQSg1LwtEwzviUvkwBRKV_WqVc9D24/s1600/20170901004.jpg)
尋找並安裝 Adafruit Unified Sensor by Adafruit
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDOFvSOBdaiirzLsKaWTdr44FQNzoo_KQILdUK6pOTFr-NMnUROH2yUmHXJPU3kaDA4_jBJeCVI5cNW7mglRiOPhW7WVNkdL2Vi4Tz1c31XCVS44MmOC6tAhr5quySOiUrU0Ewp8-pP-a6/s1600/20170901005.jpg)
[Part 6 設定 Wemos D1 mini 的參數]
在 Arduino \ Tools
根據下圖修改 Wemos D1 mini 的參數
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFX-Pd5hC3QtHUZVgWe2h1tafYyNkGvXXX8ioyIwtGP6At69GAIZOZ5MNU5V9_QK5hoXlR3n6yMzzu0FdHknDoQiSJu450c_oDATzMWx0TOrpYrMklZKSNquj0dM54ws5kaQD5SsoL-MpY/s1600/20170901006.jpg)
[Part 7 申請 ThingSpeak 並建立一個 Channel]
請先根據這篇教學申請 ThingSpeak 帳戶,然後建立一個 Channel 來放置收集回來的數據,並記下 Write API Key。
http://www.jasonworkshop.com/2017/08/20170828.html
[Part 8 編寫及上載程式]
請將以下程式碼複製到 Arduino IDE,注意請將 apiKey, ssid, password 修改成適合自己的,然後上載至 Wemos。
#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.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 secs"); // thingspeak needs at least a 15 sec delay between updates
delay(20000);
}
[Part 9 執行並測試成果
在 Arduino IDE 上載程式到 Wemos
當上載進度達 100% 時,溫度濕度監測器便會開始啟動。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEbR5OjiiH4N8zb1DK5r-HTDxDlnwI6v4TYmIifu_R7uynVMh6T4EsUFZhEaQu6tNdNsJlou_S4L0qUJsTkBz6wyk8hlM_6ghuK2w8d2tgt9o5_Hz2JIM0h2isyJKnUqWKphkCI__KQr7A/s1600/20170901007.jpg)
大家可以按 Arduino \ Tools \ Serial Monitor 觀察運作情況。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsHZkpD7pLv4Qagwh_O9DrrNzRqIdsb9ZcA2I4JY9EQpzTK6sLGvwGUBz7X42_crqWsvup0nSL-xHv5B10HjY7g8TPtCm6_yWmVBNkO0NaGvph92OWmBpE2qyR-xpY3sXQa4b5UdG3mNzK/s1600/20170901008.jpg)
一齊正常的話,便可以在 ThingSpeak 的 Private View 看到已收集的數據所生成的圖表。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgu5280yOerd8_qKiQhtd1PjtOv1-EUCnp7Eu4MZi6Yp5k4Km03u5ZEcpypWd0XPHzD-kdAkJ_i81RHczN849b6YtzW4MKHt0_9_s9mSHx9FXlygXu9OhR5hTKsLzkMW1pjfNfkHYOOiz9m/s1600/20170901009.jpg)