簡介:
本次主要想實現(xiàn)功能:thingsboard平臺遠程控制設備
設備(ESP8266上的燈作為一臺設備,模擬控制燈的開關)
指令傳輸通過thingsboard平臺集成的MQTT協(xié)議
利用thingsboard儀表盤庫的一個控制組件模擬發(fā)送指令來控制我們的
燈的開關
前期準備:
- 之前搭建好的thingsboard平臺
- NodeMCU開發(fā)板
- 開發(fā)NodeMCU的工具:Arduino
操作過程
1新建一個測試設備
新建一個租戶賬號進入到我們的thingsboard平臺后點擊設備管理新建一個設備。
新建成功后點擊設備進入詳情頁面,點擊復制設備訪問令牌,這個是后面MQTT訪問對應的用戶名,可以先保存下來
2在儀表盤庫新建一個開關
后面將用這個開關模擬發(fā)送指令控制設備
首先我們先要建一個儀表板,用于放置我們的開關組件。
新建成功后打開儀表板,點擊編輯選擇一個開關控制組件
然后保存退出,完成。
這里我們可以點擊開關,打開調(diào)試控制臺看它發(fā)出的指令
3編輯相關接收燈開關的指令對應代碼燒錄到我們的ESP8266開發(fā)板上。
這里我使用的是開關工具是:Arduino
開發(fā)之前要先確保我們的ESP8266連接上我們的Arduino
這個可以參考太極創(chuàng)客的官網(wǎng)進行相關學習操作,官網(wǎng)地址:
http://www.taichi-maker.com/
確保連接成功后,就可以編寫我們的程序了。
附上源代碼:
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
// 設置wifi接入信息(請根據(jù)您的WiFi信息進行修改)
const char* ssid = "WIFE名稱";
const char* password = "WIFE密碼";
const char* mqttServer = "MQTT服務端地址,我們搭建本地thingsboard成功后對應的就是我們網(wǎng)絡的ip地址";
// MQTT服務端連接用戶名密碼
const char* mqttUserName = "設備訪問令牌";
const char* mqttPassword = NULL;
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
const byte ledPin = LED_BUILTIN; // 需要控制的led燈
void setup() {
Serial.begin(9600);
//設置ESP8266工作模式為無線終端模式
WiFi.mode(WIFI_STA);
// 連接WiFi
connectWifi();
// 設置MQTT服務器和端口號
mqttClient.setServer(mqttServer, 1883);
// 連接MQTT服務器
connectMQTTServer();
mqttClient.setCallback(callback); // 設置回調(diào),控制led燈
pinMode(ledPin,OUTPUT);
}
void loop() {
if (mqttClient.connected()) { // 如果開發(fā)板成功連接服務器
mqttClient.loop(); // 保持客戶端心跳
} else { // 如果開發(fā)板未能成功連接服務器
connectMQTTServer(); // 則嘗試連接服務器
}
}
void connectMQTTServer(){
// 根據(jù)ESP8266的MAC地址生成客戶端ID(避免與其它ESP8266的客戶端ID重名)
String clientId = "esp8266-" + WiFi.macAddress();
// 連接MQTT服務器
if (mqttClient.connect(clientId.c_str(), mqttUserName, mqttPassword)) {
//連接成功后就訂閱主題
mqttClient.subscribe("v1/devices/me/rpc/request/+");//訂閱主題
Serial.print("訂閱主題成功!!");
} else {
Serial.println(mqttClient.state());
delay(3000);
}
}
// ESP8266連接wifi
void connectWifi(){
WiFi.begin(ssid, password);
//等待WiFi連接,成功連接后輸出成功信息
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi Connected!");
Serial.println("");
}
//回調(diào)函數(shù)
void callback(char* topic, byte* payload, unsigned int length) {
Serial.println("begin callback");
char s[length];
for (int i=0;i<length;i++) {
s[i]=(char)payload[i];
}
std::string str;
str=s;
DynamicJsonDocument doc(1024);
deserializeJson(doc, str);
JsonObject obj = doc.as<JsonObject>();
const char* methodName;
bool value;
methodName=obj["method"];
value=obj["params"];
Serial.println(methodName);
Serial.println(value);
if(value==1){
Serial.println("開燈");
digitalWrite(ledPin,HIGH);
}else{
Serial.println("關燈");
digitalWrite(ledPin, LOW);
}
}
4需要注意的幾個地方:
1首先要確保我們的ESP8266能夠連接上WIFE
2確保我們的MQTT訂閱成功,即
mqttClient.subscribe(“v1/devices/me/rpc/request/+”);//訂閱主題
這個對應thingsboard中文文檔里有詳細介紹:
3這里的methodName,value接收的thingsboard點擊開關后傳遞過來的指令,這里自己看情況編寫相應代碼,樓主這里只是測試,所以寫的比較簡單。
4mqttUserName這個對應我們設備之前的訪問令牌
5如果測試過程中一直失敗,可以先用MQTT客戶端工具測試看看能不能接收到訂閱的消息
5編寫程序完成后點擊編譯然后上傳燒錄到我們的開發(fā)板中,就可以進行測試了,大功告成?。?!
演示視頻
thingsboard模擬發(fā)送指令控制esp8266的燈開關文章來源:http://www.zghlxwxcb.cn/news/detail-418447.html
學習總結
本次過程只是簡單的模擬了一下設備遠程控制,其實里面還有好多的東西我們可以去實現(xiàn)的,有很多可以優(yōu)化的地方。
例如:可以寫一個微信小程序或者app去遠程控制我們的設備,
現(xiàn)在程序的wife和密碼都是固定的,不靈活,這里可以實現(xiàn)動態(tài)配置,也就是我們經(jīng)常提到的設備配網(wǎng),這個后面也會考慮寫一期記錄一下。還有很多很多,就先記錄到這里了,感興趣的小伙伴可以一起學習交流呀。文章來源地址http://www.zghlxwxcb.cn/news/detail-418447.html
到了這里,關于thingsboard+ESP8266+MQTT實現(xiàn)設備遠程控制的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!