LIERDA
隨著 5G 時代的來臨,萬物互聯(lián)的偉大構(gòu)想正在成為現(xiàn)實。2021年全球智能物聯(lián)網(wǎng)處于爆發(fā)式增長通道,設(shè)備數(shù)量超過250億臺。海量的設(shè)備接入和設(shè)備管理對網(wǎng)絡(luò)帶寬、通信協(xié)議以及平臺服務(wù)架構(gòu)都帶來了很大挑戰(zhàn)。
通信協(xié)議作為聯(lián)通物與物的橋梁,在物聯(lián)網(wǎng)架構(gòu)中起著關(guān)鍵作用。上周我們已經(jīng)在《【技術(shù)分享】以利爾達MB960/860模組為例,教你快速接入MQTT協(xié)議(上)》一文中介紹了MQTT協(xié)議的基礎(chǔ)知識,本周將介紹接入阿里云平臺MQTT協(xié)議的具體步驟,幫助大家快速上手。
MQTT AT指令接入
1、設(shè)置服務(wù)端IP或域名
AT+MQTTCFG="host",0,"host_name",1883
:服務(wù)端的IP或域名:1~2000字節(jié)字符串。阿里云公共實例接入:a1oGs******.iot-as-mqtt.cn-shanghai.aliyuncs.com
a1oGs******為本示例產(chǎn)品的productKey。
cn-shanghai為本示例所在地域。
示例
AT+MQTTCFG="host",0,"gg0*******.iot-as-mqtt.cn-shanghai.aliyuncs.com",1883
實現(xiàn)說明
●如果設(shè)置IP無需任何操作,只需IP滿足地址格式。
●如果設(shè)置域名,需先使用AT+CFUN=0和AT+NCONFIG=PCO_IE_TYPE,PCO這兩條AT命令開啟DNS服務(wù)器,再次重啟,之后才能使用域名連接。
2、設(shè)置客戶端標識
AT+MQTTCFG="clientid",,
< Link_ID >連接ID:取值0~2。
客戶端標識符:字符串類型,1~128字節(jié)字符串。
示例
AT+MQTTCFG="clientid",0,"8677**********|securemode=2,signmethod=hmacsha1|"
實現(xiàn)說明
如果連接NB-IOT平臺,則需根據(jù)平臺規(guī)則來設(shè)置客戶端標識。
3、連接服務(wù)端
AT+MQTTCONN=,,,,
< Link_ID >連接ID:取值0~2。
SSL TCP連接使能:
0:不采用;
1:采用SSL TCP連接。
will_flag 遺囑標志,取值0或1:
0:不帶遺囑;
1:CONNECT報文帶有遺囑。
用戶名:0~512字節(jié)的字符串。
密碼:0~512字節(jié)的字符串。
注:阿里云平臺用戶名及密碼需用三元組生成,生成方式請參考阿里云平臺提供的密碼生成文檔。
示例
AT+MQTTCONN=0,0,0,"8677******&gg0*******","91C3E702***************************755*****"
實現(xiàn)說明
在連接前需要設(shè)置服務(wù)端ip和clientid,不同的平臺連接使用的用戶名和密碼需要根據(jù)平臺要求進行設(shè)置。如果是加密連接還需要設(shè)置證書,并使ssl_enable為1。設(shè)置will_flag為1時,還需要設(shè)置遺囑。
連接失敗時的錯誤碼如下:
● 0:返回正確;
● 1:未知錯誤;
● 2:申請內(nèi)存失?。?/p>
● 3:參數(shù)檢查錯誤;
● 80:網(wǎng)絡(luò)連接狀態(tài)錯誤(可是未撥號/時間不對/服務(wù)器關(guān)閉);
● 81:MQTT設(shè)置版本錯誤;
● 82:clientid錯誤;
● 83:服務(wù)器拒絕客戶端連接;
● 84:用戶名或者密碼錯誤;
● 85:訂閱失敗#訂閱失敗會導致斷連;
● 86:取消訂閱失??;
● 87:發(fā)布失敗;
● 88:當前未連接;
● 89:當前已有連接又再次發(fā)起連接;
● 90:創(chuàng)建客戶端失??;
● 91:該linkid已創(chuàng)建客戶端又再次發(fā)起創(chuàng)建;
● 92:該linkid未創(chuàng)建客戶端;
● 93:當前MQTT狀態(tài)不允許執(zhí)行該操作。
查詢連接時的狀態(tài)如下:
● state=1 MQTT is initial(未配置)
● state=2 MQTT is connecting
● state=3 MQTT is connected
● state=4 MQTT is disconnected
說明:需要注意,MQTT內(nèi)部實現(xiàn)是先使用設(shè)置的MQTT版本連接,失敗之后會使用MQTT3.1版本來連接。
4、訂閱MQTT消息
AT+MQTTSUB=,,,[,,][,,]
< Link_ID >連接ID:取值0~2。
報文標識符:取值1~65535。
主題名:0~512字節(jié)字符串。一次最多可訂閱3個主題。
訂閱消息QOS等級:取值0~2。
示例
AT+MQTTSUB=0,1,"/gg0*******/867********/user/test",1
收←◆+MQTTSUBACK: 0,1,0
OK
收←◆+MQTTRECV: 0,0,0,0,/gg0*********/867*********/user/test,qtwtewtytweyt
實現(xiàn)說明
訂閱異常包括:
● 報文處理異常,包括非連接、網(wǎng)絡(luò)異常狀態(tài)下收到上位機下發(fā)該AT命令、報文參
數(shù)異常等。
● 超時未收到服務(wù)端回復,包括服務(wù)端回復的報文異常。
● 返回85訂閱失敗,斷連。
5、發(fā)布一個消息
AT+MQTTPUB=,,,,,
< Link_ID >連接ID:取值0~2。
報文標識符:取值1~65535。
發(fā)布消息QOS等級:取值0~2。
保留標志:取值0~1。
主題名:0~512字節(jié)字符串。
有效載荷:0~1500字節(jié)字符串。
示例:AT+MQTTPUB=0,1,0,0,"/gg0*******/8677*********/user/test","this is a test"
收←◆+MQTTPUBACK: 0,1,0
OK
收←◆+MQTTRECV: 0,0,0,0,/gg0********/8677*********/user/test,this is a test
實現(xiàn)說明
●該命令用于發(fā)布時,如果在timeout時間內(nèi)沒有收到報文確認,則會打印ERROR。在收到一個QOS大于0的報文確認消息時,會打印+MQTTPUBACK_MSGID:,其中msgid為PUB報文的信息id。當查詢發(fā)布消息時,查詢的結(jié)果為發(fā)布的次數(shù)。當MQTT服務(wù)器不支持topic為0字節(jié)的字符串時,如果發(fā)送0字節(jié)的topic消息,則會導致斷連。
●該命令最多允許2個發(fā)布消息在重傳隊列中,超過2個發(fā)布消息會直接返回ERROR,不會發(fā)送。重傳隊列會嘗試5次重傳,之后就會清除重傳隊列里的發(fā)布消息。
●在斷連之后計數(shù)會清零。計數(shù)達到最大值建議反轉(zhuǎn),最大值4294967295(unsigned int)。在NB-IoT場景下最大的發(fā)包長度不能超過SEND_MAX_LEN(1358)字節(jié),如果超出長度則會發(fā)送失敗。失敗時會打印實際的發(fā)送長度,用戶需要保證發(fā)包長度不能超過SEND_MAX_LEN(1358)字節(jié)長度。
例如:用戶在非加密連接的情況下發(fā)送1500字節(jié)內(nèi)容,實際包長度為包頭長度和包體長度之和,為1505字節(jié)。包頭長度為1505-1500=5字節(jié),根據(jù)SEND_MAX_LEN(1358)長度限制,可以發(fā)送的包體的長度為SEND_MAX_LEN-包頭長度=1358-5=1353字節(jié).
[1541.451]→◇AT+MQTTPUB=0,1,0,0,"","adebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbade
bcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabad
bceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbe
bebdbadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbd
badbabadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbebfbbabb
dbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcbcbab
cbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbb
ebfadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbad
babadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdb
befbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcb
dbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbeb
fbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadeb
cbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadb
ceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbebfadebcbcbabcbdb
dbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbebfb
babbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcb
cbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbce
ebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebeb
dbadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbad
babadbceebbbebfbbabbdbbefbbebebdbadebcbcbabcbdbdbdbadbabadbceebbbebfbbabbdb
befbbebebd"
[1541.461]收←◆
[Error]:Please don't send a message longer than 1358 bytes. Message length which
contains header and payload is 1505 bytes.
[1541.969]收←◆
+MQTTCLOSE=0,128
ERROR: 0,1,110
ERROR
-
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2911文章
44837瀏覽量
375180
發(fā)布評論請先 登錄
相關(guān)推薦
評論