一、硬件准備
USB轉ESP8266兩塊、DHT11溫度濕度傳感器、ESP8266-01/ESP8266-01一塊(如果學習的話多買幾塊,ESP-01/ESP-01S的區別)
USB轉ESP8266 說明:為什么要買兩塊
二、軟件准備
Arduino、EMQX(這是mqtt服務器可以部署在本地也可以放在遠程服務器上)、MQTTBox(mqtt客戶端程序)、如果是Window系統的話 安裝相關USB驅動程序。
三、安裝EMQX 下面介紹的方法是部署在遠程服務器上。
四、安裝Arduino IDE
五、配置Arduino IDE 的 ESP8266開發環境
六、把ESP-01與DHT11連接
七、打開Arduino IDE 編寫代碼
注意修改 Wi-Fi名和 Wi-Fi密碼,如果是本地mqtt服務器的話地址填 127.0.0.1
#include <SimpleDHT.h> #include <ESP8266WiFi.h> #include <PubSubClient.h> int pinDHT11 = 2; // GPIO2 of ESP8266 const char* ssid = "XXXXX";//手機Wi-Fi熱點 const char* password = "XXXX";//手機Wi-Fi密碼 const char* mqtt_server = "XXXXXXX";//服務器網址或者IP地址 //const String macAddress = WiFi.macAddress(); //const char* clientID = macAddress.c_str(); //MAC地址 const char* clientID = "ESP8266_01_A"; //連接mqtt用戶名 WiFiClient espClient; PubSubClient client(espClient); SimpleDHT11 dht11(pinDHT11); long lastMsg = 0; char msg[50]; int value = 0; void setup() { //pinMode(BUILTIN_LED, OUTPUT); // 將BUILTIN_LED引腳初始化為輸出 Serial.begin(115200); setup_wifi(); client.setServer(mqtt_server, 1883); client.setCallback(callback); } void setup_wifi() { delay(10); WiFi.begin(ssid, password); // 我們從連接到WiFi網絡開始 while (WiFi.status() != WL_CONNECTED) { delay(500); } Serial.println("WiFi connected"); } ///接收反饋 void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } } void reconnect() { // 循環,直到我們重新連接 while (!client.connected()) { if (client.connect(clientID)) { //connected Serial.print("MQTT連接成功"); // 連接mqtt成功 // client.publish("ESP_01主題", "hello world"); // 一旦連接,發布公告… client.subscribe("ESP_01主題"); // 一旦連接,發布主題 } else { delay(5000); // 等待5秒再重試 } } } void loop() { if (!client.connected()) { reconnect(); } client.loop(); ////////溫度濕度 byte temperature = 0; byte humidity = 0; int err = SimpleDHTErrSuccess; if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) { Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000); return; } String tmp = "溫度:"; //字符串拼接 tmp += String(temperature); tmp += String(" 濕度:"); tmp += String(humidity); Serial.print((int)temperature); Serial.print(" *C, "); Serial.print((int)humidity); Serial.println(" H"); client.publish("ESP_01主題", tmp.c_str());//發送主題 delay(2000); ////////溫度濕度 }
八、燒錄程序
用改裝過的 USB轉ESP8266 連接ESP-01連接電腦,准備燒錄。
點擊IDE左上角的箭頭開始燒錄。
九、測試程序
把燒錄好的ESP8266,取下來,裝到 USB轉ESP8266 沒改裝的轉換器上,插入電腦,打開IDE右上角的圖標,即可看到運行狀態。
十、打開MQTTBox 訂閱ESP_01主題