隨著物聯(lián)網(wǎng)行業(yè)的快速發(fā)展,涌現(xiàn)出越來越多物聯(lián)網(wǎng)云服務(wù)平臺(tái)。如何快速實(shí)現(xiàn)應(yīng)用開發(fā),如何管理,如何讓設(shè)備快速上云,成為關(guān)注的焦點(diǎn)。
本文將描述如何使用NB860系列模組通過MQTT指令快速接入利爾達(dá)IoT基礎(chǔ)服務(wù)平臺(tái),并介紹兩者數(shù)據(jù)交互操作流程,詳細(xì)的AT交互流程可以幫助用戶或開發(fā)人員盡快完成相關(guān)的應(yīng)用開發(fā)。
所需產(chǎn)品
本次接入的利爾達(dá)IoT基礎(chǔ)服務(wù)平臺(tái)是我司自主研發(fā)的云平臺(tái),為設(shè)備提供安全可靠的連接管理能力,整合物聯(lián)網(wǎng)產(chǎn)業(yè)鏈上下游,向下連接智能設(shè)備,向上承接物聯(lián)網(wǎng)應(yīng)用,形成端到云完整鏈路物聯(lián)網(wǎng)解決方案,賦能企業(yè)各類IOT場(chǎng)景接入。
另外用到的利爾達(dá)NB860/MB960/MB260系列模組是基于5G NB-IoT芯片自主開發(fā)的第三代NB-IoT模組。該款模組集高性價(jià)比、高安全性和低功耗等優(yōu)點(diǎn)于一身,新增藍(lán)牙、OpenCPU、GNSS定位等能力,為智能表計(jì)、智能煙感、智能停車、智慧路燈等百萬級(jí)成熟NB-IoT應(yīng)用提供了更優(yōu)選擇。
利爾達(dá)NB860/MB960/MB260系列模組支持TCP/UDP、MQTT、LwM2M等多種協(xié)議接入云平臺(tái),為行業(yè)應(yīng)用開發(fā)提供了更多的可能性。今天文章第一期將為大家介紹利爾達(dá)NB860模組基于MQTT協(xié)議快速接入利爾達(dá)IoT基礎(chǔ)服務(wù)平臺(tái),實(shí)現(xiàn)數(shù)據(jù)交互。
快速上云設(shè)備端完整AT示例流程
//配置服務(wù)器IP及域名
AT+MQTTCFG="host",0,"mqtt.xiot.senthink.com",1883
OK
//配置客戶端標(biāo)識(shí)
AT+MQTTCFG="clientid",0,"B6E092A55031428493AF6AAD6D694AD5"
OK
//連接服務(wù)器
[11:31:16.270]發(fā)→◇AT+MQTTCONN=0,0,0,"5D6A3E7E-35884709-865186050012583","6387E4120EDD5A214F9A07D4BD2FB051"
+MQTTCONNACK: 0,0,0
OK
//訂閱MQTT消息AT+MQTTSUB=0,1,"/sys/5D6A3E7E/35884709/865186050012583/downlink",1
+MQTTSUBACK: 0,1,0
OK
//設(shè)備請(qǐng)求入網(wǎng)
AT+MQTTPUB=0,1,0,0,"/sys/device/join","{"MessageId": 1231,"HeaderCtrl": 2,"Mode": 1,"Nonce": 123,"Payload": {"OpenID": "5D6A3E7E", "ProductID": "35884709","NodeEui": "865186050012583","ClientID": "B6E092A55031428493AF6AAD6D694AD5", "Type": 2,"Sign": "1fb6a0da"}}"
[11:40:42.489]收←◆+MQTTPUBACK: 0,1,0
OK
//收到服務(wù)器下發(fā)數(shù)據(jù)
+MQTTRECV: 0,3,1,0,/sys/5D6A3E7E/35884709/865186050012583/downlink,{"HeaderCtrl":2,"Mode":1,"Nonce":14,"Payload":{"Code":0,"SessionID":"75FC7DC3"},"MessageId":1231}
//上發(fā)設(shè)備端數(shù)據(jù)AT+MQTTPUB=0,1,0,0,"/sys/5D6A3E7E/35884709/865186050012583/uplink","{ "MessageId" : 1231,"HeaderCtrl":4,"Mode":1,"Nonce":10,"Payload":"CB96395F5065FD121D88B1593EFE"}"+MQTTPUBACK: 0,1,0
OK
//收到服務(wù)器下發(fā)數(shù)據(jù)
+MQTTRECV: 0,4,1,0,/sys/5D6A3E7E/35884709/865186050012583/downlink,{"MessageId":1231,"HeaderCtrl":4,"Code":"200","Msg":"SUCCESS"}
+MQTTRECV: 0,5,1,0,/sys/5D6A3E7E/35884709/865186050012583/downlink,{"HeaderCtrl":7,"Mode":0,"Nonce":48,"Payload":"wwdwdwd","MessageId":751504437}
如上圖所示,示例流程展示了設(shè)備在配置及連接后進(jìn)行收發(fā)數(shù)據(jù)的調(diào)試操作,在實(shí)際應(yīng)用開發(fā)中通過開發(fā)MCU代碼適配參數(shù),即可完成了訂閱推送(應(yīng)用APP/Web)前所有開發(fā)工作,下文將以上步驟給大家做詳細(xì)講解。
Lierda X平臺(tái)操作流程
※ 用戶注冊(cè)
1.訪問https://account.xiot.senthink.com/login,點(diǎn)擊注冊(cè)按鈕,進(jìn)入注冊(cè)頁面2.填寫注冊(cè)信息,完成注冊(cè)3.完成信息認(rèn)證,開通物聯(lián)網(wǎng)平臺(tái)
圖1 注冊(cè)頁面
※ 設(shè)備接入前準(zhǔn)備事項(xiàng)
設(shè)備在接入利爾達(dá)IoT基礎(chǔ)服務(wù)平臺(tái)之前,需要先完成下事項(xiàng):
1.在平臺(tái)提供的管理后臺(tái)注冊(cè)一個(gè)硬件廠商賬號(hào),云平臺(tái)會(huì)為該賬號(hào)分配一個(gè)廠商的唯一標(biāo)識(shí)OpenID;2.注冊(cè)廠商賬號(hào)后,需要在平臺(tái)提供的管理后臺(tái)上創(chuàng)建一個(gè)產(chǎn)品類,云平臺(tái)會(huì)為該產(chǎn)品分配一個(gè)產(chǎn)品的唯一標(biāo)識(shí) ProductID 以及產(chǎn)品的密鑰 ProductKey(用于入網(wǎng)加密以及會(huì)話 Key 的更新,注意保密!);3.設(shè)備接入
利爾達(dá)IoT基礎(chǔ)服務(wù)平臺(tái)
之前,必須要將基礎(chǔ)參數(shù)燒錄進(jìn)設(shè)備。*至此,接入前的準(zhǔn)備工作完成!
※ 注冊(cè),創(chuàng)建產(chǎn)品設(shè)備
前提條件:
已在利爾達(dá)IoT基礎(chǔ)服務(wù)平臺(tái)注冊(cè)賬號(hào)。
圖2 產(chǎn)品創(chuàng)建頁面
步驟1:創(chuàng)建產(chǎn)品
1.登錄物聯(lián)網(wǎng)平臺(tái)控制臺(tái)2.在云平臺(tái)頁面,找到產(chǎn)品管理,單擊產(chǎn)品管理進(jìn)入產(chǎn)品詳情頁面。在中間導(dǎo)航欄,選擇創(chuàng)建產(chǎn)品,單擊創(chuàng)建產(chǎn)品,如下圖所示。
圖3 產(chǎn)品創(chuàng)建
步驟2:設(shè)置物模型、topic消息等,添加自定義Topic
1.登錄物聯(lián)網(wǎng)平臺(tái)控制臺(tái)。2.在產(chǎn)品管理頁面,找到對(duì)應(yīng)的產(chǎn)品,單擊產(chǎn)品進(jìn)入產(chǎn)品詳情頁面。3.在產(chǎn)品頁面,找到需要自定義Topic類的產(chǎn)品,并單擊對(duì)應(yīng)操作欄中的查看按鈕。4、在產(chǎn)品詳情頁面,單擊Topic類詳情 > 自定義Topic > 定義Topic類。5、配置參數(shù),單擊確認(rèn)。
圖4 新建topic
步驟3:創(chuàng)建設(shè)備
1、登錄物聯(lián)網(wǎng)平臺(tái)控制臺(tái)。
2、在左側(cè)導(dǎo)航欄,選擇設(shè)備管理>設(shè)備列表。3、在設(shè)備頁面,單擊添加設(shè)備。4、在添加設(shè)備對(duì)話框中,輸入設(shè)備信息,單擊確認(rèn)。
圖5 設(shè)備創(chuàng)建
執(zhí)行結(jié)果
設(shè)備注冊(cè)成功后,將自動(dòng)彈出設(shè)備證書彈框。您可以查看、一鍵復(fù)制設(shè)備證書信息,包含DeviceID、DeviceSecret、OpenID、ProductID和ProductKey,是設(shè)備與物聯(lián)網(wǎng)平臺(tái)進(jìn)行通信的重要身份認(rèn)證,建議您妥善保管。
后續(xù)步驟
1.在設(shè)備列表頁,單擊對(duì)應(yīng)設(shè)備,進(jìn)入設(shè)備詳情頁。您可以查看設(shè)備證書信息、數(shù)據(jù)加密密鑰、繼承產(chǎn)品的基礎(chǔ)信息、禁用/啟用設(shè)備、設(shè)備狀態(tài)、激活時(shí)間、最后在線/離線時(shí)間等。2.在設(shè)備詳情頁,可對(duì)設(shè)備在線調(diào)試、遠(yuǎn)程配置和日志分析。3.在設(shè)備列表頁,可以刪除不再使用的設(shè)備。刪除設(shè)備不可撤回,請(qǐng)謹(jǐn)慎操作。
至此,平臺(tái)側(cè)操作已全部完成。
※ 設(shè)備側(cè)操作
上電檢查流程
1.AT //判斷模組是否上電開機(jī)成功2.AT+CFUN=1 //關(guān)閉飛行模式3.AT+CEREG? //判斷PS域附著狀態(tài),第二個(gè)參數(shù)為1或5表示附著正常。
設(shè)置服務(wù)端IP或域名
使用AT+MQTTCFG="host",0,"host_name",1883命令設(shè)置服務(wù)端IP或域名。其中,:服務(wù)端的IP或域名:1~2000字節(jié)字符串。LierdaX平臺(tái)MQTT接入默認(rèn)域名為:mqtt.xiot.senthink.com,1883。
示例:
AT+MQTTCFG="host",0,"mqtt.xiot.senthink.com",1883
設(shè)置客戶端標(biāo)識(shí)
使用AT+MQTTCFG="clientid",,命令設(shè)置客戶端標(biāo)識(shí)連接ID:取值0~2。客戶端標(biāo)識(shí)符:字符串類型,1~128字節(jié)字符串。賢芯平臺(tái)clientid可在設(shè)備詳情頁查看。
示例:
AT+MQTTCFG="clientid",0,"ACF37***************EA9F3582"
連接服務(wù)端
使用AT+MQTTCONN=,,,,命令連接服務(wù)端,在收到+MQTTCONNACK: 0,0,0 OK即已經(jīng)成功連接上平臺(tái)。連接ID:取值0~2。 SSL TCP連接使能:0:不采用;1:采用SSL TCP連接。will_flag 遺囑標(biāo)志,取值0或1:0:不帶遺囑;1:CONNECT報(bào)文帶有遺囑。用戶名:0~512字節(jié)的字符串。密碼:0~512字節(jié)的字符串。注:賢芯平臺(tái)登錄賬號(hào)以及密碼在創(chuàng)建設(shè)備時(shí)自動(dòng)生成,可在設(shè)備詳情頁查看。
示例:
AT+MQTTCONN=0,0,0,"5*******-********-8************3","7*******************AB2C2"
訂閱MQTT消息
使用AT+MQTTSUB=,,,[,,]
[,,]命令訂閱消息,已經(jīng)訂閱成功的消息可在平臺(tái)上的設(shè)備topic列表查看。
< Link_ID >連接ID:取值0~2。
報(bào)文標(biāo)識(shí)符:取值1~65535。
主題名:0~512字節(jié)字符串。一次最多可訂閱3個(gè)主題。
訂閱消息QOS等級(jí):取值0~2。
示例:
AT+MQTTSUB=0,1,"/sys/5********/*********/86**********83/downlink",1
收←◆
+MQTTSUBACK: 0,1,0
OK
設(shè)備請(qǐng)求入網(wǎng)(Join)
設(shè)備上報(bào)的通用入網(wǎng) Topic:/sys/device/join
設(shè)備在進(jìn)行正式的數(shù)據(jù)通信之前,必須先向 IoT 平臺(tái)請(qǐng)求入網(wǎng)。設(shè)備應(yīng)主動(dòng)與 IoT 平臺(tái)建立 TCP Socket 鏈接。在成功建立鏈接后,設(shè)備必須向平臺(tái)發(fā)送請(qǐng)求入網(wǎng)數(shù)據(jù)幀,以讓平臺(tái)為設(shè)備分配通信資源;否則平臺(tái)將拒絕與設(shè)備進(jìn)行通信。
請(qǐng)求入網(wǎng)數(shù)據(jù)幀使用的 Command 為 2;數(shù)據(jù)幀格式和內(nèi)容如下所示:
{ "MessageId" : 1231,
"HeaderCtrl":2, //命令碼
"Mode":0, //0:不加密, 1:加密
"Nonce":10, //1-128隨機(jī)數(shù)
"Payload":{
"OpenID":"E0C040B1",
"ProductID":"A4BC6002",
"NodeEui":"....", //設(shè)備標(biāo)識(shí)
"ClientID":"....", //認(rèn)證后返回的 ClientID "Type":0, //0:一型一密免注冊(cè),1:一型一密預(yù)注冊(cè),2:一機(jī)一密預(yù)注冊(cè)
"Sign":"FE448731"
}
}
設(shè)備向 IoT 平臺(tái)發(fā)起的入網(wǎng)請(qǐng)求數(shù)據(jù)幀中包含了Payload域,用于攜帶額外的信息。Payload域中包含的內(nèi)容及說明如下所示:
平臺(tái)收到入網(wǎng)請(qǐng)求后,根據(jù)當(dāng)前產(chǎn)品類型是免注冊(cè)還是預(yù)注冊(cè),重新計(jì)算 Sign 并與設(shè)備上報(bào)的 Sign 值進(jìn)行對(duì)比,不同類型設(shè)備的 Sign 計(jì)算規(guī)則詳見2.4小節(jié)。
平臺(tái)收到設(shè)備的入網(wǎng)請(qǐng)求數(shù)據(jù)幀并成功認(rèn)證設(shè)備身份后,會(huì)為該設(shè)備分配通信資源,然后使用同樣的Command(2)響應(yīng)設(shè)備。IoT平臺(tái)返回Topic :/sys/{openId}/{productId}/{deviceId}/downlink,響應(yīng)設(shè)備入網(wǎng)請(qǐng)求的數(shù)據(jù)如下:
{ "HeaderCtrl":2, //命令碼
"MessageId" : 1231,
"Mode":0, //0:不加密, 1:加密
"Nonce":10, //1-128隨機(jī)數(shù)
"Payload":{
"Code":0,
"SessionID":"4655434B"
}
}
Join指令的 Code 說明:對(duì)于設(shè)備請(qǐng)求入網(wǎng)指令(Join),Code 定義為平臺(tái)回復(fù)設(shè)備的入網(wǎng)請(qǐng)求的響應(yīng)碼。
響應(yīng)碼定義如下表所示:
如果設(shè)備發(fā)送了入網(wǎng)請(qǐng)求,等待超時(shí)后沒有收到平臺(tái)的任何回復(fù),則有可能是網(wǎng)絡(luò)問題導(dǎo)致數(shù)據(jù)丟失,建議檢查網(wǎng)絡(luò)并重試。只有響應(yīng)碼(Code)值為0的時(shí)候,響應(yīng)數(shù)據(jù)中的 Payload 中所攜帶的 SessionID 才是 IoT 平臺(tái)分配的有效的 SessionID:
設(shè)備成功入網(wǎng)后,IoT平臺(tái)返回了 SessionID。設(shè)備需要使用入網(wǎng)安全密鑰ProductKey和本次回復(fù)中的隨機(jī)數(shù)Nonce來計(jì)算生成后續(xù)與 IoT平臺(tái)進(jìn)行通信過程中用于加密用戶應(yīng)用數(shù)據(jù)的密鑰(SessionKey),計(jì)算方法如下描述(偽代碼):
加密方式:AES128_ECB_PKCS5Padding SessionKey = ENCRYPT( ProductKey , SessionID + Nonce);
示例:
ProductKey :A0 1A 24 79 67 25 73 DF 84 53 7D F4 C7 3D 3F CC
SessionID:46 55 43 4B
Nonce(123):7B
則拼接結(jié)果為:46 55 43 4B 7B 加密運(yùn)算結(jié)果為:40 8C 79 0F 85 BF 60 E6 D4 F1 C1 3C 6A 5C 4C 8B SessionKey = 408C790F85BF60E6D4F1C13C6A5C4C8B
如果使用非加密模式進(jìn)行應(yīng)用數(shù)據(jù)的傳輸,則可以忽略此步驟,即不需要計(jì)算 SessionKey 的值。
特別注意:設(shè)備的入網(wǎng)請(qǐng)求數(shù)據(jù)如果設(shè)置了Mode 為1,則平臺(tái)會(huì)在設(shè)備心跳和設(shè)備數(shù)據(jù)上行時(shí)檢查設(shè)備的SessionKey是否過期,如果平臺(tái)監(jiān)測(cè)到設(shè)備的SessionKey過期,則會(huì)主動(dòng)更新設(shè)備SessionKey并下發(fā)給設(shè)備;如果入網(wǎng)請(qǐng)求數(shù)據(jù)設(shè)置了 Mode 位為0,則平臺(tái)不會(huì)檢查設(shè)備的 SessionKey 是否過期。
入網(wǎng)sing值計(jì)算請(qǐng)參考文檔《Lierda_NB860&MB960&MB260_Application_Notes_MQTT對(duì)接Lierda X平臺(tái)》
備注:
設(shè)備每次與 IoT 平臺(tái)建立新的 MQTT 鏈接后(首次連接或者斷線重連),都必須向平臺(tái)重新請(qǐng)求入網(wǎng),否則平臺(tái)將拒絕與設(shè)備進(jìn)行通信。
數(shù)據(jù)交互
通過AT+MQTTPUB=,,,,,命令向平臺(tái)發(fā)布消息。
連接ID:取值0~2。
報(bào)文標(biāo)識(shí)符:取值1~65535。
發(fā)布消息QOS等級(jí):取值0~2。
保留標(biāo)志:取值0~1。
主題名:0~512字節(jié)字符串。
有效載荷:0~1500字節(jié)字符串。
示例:
AT+MQTTPUB=0,1,0,0,"/sys/5********/*********/86**********83/uplink","{ "MessageId" :
1231,"HeaderCtrl":4,"Mode":1,"Nonce":10,"Payload":"CB963****************EFE"}"
□
[11:06:12.040]收←◆
[11:06:12.060]收←◆
+MQTTPUBACK: 0,1,0
OK
[11:06:13.680]收←◆
+MQTTRECV:0,8,1,0,/sys/5********/*********/86**********83/downlink,{"MessageId":1231,"HeaderCtrl":4,"Code":"200","Msg":"SUCCESS"}
+MQTTRECV:0,9,1,0,/sys/5********/*********/86**********83/uplink_ack,{"MessageId":1231,"HeaderCtrl":4,"Code":"200","Msg":"SUCCESS"}
設(shè)備上報(bào)數(shù)據(jù)可在運(yùn)行日志中查看;下發(fā)透?jìng)鲾?shù)據(jù)可在在線調(diào)試中實(shí)現(xiàn)。
至此,我們已完成基于MQTT協(xié)議的端(Lierda NB860模組)到云(Lierda X平臺(tái))對(duì)接并實(shí)現(xiàn)數(shù)據(jù)交互功能。下一期我們將介紹NB860模組配合X平臺(tái)進(jìn)行云云對(duì)接快速上云,敬請(qǐng)期待。
審核編輯:符乾江
-
云平臺(tái)
+關(guān)注
關(guān)注
1文章
1308瀏覽量
38988 -
MQTT
+關(guān)注
關(guān)注
5文章
651瀏覽量
22541
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論