大家好, 今天來和大家分享如何把 DHT11溫溼度感測器上的資料由ESP32 讀取, 並用MQTT Client 發佈到 Mosquitto Server(MQTT), 再送到 Node-RED上, 再把這些資料在資訊看板上顯示出來.
本篇使用到的程式碼:
//---- Setup update frequency -----// const long TEMP_updateInterval = 10000; // How long to change temp and update, 10000 = 10 sec unsigned long TEMP_currentMillis = 0; unsigned long TEMP_previousMillis = 0; // store last time temp update #include "DHT.h" #define DHTPIN 23 //ESP32 pin 23 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); // Initialize DHT sensor /* SimpleMQTTClient.ino The purpose of this exemple is to illustrate a simple handling of MQTT and Wifi connection. Once it connects successfully to a Wifi network and a MQTT broker, it subscribe to a topic and send a message to it. It will also send a message delayed 5 seconds later. */ #include "EspMQTTClient.h" EspMQTTClient client( "Your_WiFi_AP", // Wi-Fi AP name "Wi-FI_Password", // Wi-Fi Password "192.168.0.119", // MQTT Broker server ip "", // Broker user name; Can be omitted if not needed "", // Broker password; Can be omitted if not needed "ESP32_Client", // Client name that uniquely identify your device 1883 // The MQTT port, default to 1883. this line can be omitted ); void setup() { Serial.begin(115200); //Start DH11 sensor dht.begin(); // Optionnal functionnalities of EspMQTTClient : client.enableDebuggingMessages(); // Enable debugging messages sent to serial output //client.enableHTTPWebUpdater(); // Enable the web updater. User and password default to values of MQTTUsername and MQTTPassword. These can be overrited with enableHTTPWebUpdater("user", "password"). //client.enableLastWillMessage("TestClient/lastwill", "I am going offline"); // You can activate the retain flag by setting the third parameter to true } // This function is called once everything is connected (Wifi and MQTT) // WARNING : YOU MUST IMPLEMENT IT IF YOU USE EspMQTTClient void onConnectionEstablished() { // Subscribe to "mytopic/test" and display received message to Serial client.subscribe("message/hello", [](const String &payload) { Serial.println(payload); }); // Subscribe to "mytopic/wildcardtest/#" and display received message to Serial //client.subscribe("mytopic/wildcardtest/#", [](const String &topic, const String &payload) // { Serial.println("(From wildcard) topic: " + topic + ", payload: " + payload); }); // Publish a message to "mytopic/test" client.publish("studio/temp1", "Let's go!"); // You can activate the retain flag by setting the third parameter to true // Execute delayed instructions //client.executeDelayed(5 * 1000, []() // { client.publish("mytopic/wildcardtest/test123", "This is a message sent 5 seconds later"); }); } void loop() { TEMP_currentMillis = millis(); if(TEMP_currentMillis - TEMP_previousMillis >= TEMP_updateInterval){ TEMP_previousMillis = TEMP_currentMillis; // Reading temperature or humidity takes about 250 milliseconds! // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) float humidity = dht.readHumidity(); float temperature = dht.readTemperature(); // Read temperature as Fahrenheit (isFahrenheit = true) //float f = dht.readTemperature(true); // Check if any reads failed and exit early (to try again). if (isnan(humidity) || isnan(temperature)) { Serial.println(F("Failed to read from DHT sensor!")); return; } String tmp = "Current Temperature: "; String hud = "Current Humidity: "; Serial.print(tmp); Serial.println(String(temperature)); Serial.print(hud); Serial.println(String(humidity)); //Publish client.publish("studio/temp1", String(temperature)); client.publish("studio/humd1", String(humidity)); // Here is how to subscribe //client.subscribe("message/hello", [](const String &payload) { Serial.println(payload); }); } client.loop(); }
*** 影片中忘了說明, 在 VS Code 裡, 按下 F1 到 Arduino Library Manager 裡, 搜尋 EspMQTTClient V.11.1版本, 並按下安裝 , 程式才能正確執行喔~~ ***
如果時間不夠的朋友, 也可以從以下的時間軸挑選想看的部份即可!
影片時間軸:
00:29 課程開始 00:52 如何將 DHT11 連接到 ESP32 (接線圖) 00:59 在 ESP32 利用 EspMQTTClient 來寫程式 01:22 安裝 DHT11 程式庫 02:16 設定 EspMQTTClient 02:45 由 Raspberry Pi Terminal 找出 Mosquitto(MQTT) IP 地址 04:51 不要用 delay() 在程式 Loop 裡! 06:50 上傳並檢查發佈/訂閱的 messages 07:54 安裝 Node-RED 資訊看板(在 Node-RED 中) 08:57 按主題來訂閱消息 09:58 設置 MQTT 服務器的位置 11:34 建立資訊看板選項 Tabs Links & Groups 17:00 建立歷史資料資訊看板 20:32 查看資訊看板 20:50 資訊看板中的選項 Tabs Links & Groups在哪裡
下一集將介紹如何把歷史資料存儲到樹莓派的資料庫(influxDBvor MySQL)中, 以取得長時間的記錄資料.
Stonez56 一起來學樹莓派系列影片:
- #1 無鍵盤 無滑鼠 快速上手
https://youtu.be/BCkdSQNtVB0 - #2 改用 USB3/SSD 來開機, 畫面好流暢!
https://youtu.be/uI01GFmfH1k - #3 一行指令安裝 Node RED & 外加密碼保護
https://youtu.be/Mk8-xn_fHOA - #4 安裝 Mosquitto broker (MQTT) & 並在Node-RED & Google MQTTLens 進行測試 https://youtu.be/cK_LJPgR4mQ
- #5 溫溼度感測器DHT11由 ESP32 經 MQTT 送到 Node-RED
https://youtu.be/Vv1JRNYIZKc - #6 監測資料寫入InfluxDB資料庫, 長期保存並在NodeRED資訊看板裡顯示 https://youtu.be/UOoDolPVge0
- #7 2021 一起來學樹莓派 - 動態查詢InfluxDB 資料庫 & MQTT來遠端開/關繼電器 https://youtu.be/EpY_jl4wXtM
參考資料:
EspMQTTClient: https://github.com/plapointe6/EspMQTTClient
No comments:
Post a Comment