0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

青山老竹農 ? 來源:jf_82863998 ? 作者:jf_82863998 ? 2024-10-25 17:27 ? 次閱讀

?終于要講一講MQTT應用!

本文應各位大佬邀請,詳細講解Air780EP模組MQTT應用的多個AT命令。

Air780EP是低功耗4G模組之一,支持全系列的AT指令以及LuatOS腳本二次開發(fā)。

一、準備工作

1.1 硬件準備

1.2 軟件準備

  • 串口調試工具
    如果沒有準備,推薦使用LLCOM:
  • AT固件下載

進入AT固件頁面按下Ctrl+F,搜索AirM2M_780EP_LTE_AT,即可找到Air780EP模塊所使用的AT固件。

本文示例為:

AirM2M_780EP_V1007_LTE_AT版本固件

推薦選用:相關型號固件名稱后面數字版本號最高的最新relase版本進行調試。

二、MQTT應用流程

合宙低功耗4G模塊支持MQTT和MQTT SSl協(xié)議,MQTT應用的基本流程如下:

  1. 如果要支持SSL,配置SSL參數
  2. 通過TCP連接到MQTT服務器
  3. 發(fā)送MQTT CONNECT到服務器,打開會話連接
  4. 訂閱或者發(fā)布消息

三、MQTT發(fā)布消息

先來看個正常情況下的AT命令序列,如果不理解AT命令含義,請自行參考AT手冊。

AT+CPIN?

+CPIN: READY //查詢sim卡是否正常

OK

AT+CGATT?

+CGATT: 1

//查詢是否附著上數據網絡,如果返回+CGATT: 0表示未附著上

OK

AT+MCONFIG="866289037465624","user","password"

OK

AT+MIPSTART="lbsmqtt.airm2m.com","1884"

OK

CONNECT OK

AT+MCONNECT=1,60

OK

CONNACK OKAT+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ā)布消息示例演示效果:

圖片?

圖片?

相關注意事項:

01. 發(fā)送MIPSTART命令

收到OK僅僅表示4G模塊開始處理這條命令,并不表示TCP已經連接成功;只有收到CONNECT OK才是成功的應答(其余錯誤應答,參考AT手冊)。

02. 發(fā)送MCONNECT命令

收到OK僅僅表示4G模塊開始處理這條命令,并不表示MQTT已經連接成功;只有收到CONNACK OK才是成功的應答(其余錯誤應答,參考AT手冊)。

03. 發(fā)送MSUB命令

收到OK僅僅表示4G模塊開始處理這條命令,并不表示MQTT已經訂閱成功;只有收到SUBACK才是成功的應答(其余錯誤應答,參考AT手冊)。

04. 發(fā)送MPUB命令

如果QOS不是0,則收到OK僅僅表示4G模塊開始處理這條命令,并不表示MQTT已經發(fā)布成功;只有收到PUBACK(QOS為1時)或者PUBCOMP(QOS為2時)才是成功的應答(其余錯誤應答,參考AT手冊)。

四、MQTT接收消息

先來看下接收到訂閱消息時的AT命令處理序列,如果不理解AT命令含義,請自行參考AT手冊。

AT指令手冊下載鏈接:

https://doc.openluat.com/article/4985

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

//默認是直接輸出收到的訂閱消息,不做緩存

+MSUB: "mqtt/sub_topic",6 byte,123456

//設置訂閱消息的處理模式,設置為緩存模式

//接下來收到訂閱消息時,會提示訂閱消息的緩存位置

AT+MQTTMSGSET=1

OK

//在mqtt/sub_topic上收到一條訂閱消息,緩存到位置0

+MSUB: 0

//主動讀取緩存的所有訂閱消息

AT+MQTTMSGGET

+MSUB:mqtt/sub_topic,6 byte,123456

OK

//在mqtt/sub_topic上收到一條訂閱消息,緩存到位置0

+MSUB: 0

//在mqtt/sub_topic上收到一條訂閱消息,緩存到位置1

+MSUB: 1

//主動讀取緩存的所有訂閱消息

AT+MQTTMSGGET

+MSUB:mqtt/sub_topic,6 byte,123456

+MSUB:mqtt/sub_topic,6 byte,123456

OK

接收消息演示效果:

圖片?

圖片?

五、MQTT TCP被動斷開

先來看下連接被動斷開時的AT命令處理序列,如果不理解AT命令含義,請自行參考AT手冊:

AT指令手冊下載鏈接:

https://doc.openluat.com/article/4985

AT+MCONFIG="866289037465624","user","password"

OK

AT+MIPSTART="lbsmqtt.airm2m.com","1884"

OK

CONNECT OK

AT+MCONNECT=1,60

OK

CONNACK OK

CLOSED //此處TCP連接被動斷開

AT+MIPCLOSE

+CME ERROR: 767

//此處無論返回OK、ERROR還是CMEERROR,都直接跳過,不用做正確性判斷

AT+MCONFIG="866289037465624","user","password"

OK

AT+MIPSTART="lbsmqtt.airm2m.com","1884"

OK

CONNECT OK

AT+MCONNECT=1,60

OK

CONNACK OK

六、MQTT PDP被動去激活

先來看下PDP被動去激活時的AT命令處理序列,如果不理解AT命令含義,請自行參考AT手冊。

AT指令手冊下載鏈接:

https://doc.openluat.com/article/4985

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被動去激活

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

七、SSL帶證書驗證流程【單向認證

先來看下SSL帶證書驗證(單向認證)時的AT命令處理序列,如果不理解AT命令含義,請自行參考AT手冊。

AT指令手冊下載鏈接:

https://doc.openluat.com/article/4985

AT+CGATT?

+CGATT: 1

OK

AT+FSCREATE="ca.crt"http://創(chuàng)建CA證書文件

OK

AT+FSWRITE="ca.crt",0,1212,15

//1212是證書文件長度,15為超時時間,這里是舉例說明,請?zhí)钊雽嶋H數據,不要照抄 >

//此處填寫證書數據

OK

AT+SSLCFG="cacert",88,"ca.crt"

//設置CA證書文件為ca.crt

OK

AT+SSLCFG="seclevel",88,1

//1表示設置認證模式為只對服務器認證

OK

AT+MCONFIG="868488076506128","user","password"

//這三個參數可以不加雙引號,第一個參數需要開發(fā)者自己設置

//后兩個參數可以不填,格式為:

AT+MCONFIG="868488076506128","",""

OK

AT+SSLMIPSTART="airtest.openluat.com",8883

//開發(fā)者請修改為自己的服務器地址和端口

OK

CONNECT OK

AT+MCONNECT=1,60

//在MIPSTART返回CONNECT OK后才能發(fā)MCONNECT命令

//而且要立即發(fā),否則會被服務器踢掉

OK

CONNACK OK

--后面發(fā)布和接收與前面一樣,直接參考

八、SSL帶證書驗證流程【雙向認證】

先來看下SSL帶證書驗證(雙向認證)時的AT命令處理序列,如果不理解AT命令含義,請自行參考AT手冊。

AT指令手冊下載鏈接:

https://doc.openluat.com/article/4985

AT+CGATT?

+CGATT: 1

OK

AT+FSCREATE="ca.crt" //創(chuàng)建CA證書文件

OK

AT+FSWRITE="ca.crt",0,1212,15

//1212是證書文件長度,15為超時時間,這里是舉例說明,請?zhí)钊雽嶋H數據,不要照抄 >

//此處填寫證書數據

OK

AT+FSCREATE="client.crt"

//創(chuàng)建客戶端證書文件

OK

AT+FSWRITE="client.crt",0,1127,15 >

//此處填寫證書數據

OK

AT+FSCREATE="client.key"

//創(chuàng)建客戶端key文件

OK

AT+FSWRITE="client.key",0,1679,15 >

//此處填寫證書數據

OK

AT+SSLCFG="cacert",88,"ca.crt"

//設置CA證書文件為ca.crt

OK

AT+SSLCFG="clientcert",88,"client.crt"

//設置客戶端證書文件為client.crt

OK

AT+SSLCFG="clientkey",88,"client.key"

//設置客戶端密鑰文件為client.key

OK

AT+SSLCFG="seclevel",88,2

//設置認證模式為雙向認證

OK

AT+MCONFIG="868488076506128","user","password"

//這三個參數可以不加雙引號,第一個參數需要開發(fā)者自己設置

//后兩個參數可以不填,格式為:

AT+MCONFIG="868488076506128","",""

OK

AT+SSLMIPSTART="airtest.openluat.com",8883

//開發(fā)者請修改為自己的服務器地址和端口

OK

CONNECT OK

AT+MCONNECT=1,60

//在MIPSTART返回CONNECT OK后才能發(fā)MCONNECT命令

//而且要立即發(fā),否則會被服務器踢掉

OK

CONNACK OK

--后面發(fā)布和接收與前面一樣,直接參考

九、常見問題Q&A

以下針對客戶朋友們實際應用中的反饋,整理了MQTT應用中的常見問題:

01. MQTT支持多連接嗎?

目前MQTT僅支持單連接,不支持多連接。

02. MQTT的遺囑如何使用?

通過AT+MCONFIG命令可以設置遺囑的qos、retain標志、topic、payload。

在如下(包含但不僅限于)情況下,服務器會主動發(fā)布遺囑消息到訂閱的客戶端:

  • 模塊和服務器通信異常(例如:模塊突然關機、模塊進入了一個沒有網絡信號的環(huán)境等)超過1.5倍(一般是1.5倍,但不排除服務器可以修改這個時間)的keep alive時間(可以通過AT+MCONNECT設置keep alive時間);
  • 模塊主動執(zhí)行AT+MDISCONNECT,或者AT+MIPCLOSE。

曾經有用戶碰到過如下問題:

模塊設置了遺囑topic為/will_topic,遺囑payload為offline,keep alive時間為5分鐘,模塊關機后,等待2分鐘。

在等待的2分鐘內,其他訂閱了/will_topic的客戶端沒有收到遺囑消息(這是正常的,因為還沒有到達1.5倍的keep alive時間)。

2分鐘后,模塊開機MQTT重連成功后,其他客戶端卻收到了遺囑消息。這是什么原因呢?

這部分機制是服務器端設計的,和模塊無關。個人認為:服務器端仍然在維持2分鐘前的那個MQTT連接,現(xiàn)在模塊開機,用同樣的client id重連后,會斷開之前維護的相同client id的MQTT連接。斷開時,就發(fā)布了一次遺囑消息。

那這種問題,如何解決呢?

模塊可以在AT+MCONNECT返回CONNACK OK之后,通過AT+MPUB一個topic為/will_topic,payload為online的消息,這樣訂閱了遺囑topic的其他客戶端,就會收到這個online消息。

03. 重試多次PDP,MQTT應用一直連接失???

如果重試多次PDP激活,PDP一直激活失敗,或者MQTT一直連接失敗,則嘗試使用如下手段恢復:

  • 使用RESET引腳復位模塊;
  • 極端情況下,直接給模塊斷電,再上電,POWER KEY引腳拉低開機。

04. MPUB命令中,payload包含"如何發(fā)送?

  • 消息中內嵌的雙引號請用22表達;
  • 控制字符 r(0x0D)請用?D表達;
  • 控制字符n(0x0A)請用?A表達;
  • 如果是MCU發(fā)消息,請用22,?D,?A來表達,即需要轉義成。

05. 連接服務器失敗

  • 檢查模塊信號、網絡注冊、網絡附著、PDP激活狀態(tài);
  • 檢查SIM卡是否欠費;
  • 使用mqtt.fx,連接服務器確認是否可以連接成功,排除服務器故障;
  • 部分國外的開源項目提供免費的MQTT代理服務器,因為網絡的原因,國內存在嚴重的延遲或者丟包現(xiàn)象,導致程序運行出現(xiàn)問題,此現(xiàn)象在AT開發(fā)時影響嚴重;
  • 確認是不是域名解析失敗導致,可以通過AT+CDNSGIP=確認域名是否能正常解析(注意:該命令只有在執(zhí)行完at+cstt、at+ciicr、at+cifsr后才能正常工作)。
    如不能正常解析,可以通過AT+CDNSCFG=ip1,ip2設置域名解析服務器。
  • 在MIPSTART /SSLMIPSTART返回CONNECT OK后,才能發(fā)MCONNECT命令,而且要立即發(fā),否則會被服務器踢掉。

06. 數據接收緩存問題

不緩存:

通過AT+MQTTMSGSET=0設置;收到訂閱的publish報文后,立即通過AT口輸出主題、payload長度、payload內容,每個報文中支持的payload內容最長4100字節(jié)。

內存緩存:

通過AT+MQTTMSGSET=1設置;內存中有一個緩存表,一條消息最多4kb,最多支持緩存4條publish報文;收到訂閱的publish報文后,插入緩沖表中的空閑位置,然后通過AT口輸出存儲位置;緩存表滿之后,新收到的publish報文會覆蓋最舊的publish報文。

注意事項:

緩存表位于內存中,斷電或者重啟后,緩存表中的數據會被清空;建議收到數據時,通過AT+MQTTMSGGET及時讀取出來,以防緩沖區(qū)滿覆蓋丟失數據。

07. 數據發(fā)送問題

AT+MPUB最大publish 4100字節(jié),AT+MPUBEX長度取值范圍1-4100。

?

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5054

    文章

    18917

    瀏覽量

    300996
  • 物聯(lián)網

    關注

    2899

    文章

    43822

    瀏覽量

    369347
  • 模組
    +關注

    關注

    6

    文章

    1400

    瀏覽量

    30178
  • MQTT
    +關注

    關注

    5

    文章

    641

    瀏覽量

    22364
收藏 人收藏

    評論

    相關推薦

    MQTT應用看這篇!合宙Air780EP_LuatOS_MQTT應用指南

    Air780EP 是合宙的低功耗4G模組之一,支持LuatOS的腳本二次開發(fā),即使是不太懂技術的老板,也能輕松使用
    的頭像 發(fā)表于 08-08 17:13 ?1481次閱讀
    <b class='flag-5'>MQTT</b>應用看這篇!合宙<b class='flag-5'>Air780EP_LuatOS_MQTT</b>應用指南

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

    過程,Air780EPMQTT是最佳拍檔,讓設備互聯(lián)變得輕松又靠譜。想不想試試這簡單又神奇的操作?那就來吧!本文詳細講解了基于合宙的Air80EP開發(fā)板,使用AT
    的頭像 發(fā)表于 08-19 16:40 ?1837次閱讀
    合宙<b class='flag-5'>Air780EP</b>模塊——AT指令<b class='flag-5'>MQTT</b>接入OneNET<b class='flag-5'>開發(fā)</b>指南

    AT指令速通FTP:合宙Air780EP模塊超詳細教程

    合宙Air780EP低功耗4G模組AT開發(fā)接入FTP超詳細示例!
    的頭像 發(fā)表于 08-20 17:40 ?2061次閱讀
    AT指令速通FTP:合宙<b class='flag-5'>Air780EP</b>模塊超詳細教程

    合宙低功耗4G模組Air780EP——硬件設計01

    Air780EP是一款合宙低功耗LTECat1無線通信模組。 支持FDD-LTE/TDD-LTE的4G遠距離無線 傳輸技術。 另外,模組提供
    的頭像 發(fā)表于 09-02 16:47 ?1425次閱讀
    合宙<b class='flag-5'>低功耗</b><b class='flag-5'>4G</b><b class='flag-5'>模組</b><b class='flag-5'>Air780EP</b>——硬件設計01

    FTP應用看這篇!合宙Air780EP低功耗4G模組AT開發(fā)示例

    ? Air780EP是合宙的[低功耗4G模組]之一,支持全系列的AT指令以及LuatOS腳本二次開發(fā)。 本文應各位大佬邀請,詳細講解了
    的頭像 發(fā)表于 09-29 09:36 ?1665次閱讀
    FTP應用看這篇!合宙<b class='flag-5'>Air780EP</b><b class='flag-5'>低功耗</b><b class='flag-5'>4G</b><b class='flag-5'>模組</b>AT<b class='flag-5'>開發(fā)</b>示例

    超實用!阿里云應用——Air780EP低功耗4G模組AT開發(fā)示例

    ? Air780EP是合宙推出的一款[低功耗4G全網通模組],兼容模組行業(yè)1618經典封裝,支持OpenCPU
    的頭像 發(fā)表于 10-08 09:55 ?1159次閱讀
    超實用!阿里云應用——<b class='flag-5'>Air780EP</b><b class='flag-5'>低功耗</b><b class='flag-5'>4G</b><b class='flag-5'>模組</b>AT<b class='flag-5'>開發(fā)</b>示例

    Air780EP低功耗4G模組AT開發(fā)示例:阿里云應用篇

    ?Air780EP是合宙推出的一款[低功耗4G全網通模組],兼容模組行業(yè)1618經典封裝,支持OpenCPU
    的頭像 發(fā)表于 10-14 14:22 ?616次閱讀
    <b class='flag-5'>Air780EP</b><b class='flag-5'>低功耗</b><b class='flag-5'>4G</b><b class='flag-5'>模組</b>AT<b class='flag-5'>開發(fā)</b>示例:阿里云應用篇

    合宙低功耗4G模組Air780EP——產品規(guī)格書

    合宙低功耗4G模組Air780EP——產品規(guī)格信息介紹
    的頭像 發(fā)表于 08-30 18:07 ?1209次閱讀
    合宙<b class='flag-5'>低功耗</b><b class='flag-5'>4G</b><b class='flag-5'>模組</b><b class='flag-5'>Air780EP</b>——產品規(guī)格書

    合宙低功耗4G模組Air780EP——硬件設計02

    合宙低功耗4G模組Air780EP——硬件設計
    的頭像 發(fā)表于 09-03 15:07 ?435次閱讀
    合宙<b class='flag-5'>低功耗</b><b class='flag-5'>4G</b><b class='flag-5'>模組</b><b class='flag-5'>Air780EP</b>——硬件設計02

    基站定位與Wi-Fi定位看這篇!合宙Air780EP低功耗4G模組AT開發(fā)示例

    ?Air780EP是合宙的[低功耗4G模組]之一,支持全系列的AT指令以及LuatOS腳本二次開發(fā)。 本文應各位大佬邀請,特別講解
    的頭像 發(fā)表于 09-25 07:26 ?326次閱讀
    基站定位與Wi-Fi定位看這篇!合宙<b class='flag-5'>Air780EP</b><b class='flag-5'>低功耗</b><b class='flag-5'>4G</b><b class='flag-5'>模組</b>AT<b class='flag-5'>開發(fā)</b>示例

    RNDIS網卡應用看這篇!合宙Air780EP低功耗4G模組AT開發(fā)示例

    ?Air780EP是合宙的低功耗4G模組之一,支持全系列的AT指令以及LuatOS腳本二次開發(fā)。 本文應各位大佬邀請,特別講解
    的頭像 發(fā)表于 09-30 06:59 ?322次閱讀
    RNDIS網卡應用看這篇!合宙<b class='flag-5'>Air780EP</b><b class='flag-5'>低功耗</b><b class='flag-5'>4G</b><b class='flag-5'>模組</b>AT<b class='flag-5'>開發(fā)</b>示例

    Air780EP低功耗4G模組—AT開發(fā)FOTA遠程升級

    ? Air780EP是合宙推出的一款 低功耗4G全網通模組 ,兼容模組行業(yè)1618經典封裝,支持OpenCPU
    的頭像 發(fā)表于 10-07 20:36 ?195次閱讀
    <b class='flag-5'>Air780EP</b><b class='flag-5'>低功耗</b><b class='flag-5'>4G</b><b class='flag-5'>模組</b>—AT<b class='flag-5'>開發(fā)</b>FOTA遠程升級

    Air780EP低功耗4G模組AT開發(fā):阿里云應用

    Air780EP是合宙推出的一款低功耗4G全網通模組,兼容模組行業(yè)1618經典封裝,支持OpenCPU
    的頭像 發(fā)表于 10-25 17:28 ?115次閱讀
    <b class='flag-5'>Air780EP</b><b class='flag-5'>低功耗</b><b class='flag-5'>4G</b><b class='flag-5'>模組</b>AT<b class='flag-5'>開發(fā)</b>:阿里云應用

    AT開發(fā)HTTP應用:Air780EP低功耗4G模組

    ? 已經寫了一篇基于Air780EP模組AT開發(fā)的FOTA遠程升級指南, 有客戶朋友詢問能否講講HTTP應用部分? 本期特別安排——涵蓋HTTP基本應用流程、GET/POST/SSL請求示例、斷點續(xù)傳、常見問題等內容。
    的頭像 發(fā)表于 10-25 17:29 ?101次閱讀
    AT<b class='flag-5'>開發(fā)</b>HTTP應用:<b class='flag-5'>Air780EP</b><b class='flag-5'>低功耗</b><b class='flag-5'>4G</b><b class='flag-5'>模組</b>

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

    ?針對客戶朋友的應用反饋,特編輯本篇文章:基于Air780EP模組AT開發(fā)的FOTA遠程升級指南。
    的頭像 發(fā)表于 10-25 17:31 ?159次閱讀
    AT<b class='flag-5'>開發(fā)</b>FOTA遠程升級:<b class='flag-5'>Air780EP</b><b class='flag-5'>低功耗</b><b class='flag-5'>4G</b><b class='flag-5'>模組</b>