前言
巴法云物聯網云平臺,就如它的檔案介紹的,是一個專注物體聯網的神奇的設備云平臺(cloud.bemfa.com),它有以下特征,輕量級,支持發布/訂閱模式,提供遺囑機制,支持TCP長連接,全平臺兼容,本文,將介紹如何通過esp8266這個芯片連接到巴法云的TCP設備云,
(一)注冊添加TCP設備
(1)注冊巴法云賬號
到巴法云官網或直接進入 https://cloud.bemfa.com/u_login.php?reurl=https://cloud.bemfa.com/tcp/index.html
如下圖,點擊“微信一鍵登錄”,掃碼直接登錄注冊,然后直接進入“控制臺”

(2)創建主題
登錄后,會直接跳轉到巴法云云平臺的個人控制臺,如下圖,選中TCP設備云,輸入主題名“test”,點擊新建主題,便可以創建一個名為test的主題,之后我們就可以對這個主題進行訂閱或發布了,

(二)訂閱發布主題
完成上面后,我們可以使用 SSCOM5 串口/網路除錯助手來除錯我們之前創建的主題,uid即用戶私鑰,可以直接在用戶控制臺獲取
(1)TCP設備相關指令
這主要參考官方檔案關于 TCP設備云部分,
TCP服務器地址IP: bemfa.com 服務器埠:8340
訂閱主題格式
? cmd=1&uid=7d54f85af42976ee3c2693e6xxxxxxxx&topic=light002\r\n
正常回傳:
cmd=1&res=1
發布資訊格式
? cmd=2&uid=7d54f85af42976ee3c2693e6xxxxxxxx&topic=light002&msg=off\r\n
正常回傳:
cmd=2&res=1
訂閱主題,并獲取一次已推送的訊息
? cmd=3&uid=7d54f85af42976ee3c2693e6xxxxxxxx&topic=light002\r\n
正常回傳:
cmd=3&uid=7d54f85af42976ee3c2693e6xxxxxxxx&topic=light002&msg=on
獲取一次時間
? cmd=7&uid=7d54f85af42976ee3c2693e6xxxxxxxx&type=1\r\n
正常回傳:
2021-06-11 16:39:27
獲取一次已發訊息
? cmd=9&uid=7d54f85af42976ee3c2693e6xxxxxxxx&topic=light002\r\n
正常回傳:
cmd=9&uid=7d54f85af42976ee3c2693e6xxxxxxxx&topic=light002&msg=on
發送心跳
? ping\r\n
正常回傳:
cmd=0&res=1
json回應
上述任意指令中加入 mode=1 時,服務器回應的資料格式是 json 型別,
例如發送:
cmd=2&uid=4d9ec352e0376f2110a0c601a2857225&topic=light002&msg=on&mode=1
正常回應:
{“cmd”:2,“res”:1}
此時訂閱light002的設備將收到:
{“cmd”:2,“time”:1623402740,“uid”:“4d9ec352e0376f2110a0c601a2857225”,“topic”:“light002”,“msg”:“on”}
其中time為發送訊息的時間戳
欄位說明
cmd:為訊息型別
cmd=1 時為訂閱訊息,當設備發送一次此訊息型別,之后就可以收到發往該主題的訊息
cmd=2 時為發布訊息,向訂閱該主題的設備發送訊息
cmd=3 是訂閱訊息,和cmd=1相同,并且會拉取一次已發送過的訊息
cmd=7 是獲取時間,獲取當前北京時間
cmd=9 為遺囑訊息,拉取一次已經發送的訊息
uid:用戶私鑰
可在控制臺獲取
topic:用戶主題
可以在控制臺創建主題,格式為英文或數字,相當于設備標識
msg: 為訊息體
用戶想要發送到某個主題的資料
獲取時間指令說明
type=1 獲取當前日期和時間,例如:2021-06-11 17:20:54
type=2 獲取當前時間,例如:17:20:54
type=3 獲取當前時間戳,例如:1623403325
符號說明
\r\n: 為回車換符,每條指令后都需要有回車換行
&: 為連接符,各欄位間用’&'隔離
心跳說明
發送任意資料 為心跳訊息,包括上述指令也算是心跳,但要以回車換行結尾,
心跳訊息是告訴服務器設備還在線,可30秒發送一次,結尾以\r\n結尾,
可選功能
推送訊息時:主題名后加/set推送訊息,表示向所有訂閱這個主題的設備們推送訊息,假如推送者自己也訂閱了這個主題,訊息不會被推送給它自己,以防止自己推送的訊息被自己接收,
推送訊息時:主題名后加/up推送訊息,表示只更新云端資料,不進行任何推送,
例如向主題 light002推送資料,可為 light002/set , light002/up
示例:cmd=2&uid=4d9ec352e0376f2110a0c601a2857225&topic=light002/set&msg=on
(2)除錯
測驗的內容就是上面的指令,使用網路除錯助手連接上巴法云后,修改uid,就可以直接發送指令了,下面圖片是回傳的結果,

(三)ESP8266接入巴法云
這里給出測驗代碼,ESP8266 Arduino IDE開發環境的配置,以及ESP8266的相關編程,可以參考我的另一篇博文《esp8266環境配置以及相關學習資料》,下面代碼,訂閱了一個test主題,當有資訊下發時,會直接將資料輸出到ArduinoIDE的串口查看器上,
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti wifiMulti; // 建立ESP8266WiFiMulti物件
const char* host = "bemfa.com"; // 網路服務器地址
const int httpPort = 8340; // http埠80
// WiFi連接資訊
const char* WiFi_SSID = "ling";
const char* WiFi_Password = "ling....9";
// 建立WiFi客戶端物件,物件名稱client
WiFiClient client;
void setup(){
Serial.begin(9600);
WiFi.mode(WIFI_STA); // 設定ESP8266為無線終端模式
wifiMulti.addAP(WiFi_SSID, WiFi_Password);
Serial.println("Connecting ...");
// 嘗試進行wifi連接,
int i = 0;
while (wifiMulti.run() != WL_CONNECTED) {
delay(1000);
Serial.print(i++); Serial.print(' ');
}
// WiFi連接成功后將通過串口監視器輸出連接成功資訊
Serial.println("");
Serial.print("Connected to ");
Serial.println(WiFi.SSID()); // WiFi名稱
Serial.print("IP address:\t");
Serial.println(WiFi.localIP()); // IP
//連接巴法云
client.connect(host, httpPort);
Serial.print("conneted bamfa!\n");
//訂閱主題test
client.print("cmd=1&uid=<填你們自己的uid>&topic=test\r\n");
}
void loop(){
// 判斷登錄狀態
if(not client.connected()){
//連接巴法云
client.connect(host, httpPort);
Serial.print("reconneted bamfa!\n");
//訂閱主題test
client.print("cmd=1&uid=<填你們自己的uid>&topic=test\r\n");
}
//輸出結果
while (client.connected() || client.available()){
if (client.available()){
String line = client.readStringUntil('\n');
Serial.println(line);
}
}
delay(10);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/310650.html
標籤:其他
上一篇:Linux——Linux驅動之字符類設備驅動撰寫實踐,從0到1手把手教你字符類設備如何申請設備號,如何注冊設備,如何自動創建設備節點
下一篇:盲盒能夠持續火爆的原因
