前言
本文詳細介紹了如何利用物聯網技術,通過NodeMCU ESP8266(ESP-12F)模塊連接到新版的OneNet平臺,使用MQTT協議實現數據的上傳與指令的下發。文中首先對NodeMCU ESP8266模塊及其特性進行了簡介,隨后詳細闡述了如何配置和使用MQTT協議連接到OneNet平臺,實現溫濕度數據的實時上傳。同時,文章也演示了如何從OneNet平臺下發指令控制遠端的LED燈,實現了物聯網設備的雙向通信。通過本文的步驟指導,讀者能夠掌握利用ESP8266模塊與OneNet平臺結合,通過MQTT協議進行數據通信的基本方法,并能夠在此基礎上開展更復雜的物聯網項目開發。本文適合對物聯網技術感興趣,希望了解ESP8266模塊與OneNet平臺結合應用的讀者。
前不久手上有了一個NodeMCUESP8266型號(ESP-12F)的單片機,然后也想做一個基于WIFI功能的遠程控制項目,我是用VScode的platformio組件,基本等同于Arduion IDE開發
下面我先說一下這兩者的區別,然后對每個部分的代碼講解一下,因為之前在網上搜的教程有點雜亂,就自己寫個教程方便自己參考
后續也會出一個微信小程序控制LED,舵機等等的操作
之前也是做過ESP8266-01S WIFI模塊
下面放上實物圖
NodeMCU ESP8266
ESP8266-01S
NodeMCU ESP8266和ESP8266-01S都是基于ESP8266芯片的開發板,它們可以用來開發物聯網(IoT)項目。盡管它們都基于相同的ESP8266芯片,但這兩個開發板在設計、功能、使用場景上有所不同。
區別
NodeMCU ESP8266
-
微控制器:NodeMCU內置的ESP8266芯片帶有一個32位的Tensilica L106微控制器,核心頻率可達80MHz到160MHz,配備了大約80KB的用戶數據RAM和最高上16MB的SPI閃存,用于程序存儲。
-
IO功能豐富:NodeMCU板上一般提供可編程的GPIO引腳達到17個,支持UART、I2C、SPI等通信協議,以及1路ADC(模擬-數字轉換器),最大分辨率為10位。
-
網絡能力:支持IEEE 802.11 b/g/n Wi-Fi標準,集成式天線,可作為STA(客戶端)或AP(熱點)模式運行,也支持這兩種模式的混合運行,非常適合開發需要Wi-Fi功能的物聯網項目。
-
開發和編程:可以使用Lua語言進行腳本編程,同時支持Arduino IDE和其他ESP8266 SDK開發,方便開發者根據自己的喜好和項目需求進行選擇。USB端口直接連接電腦即可編程,也可用于電源供電。
使用場景展開
- 環境監測:利用其GPIO接口連接多個傳感器,例如溫濕度傳感器、PM2.5空氣質量監測傳感器,實現環境監測站。
- 智能家居控制中心:作為家中智能設備的中樞,控制燈光、空調、窗簾等。
- 遠程監控系統:配合攝像頭使用,通過WiFi傳輸視音頻數據實現遠程監控。
ESP8266-01S
-
核心功能集中:ESP8266-01S是ESP8266系列的一種簡化模塊,盡管引腳較少,但提供了基本的GPIO、TX、RX等引腳,適合不需要大量外設連接的應用。
-
體積小巧:尺寸小,適合空間受限的設計,如穿戴設備、小型傳感器模塊等。
-
電源要求:需要穩定的3.3V電源供電,電流需求較高時(比如在WiFi通信時)至少為500mA,這對電源設計提出了一定的要求。
使用場景展開
- 無線數據通訊模塊:為其他不具備WiFi功能的微控制器或設備添加無線數據通訊能力。
- 物聯網節點:在節點數量眾多但每個節點功能相對簡單的物聯網應用場景,如簡單數據采集和傳輸,溫濕度監測等。
- 家居自動化簡單項目:可以控制一兩個設備的打開關閉,例如智能插座。
創建OneNET新版 MQTT協議
這里我就直接放之前的文章,那些文章是使用ESP8266-01S配合其他型號單片機(不具備WIFI功能如51/stm32單片機)連接WIFI實現數據上傳和下發,外加微信小程序段教程
創建OneNET新版MQTT設備:實現遠程控制單片機 為微信小程序與單片機通信打基礎(微信小程序通信單片機前置任務)
這里查看上面的文章創立圖中的物模型,如果沒有經驗的話強烈建議和我創建的內容一模一樣,等后續代碼跑通了再自己按需修改
編寫代碼芯片選擇
串口設置
注意事項
你需要將代碼改為你信息,信息獲取在上面的文章中有詳細的講解
有個重要的事項
在數據上傳那里,你必須確保上報的標識符和數據大小是符合你創建的物模型屬性的,否則串口顯示上報成功,onenet也會過濾你的信息,你可以每次一個一個的測試
例如你的溫度范圍是0-100,步長是0.1,你上傳了一個100.01或者101.1都是錯的,你整個上報的所有內容都失效
完整講解
#include <Arduino.h>
#include "ESP8266WiFi.h"
#include <PubSubClient.h>
String ssid= "ESP";
String password = "123456789";const char* mqtt_server = "mqtts.heclouds.com";
const int mqtt_port = 1883;
const char* deviceID = "test"; // 您的設備ID
const char* productID = "eb4Lr0apkE"; // 您的產品ID
const char* apiKey = "version=2018-10-31&res=products%2Feb4Lr0apkE%2Fdevices%2Ftest&et=2017757596000&method=md5&sign=y6ej0XbtuWmRH7gQKGUeSg%3D%3D"; // 您的APIKeyString commandTopic = "$sys/" + String(productID) + "/" + String(deviceID) + "/thing/property/set";WiFiClient espClient;
PubSubClient OneNET(espClient);void setup_wifi(String ssid,String password){WiFi.begin(ssid, password);static uint8_t count = 0;Serial.print("WiFi connecting");while (WiFi.status() != WL_CONNECTED) {if(++count >= 25) break;delay(500);Serial.print(".");}if(WiFi.status() == WL_CONNECTED){Serial.println("");Serial.println("WiFi connected!");Serial.println("IP: ");Serial.println(WiFi.localIP());}else if(WiFi.status() != WL_CONNECTED){Serial.println("");Serial.println("WiFi connected fail!");}
}void reconnect() {<