前置工作
- Thingsboard平臺
- ESP 8266 NodeMCU 開發板
- IDE: Arduino 或 VScode 均可
服務端具體對接流程
-
系統管理員賬號通過 Thingsboard 控制面板創建租戶等信息并以租戶賬號登錄
-
實體 —> 設備維護具體設備信息
-
創建完成后通過管理憑據修改或直接復制訪問令牌
設備端邏輯
- 測試源碼,來源于網絡并進行簡單修改
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <Ticker.h>// 設置 wifi 接入信息
const char* wifiName = "Your WiFi name";
const char* password = "Your WiFi password";
// 服務端地址
const char* mqttServerHost = "10.11.11.102";// 服務端復制的令牌憑證
const char* mqttUserName = "xxxxx";
// thingsboard 默認只驗證 username,密碼為空
const char* mqttPassword = NULL;Ticker ticker;
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);int count;void setup() {Serial.begin(9600);// Ticker 定時對象ticker.attach(1, tickerCount);//設置 ESP8266 工作模式為無線終端模式WiFi.mode(WIFI_STA);// 連接WiFiconnectWifi();// 設置服務端端口號,我這里是默認的 1883mqttClient.setServer(mqttServer, 1883);// 連接服務器connectMQTTServer();
}void loop() {if (!mqttClient.connected()) {connectMQTTServer();}mqttClient.loop();// 每隔3秒鐘發布一次信息if (count >= 3) {pubMQTTmsg();count = 0;}
}void tickerCount() {count++;
}void connectMQTTServer() {// 根據 ESP8266 的 MAC 地址生成客戶端 IDString clientId = "esp8266-" + WiFi.macAddress();// 連接MQTT服務器。此處使用了程序首部定義的用戶名和密碼來實現MQTT服務端認證if (mqttClient.connect(clientId.c_str(), mqttUserName, mqttPassword)) {Serial.println(">>>>>>>>>>>>>>> MQTT Server Connected.");Serial.print(">>>>>>>>>>>>>>>>>>>> Server Address: ");Serial.println(mqttServer);Serial.print("ClientId: ");Serial.println(clientId);} else {Serial.print(">>>>>>>>>>>>>>>>> MQTT Server Connect Failed. Client State:");Serial.println(mqttClient.state());delay(3000);}
}// 發布信息
void pubMQTTmsg() {static int value;// 建立發布主題。主題名稱以taichi/Pub-為前綴,后面添加設備的MAC地址。// 這么做是為確保不同用戶進行MQTT信息發布時,ESP8266客戶端名稱各不相同,String topicString = "v1/devices/me/telemetry";char publishTopic[topicString.length() + 1];strcpy(publishTopic, topicString.c_str());// 信息內容以 Hello ThingsBoard 為起始,后面為測試的發布次數String messageString = "{\"Hello ThingsBoard\":" + String(value++) + "}";char publishMsg[messageString.length() + 1];strcpy(publishMsg, messageString.c_str());// 實現 ESP8266 向主題發布信息if (mqttClient.publish(publishTopic, publishMsg)) {Serial.print("Publish Topic:"); Serial.println(publishTopic);Serial.print("Publish message:"); Serial.println(publishMsg);} else {Serial.println(">>>>>>>>>>>>>>>>> Message Publish Failed.");}
}// ESP8266 連接 wifi
void connectWifi() {WiFi.begin(ssid, password);//等待WiFi連接,成功連接后輸出成功信息while (WiFi.status() != WL_CONNECTED) {delay(1000);Serial.println("WiFi connecting......");}Serial.println(">>>>>>>>>>>>>> WiFi Connected!");
}
-
指定消息發布主題:v1/devices/me/telemetry,其他主題請查閱官方文檔
-
如果部分庫找不到,請百度解決
-
IDE 配置開發板相關信息及對應串口
-
編譯并燒錄至 ESP8266
-
燒錄結果
-
打開端口監視器,開發板在正常發送測試數據
服務端控制臺信息
- 到這里就基本上測試完成
- 如需協議轉換可通過軟網關或硬網關自行對接測試