簡(jiǎn)介
關(guān)聯(lián)文檔和使用工具:
- AT固件獲取
- AT指令手冊(cè)
材料準(zhǔn)備
- [EVB_Air780EP(V)]開發(fā)板一套,包括天線SIM卡
- USB線
- PC電腦
- 串口調(diào)試工具(如果沒有準(zhǔn)備,推薦可以使用llcom,進(jìn)頁(yè)面按下Ctrl+F 搜索 AirM2M_780EP_LTE_AT 即可找到780EP模塊所使用的AT固件,推薦選用該固件名稱后面數(shù)字版本號(hào)最高的最新relase版本進(jìn)行調(diào)試。
- 當(dāng)前文檔示例使用AirM2M_780EP_V1007_LTE_AT版本固件

應(yīng)用概述
4G模塊支持MQTT和MQTT SSl協(xié)議, MQTT應(yīng)用的基本流程如下: 1、如果要支持SSL,配置SSL參數(shù) 2、通過TCP連接到MQTT服務(wù)器 3、發(fā)送MQTT CONNECT到服務(wù)器,打開會(huì)話連接 4、訂閱或者發(fā)布消息
示例
發(fā)布消息示例
先來看個(gè)正常情況下的AT命令序列,如果不理解AT命令含義,請(qǐng)自行參考AT手冊(cè)
AT+CPIN? +CPIN: READY //查詢sim卡是否正常 OK AT+CGATT? +CGATT: 1 //查詢是否附著上數(shù)據(jù)網(wǎng)絡(luò),如果返回+CGATT: 0表示未附著上 OK AT+MCONFIG="866289037465624","user","password" OK AT+MIPSTART="lbsmqtt.airm2m.com","1884" OK CONNECT OK AT+MCONNECT=1,60 OK CONNACK OK AT+MSUB="mqtt/sub_topic",0 OK SUBACK AT+MPUB="mqtt/pub_topic",0,0,"publish 0 payload" OK AT+MPUB="mqtt/pub_topic",1,0,"publish 1 payload" OK PUBACK AT+MPUB="mqtt/pub_topic",2,0,"publish 2 payload" OK PUBREC PUBCOMP
發(fā)布消息示例演示效果


在這個(gè)過程中,注意事項(xiàng)如下:
1、發(fā)送MIPSTART命令后,收到OK僅僅表示4G模塊開始處理這條命令,并不表示TCP已經(jīng)連接成功;只有收到CONNECT OK才是成功的應(yīng)答(其余錯(cuò)誤應(yīng)答,參考AT手冊(cè)) 2、發(fā)送MCONNECT命令后,收到OK僅僅表示4G模塊開始處理這條命令,并不表示MQTT已經(jīng)連接成功;只有收到CONNACK OK才是成功的應(yīng)答(其余錯(cuò)誤應(yīng)答,參考AT手冊(cè)) 3、發(fā)送MSUB命令后,收到OK僅僅表示4G模塊開始處理這條命令,并不表示MQTT已經(jīng)訂閱成功;只有收到SUBACK才是成功的應(yīng)答(其余錯(cuò)誤應(yīng)答,參考AT手冊(cè)) 4、發(fā)送MPUB命令后,如果QOS不是0,則收到OK僅僅表示4G模塊開始處理這條命令,并不表示MQTT已經(jīng)發(fā)布成功;只有收到PUBACK(QOS為1時(shí))或者PUBCOMP(QOS為2時(shí))才是成功的應(yīng)答(其余錯(cuò)誤應(yīng)答,參考AT手冊(cè))
接收消息示例
先來看下接收到訂閱消息時(shí)的AT命令處理序列,如果不理解AT命令含義,請(qǐng)自行參考AT手冊(cè)
AT+MCONFIG="866289037465624","user","password" OK AT+MIPSTART="lbsmqtt.airm2m.com","1884" OK CONNECT OK AT+MCONNECT=1,60 OK CONNACK OK AT+MSUB="mqtt/sub_topic",0 OK SUBACK AT+MPUB="mqtt/sub_topic",0,0,"123456" //在mqtt/sub_topic上收到訂閱消息,payload為123456 //默認(rèn)是直接輸出收到的訂閱消息,不做緩存 +MSUB: "mqtt/sub_topic",6 byte,123456 //設(shè)置訂閱消息的處理模式,設(shè)置為緩存模式 //接下來收到訂閱消息時(shí),會(huì)提示訂閱消息的緩存位置 AT+MQTTMSGSET=1 OK //在mqtt/sub_topic上收到一條訂閱消息,緩存到位置0 +MSUB: 0 //主動(dòng)讀取緩存的所有訂閱消息 AT+MQTTMSGGET +MSUB:mqtt/sub_topic,6 byte,123456 OK //在mqtt/sub_topic上收到一條訂閱消息,緩存到位置0 +MSUB: 0 //在mqtt/sub_topic上收到一條訂閱消息,緩存到位置1 +MSUB: 1 //主動(dòng)讀取緩存的所有訂閱消息 AT+MQTTMSGGET +MSUB:mqtt/sub_topic,6 byte,123456 +MSUB:mqtt/sub_topic,6 byte,123456 OK
接收消息演示效果


TCP被動(dòng)斷開示例
先來看下連接被動(dòng)斷開時(shí)的AT命令處理序列,如果不理解AT命令含義,請(qǐng)自行參考AT手冊(cè)
AT+MCONFIG="866289037465624","user","password" OK AT+MIPSTART="lbsmqtt.airm2m.com","1884" OK CONNECT OK AT+MCONNECT=1,60 OK CONNACK OK CLOSED //此處TCP連接被動(dòng)斷開 AT+MIPCLOSE +CME ERROR: 767 //此處無論返回OK、ERROR還是CME ERROR,都直接跳過,不用做正確性判斷 AT+MCONFIG="866289037465624","user","password" OK AT+MIPSTART="lbsmqtt.airm2m.com","1884" OK CONNECT OK AT+MCONNECT=1,60 OK CONNACK OK
PDP被動(dòng)去激活示例
先來看下PDP被動(dòng)去激活時(shí)的AT命令處理序列,如果不理解AT命令含義,請(qǐng)自行參考AT手冊(cè)
AT+MCONFIG="866289037465624","user","password" OK AT+MIPSTART="lbsmqtt.airm2m.com","1884" OK CONNECT OK AT+MCONNECT=1,60 OK CONNACK OK +CGEV: NW PDN DEACT 1 //此處PDP被動(dòng)去激活 AT+MIPCLOSE OK //此處無論返回OK、ERROR還是CME ERROR,都直接跳過,不用做正確性判斷 AT+MCONFIG="866289037465624","user","password" OK AT+MIPSTART="lbsmqtt.airm2m.com","1884" OK CONNECT OK AT+MCONNECT=1,60 OK CONNACK OK
常見問題
1、MQTT支持多連接嗎 目前MQTT僅支持單連接,不支持多連接 2、MQTT的遺囑如何使用 通過AT+MCONFIG命令可以設(shè)置遺囑的qos、retain標(biāo)志、topic、payload;在如下幾種(包含但是又不僅限于如下情況)情況下,服務(wù)器會(huì)主動(dòng)發(fā)布遺囑消息到訂閱的客戶端:
1、模塊和服務(wù)器通信異常(例如模塊突然關(guān)機(jī)、模塊進(jìn)入了一個(gè)沒有網(wǎng)絡(luò)信號(hào)的環(huán)境等)超過1.5倍(一般是1.5倍,但不排除服務(wù)器可以修改這個(gè)時(shí)間)的 keep alive時(shí)間(可以通過AT+MCONNECT設(shè)置keep alive時(shí)間) 2、模塊主動(dòng)執(zhí)行AT+MDISCONNECT或者AT+MIPCLOSE 曾經(jīng)有用戶碰到過如下問題: 模塊設(shè)置了遺囑topic為/will_topic,遺囑payload為offline,keep alive時(shí)間為5分鐘,模塊關(guān)機(jī)后,等待2分鐘,在等待的2分鐘內(nèi),其他訂閱了/will_topic的客戶端沒有收到遺囑消息(這是正常的,因?yàn)檫€沒有到達(dá)1.5倍的keep alive時(shí)間),2分鐘后,模塊開機(jī)mqtt重連成功后,其他客戶端卻收到了遺囑消息,這是什么原因呢?這部分機(jī)制是服務(wù)器端設(shè)計(jì)的,和模塊無關(guān),個(gè)人認(rèn)為:服務(wù)器端仍然在維持2分鐘前的那個(gè)mqtt連接,現(xiàn)在模塊開機(jī),用同樣的client id重連后,會(huì)斷開之前維護(hù)的相同client id的mqtt連接,斷開時(shí),就發(fā)布了一次遺囑消息。那這種問題,如何解決呢?模塊可以在AT+MCONNECT返回CONNACK OK之后,通過AT+MPUB一個(gè)topic為/will_topic,payload為online的消息,這樣訂閱了遺囑topic的其他客戶端就會(huì)收到這個(gè)online消息
3、MQTT SSL如何使用 本文主要描述了基本流程和異常處理,對(duì)于MQTT SSL使用方法沒有做過多描述,這一部分,請(qǐng)自行參考AT手冊(cè)MQTT章節(jié)下《使用方法舉例》中的"SSL帶證書驗(yàn)證流程"使用方法;支持的SSL參數(shù),請(qǐng)自行參考AT+SSLCFG命令說明
如果SSL的參數(shù)配置不變,則每次開機(jī)運(yùn)行過程中,僅設(shè)置一次即可
4、重試多次PDP,MQTT應(yīng)用一直連接失敗 如果重試多次PDP激活,PDP一直激活失敗,或者M(jìn)QTT一直連接失敗,則嘗試使用如下手段恢復(fù):
1、使用RESET引腳復(fù)位模塊 2、極端情況下,直接給模塊斷電,再上電,POWER KEY引腳拉低開機(jī)
5、MPUB命令中,payload包含"如何發(fā)送? 消息中內(nèi)嵌的雙引號(hào)請(qǐng)用\22 表達(dá);控制字符 \r(0x0D)請(qǐng)用\0D 表達(dá);控制字符\n(0x0A) 請(qǐng)用\0A 表達(dá) 如果是 MCU 發(fā)消息,請(qǐng)用\\22,\\0D,\\0A 來 表達(dá),即\需要轉(zhuǎn)義成\\
6、連接服務(wù)器失敗
- 檢查下模塊信號(hào)、網(wǎng)絡(luò)注冊(cè)、網(wǎng)絡(luò)附著、PDP激活狀態(tài)
- 檢查下SIM卡是否欠費(fèi)
- 使用mqtt.fx,連接服務(wù)器確認(rèn)一下是否可以連接成功,排除服務(wù)器故障
- 部分國(guó)外的開源項(xiàng)目提供免費(fèi)的MQTT代理服務(wù)器,因?yàn)榫W(wǎng)絡(luò)的原因,國(guó)內(nèi)存在嚴(yán)重的延遲或者丟包現(xiàn)象,導(dǎo)致程序運(yùn)行出現(xiàn)問題,此現(xiàn)象在AT開發(fā)時(shí)影響嚴(yán)重
- 確認(rèn)是不是域名解析失敗導(dǎo)致,可以通過AT+CDNSGIP=確認(rèn)一下域名是否能正常解析(注意:該命令只有在執(zhí)行完at+cstt、at+ciicr、at+cifsr后才能正常工作),不能正常解析,可以通過AT+CDNSCFG=ip1,ip2設(shè)置域名解析服務(wù)器。
- 在 MIPSTART /SSLMIPSTART返 回 CONNECT OK后 才 能 發(fā) MCONNECT命令,而且要立即發(fā),否則會(huì)被服務(wù)器踢掉。
7、數(shù)據(jù)接收緩存問題
不緩存:通過AT+MQTTMSGSET=0設(shè)置;收到訂閱的publish報(bào)文后,立即通過AT口輸出主題、payload長(zhǎng)度、payload內(nèi)容,每個(gè)報(bào)文中支持的payload內(nèi)容最長(zhǎng)4100字節(jié)
內(nèi)存緩存:通過AT+MQTTMSGSET=1設(shè)置;內(nèi)存中有一個(gè)緩存表,一條消息最多4kb,最多支持緩存4條publish報(bào)文;收到訂閱的publish報(bào)文后,插入緩沖表中的空閑位置,然后通過AT口輸出存儲(chǔ)位置;緩存表滿之后,新收到的publish報(bào)文會(huì)覆蓋最舊的publish報(bào)文
注意:緩存表位于內(nèi)存中,斷電或者重啟后,緩存表中的數(shù)據(jù)會(huì)被清空;建議收到數(shù)據(jù)時(shí),通過AT+MQTTMSGGET及時(shí)讀取出來,以防緩沖區(qū)滿覆蓋丟失數(shù)據(jù)
8、數(shù)據(jù)發(fā)送問題 AT+MPUB最大publish 4100字節(jié),AT+MPUBEX長(zhǎng)度取值范圍1-4100
-
開發(fā)板
+關(guān)注
關(guān)注
25文章
5499瀏覽量
102161 -
串口調(diào)試
+關(guān)注
關(guān)注
2文章
270瀏覽量
25042 -
MQTT
+關(guān)注
關(guān)注
5文章
668瀏覽量
23461 -
合宙通信
+關(guān)注
關(guān)注
0文章
148瀏覽量
2027
發(fā)布評(píng)論請(qǐng)先 登錄
Air780EP模塊 LuatOS開發(fā)-MQTT接入阿里云應(yīng)用指南

MQTT應(yīng)用看這篇!合宙Air780EP_LuatOS_MQTT應(yīng)用指南

合宙Air780EP模塊開發(fā)常見問題——異常斷鏈篇

合宙Air780EP模塊——AT指令MQTT接入OneNET開發(fā)指南

Air780EP模塊AT開發(fā)FOTA遠(yuǎn)程升級(jí)指南

Air780E/Air780EP/Air780EQ/Air201模塊遇到死機(jī)問題如何分析

Air780E/Air780EP/Air780EQ/Air201模塊遇到內(nèi)存死機(jī)如何分析

Air780EP模塊 AT開發(fā)-MQTT接入OneNET移動(dòng)物聯(lián)網(wǎng)平臺(tái)應(yīng)用指南

合宙 Air780E/Air780EP/Air780EQ/Air201模塊遇到死機(jī)問題如何分析

合宙LuatOS開發(fā)板Core_Air780EP使用說明

MQTT應(yīng)用:Air780EP低功耗4G模組AT開發(fā)

AT開發(fā)FOTA遠(yuǎn)程升級(jí):Air780EP低功耗4G模組

評(píng)論