今天我講解的是關(guān)于4G模組AT指令之MQTT應(yīng)用,有興趣的朋友可以閱讀本文深度學(xué)習。
一、MQTT 協(xié)議簡介
1.1 MQTT 概述
MQTT 是一種輕量級的消息傳輸協(xié)議,旨在在物聯(lián)網(wǎng)(IoT)應(yīng)用中實現(xiàn)設(shè)備間的可靠通信。它使用發(fā)布-訂閱模式,其中包括一個 MQTT 服務(wù)端(代理或服務(wù)器)和多個 MQTT 客戶端之間的通信。
MQTT 協(xié)議具有以下特點:
輕量級:MQTT 協(xié)議設(shè)計簡單,協(xié)議頭部開銷小,適用于資源受限的設(shè)備和網(wǎng)絡(luò)。
低帶寬消耗:MQTT 采用二進制編碼,有效地利用網(wǎng)絡(luò)帶寬。
異步通信:客戶端可以隨時發(fā)布和訂閱消息,無需等待對方的響應(yīng)。
發(fā)布-訂閱模式:消息發(fā)布者將消息發(fā)布到特定的主題,而訂閱者則訂閱感興趣的主題。這種模式支持松耦合的通信和靈活的消息傳遞。
1.2 MQTT 協(xié)議中重要名詞
username用戶名,password 密碼,clientid 用戶標識,mqtt 可以通過前兩個參數(shù)保證連接的安全,通過 clientid 確保設(shè)備唯一性。
qos 消息質(zhì)量,分為 0,1,2 三個等級,分別表示只發(fā)一次,至少收到一次和只收到一次,通過 qos 可以根據(jù)數(shù)據(jù)的重要性靈活選擇發(fā)送方式以節(jié)省帶寬和保證數(shù)據(jù)可靠。例如不重要的數(shù)據(jù)采集可使用 qos0 只發(fā)一次不關(guān)心服務(wù)器是否收到,重要的消息通過 qos1 確保能收到,付款信息危險設(shè)備開關(guān)等場景使用 qos2 保證數(shù)據(jù)到達的同時且不重復(fù)。
host 主機,port 端口,mqtt 需要連接的服務(wù)器參數(shù)。host 可以說 ip 或者域名。
topic 主題,根據(jù)主題區(qū)別消息類型和來源,主要用來分類數(shù)據(jù)。同時 mqtt 是發(fā)布訂閱模型,topic 是發(fā)布和訂閱者通信的重要通道。
payload 消息內(nèi)容,發(fā)布和訂閱的具體數(shù)據(jù)。
retain 保留消息,保留消息是一條將保留標志(retained flag)置為 true 的普通 MQTT 消息。broker 會針對主題依照 QoS 級別保留最后一條保留消息,當訂閱者訂閱主題時會立即收到保留消息。broker 僅為每個主題保留一條保留消息。
二、本教程實現(xiàn)的功能概述
本文教你4G 模組使用 AT 命令連接 MQTT 服務(wù)器,實現(xiàn)模組和服務(wù)器之間數(shù)據(jù)的雙向傳輸!
本教程實現(xiàn)的功能定義是:
1、準備一個 MQTT 服務(wù)器;
2、4G 模組插卡開機后,連接上 MQTT 服務(wù)器,訂閱一個消息/mqtt/pub;
3、使用 MQTT 協(xié)議的 PC 工具(本篇演示時使用的是 mqttx),用工具連接 mqtt 服務(wù)器,同時訂閱消息/mqtt/sub;
4、4G 模組向工具訂閱的消息/mqtt/sub 發(fā)布消息 data from 4G module,工具可以接收到并顯示出來;
5、工具向 4G 模組訂閱的消息/mqtt/pub發(fā)布消息data from tcp server,模組可以接收到數(shù)據(jù)并通過串口輸出顯示
6、演示加密 mqtt 通信流程7、演示專網(wǎng)卡和設(shè)置 apn 等特殊情況連接 mqtt 服務(wù)器
三、準備硬件環(huán)境
在正式介紹本功能示例之前,需要先準備好以下硬件環(huán)境。
3.1 Air780E開發(fā)板
使用的開發(fā)板是 Air780E 核心板,
此核心板的詳細使用說明參考:
https://docs.openluat.com/air780e/product/
此核心板的詳細使用說明參考:Air780E 產(chǎn)品手冊公用產(chǎn)品資料 - 模組資料中心 (openluat.com)中的 << 開發(fā)板 Core_Air780E 使用說明 VX.X.X.pdf>>,寫這篇文章時最新版本的使用說明為:20240419155721583_開發(fā)板Core_Air780E使用說明V1.0.5.pdf (vue2.cn);核心板使用過程中遇到任何問題,可以直接參考這份使用說明 pdf 文檔。
3.2 SIM卡
準備一張可以上網(wǎng)的 SIM 卡,可以是物聯(lián)網(wǎng)卡,也可以是自己的手機卡;注意:SIM 卡不能欠費,可以正常上網(wǎng)?。?!
3.3 PC電腦
準備一臺電腦;注意:電腦有 USB 口,并且可以正常上網(wǎng)?。。?/p>
3.4 數(shù)據(jù)通信線
準備一根數(shù)據(jù)線,此數(shù)據(jù)線的作用是,連接 Air780E 開發(fā)板和 PC 電腦,通過 AT 命令完成業(yè)務(wù)邏輯的控制和交互;有兩種數(shù)據(jù)線可以使用,二選一即可;第一種數(shù)據(jù)線是 USB 數(shù)據(jù)線(連接 Air780E 開板的一段是 Type-C 接口),一般來說這種數(shù)據(jù)線如下圖所示:
普通的手機 USB 數(shù)據(jù)線一般都可以直接使用;第二種數(shù)據(jù)線是 USB 轉(zhuǎn) TTL 串口線,一般來說這種數(shù)據(jù)線如下圖所示:
在本教程中,使用的是第一種 USB 數(shù)據(jù)線。
3.5 組裝硬件環(huán)境
按照 SIM 卡槽上的插入方向,插入 SIM 卡,注意不要插反!如下圖所示,將 SIM 卡用力推入卡槽,聽到咔嚓聲音后即可。
USB 數(shù)據(jù)線,連接電腦和 Air780E 開發(fā)板,如下圖所示
:
四、準備軟件環(huán)境
在正式使用之前,需要安裝裝備好以下軟件。
4.1 Luatools 工具
要想燒錄 AT 固件到4G模組中,需要用到的調(diào)試工具:Luatools詳細使用說明參考:
Luatools 工具使用說明:
https://docs.openluat.com/Luatools/
4.2 AT 固件
4G 模組中必須燒錄正確的 AT 固件才能支持 AT 命令功能;通過 Luatools 可以燒錄 AT 固件;有兩種方式可以獲取到 Air780E 模組的最新 AT 固件,二選一即可。
第一種方式是通過 Luatools 獲?。?br /> 如下圖所示,可以直接選中最新版本的 AT 固件:
第二種方式是訪問:
Air780E 固件版本,找到最新版本的固件即可。
4.3 MQTT 測試服務(wù)器
為了方便測試,提供了免費的不可商用的 MQTT 測試服務(wù)器;
ssl 加密鏈接所需要的證書文件:mqttcerts.zip
4.4 PC 端串口工具
在量產(chǎn)的項目硬件設(shè)計中,一般都是由主控 MCU 通過 UART 給 4G 模組發(fā)送命令實現(xiàn)具體的業(yè)務(wù)邏輯;在本教程中,為了測試方便,沒有使用主控 MCU;而是使用了 PC 電腦上的一個串口工具 SSCOM 給 4G 模組發(fā)送命令來實現(xiàn)演示功能。
4.5 mqttx 工具下載
MQTTX 是一款功能強大的 MQTT 客戶端應(yīng)用,專為物聯(lián)網(wǎng) (IoT) 和消息傳遞設(shè)計。它提供了直觀的用戶界面,支持多種連接配置,方便用戶進行設(shè)備的快速連接、消息發(fā)布與訂閱,以及數(shù)據(jù)監(jiān)控與管理。安裝教程可參考這篇文章:MQTTX 下載使用詳解
五、MQTT 相關(guān)指令
復(fù)制鏈接查看4G模組MQTT指令:https://docs.openluat.com/air780e/at/app/at_command/#mqtt
六、使用方法舉例
6.1 確認開發(fā)板正常開機并聯(lián)網(wǎng)正常
本次教程所用固件版本是 v1169,通過 luatools 燒錄過固件后可以通過打印來判斷設(shè)備情況,具體參考下圖:
6.2 普通不帶證書使用流程舉例
下面演示及普通連接流程,并進行收發(fā)測試。查看流程時需要注意指令后面注釋的內(nèi)容,有助于理解指令具體作用
可以通過工具看到模組正常上報了數(shù)據(jù),服務(wù)器下發(fā)模組也能正常收到并通過串口打印出來:
6.3 SSL 帶證書單向認證流程舉例
MQTT 單向認證加密是指,在 MQTT 通信中僅服務(wù)端驗證客戶端身份,以此確保通信數(shù)據(jù)的安全傳輸。下面演示單向認證加密連接的流程,并進行收發(fā)測試本次測試需要準備好單向認證的加密證書,如果使用的是合宙測試服務(wù)器的話需要下載上面服務(wù)器信息除的加密證書文件。如圖所示:
工具選擇加密端口,同時配置 ca 證書文件,具體如圖所示:
單向認證測試流程如下:
模組與服務(wù)器交互過程通過工具監(jiān)控如圖:
6.4 SSL 帶證書雙向認證流程舉例
MQTT 協(xié)議雙向認證加密是指客戶端和服務(wù)器在通信時都使用數(shù)字證書進行身份驗證,并使用 TLS 協(xié)議對通信數(shù)據(jù)進行加密,確保數(shù)據(jù)的機密性和完整性。下面演示雙向認證加密連接的流程,并進行收發(fā)測試所需證書文件如圖所示:
工具配置加密證書如圖:
雙向認證測試流程:
交互日志如下:
七、APN 設(shè)置與專網(wǎng)卡
用戶根據(jù)自己使用的網(wǎng)絡(luò)類型來區(qū)分,sim 卡可以分為公網(wǎng)卡和專網(wǎng)卡兩種;對于如何判斷自己手里的 sim 卡是公網(wǎng)卡還是專網(wǎng)卡可以通過下面兩種辦法區(qū)分:
咨詢sim卡供應(yīng)商;
如果有apn賬號、或者有密碼、或者有加密類型,則可以認為是專網(wǎng)卡。
對于公網(wǎng)卡和專網(wǎng)卡設(shè)置和查詢有不同的指令,合宙 780E 4G 模組設(shè)置和查詢 APN 相關(guān)指令可以參考下圖:
APN 及專網(wǎng)卡常見問題1、模塊如何設(shè)置 APN
1)如果是公網(wǎng)SIM卡,不需要用戶主動設(shè)置APN,軟件自動去網(wǎng)絡(luò)端查詢APN進行設(shè)置。
2)如果是專網(wǎng)SIM卡,首先咨詢SIM卡提供商APN參數(shù),然后通過AT+CPNETAPN=mode,“apnname”,“user”,“pwd”,authmoded進行專網(wǎng)卡的參數(shù)設(shè)置。
2、專網(wǎng)卡連接服務(wù)器失敗
1)有的專網(wǎng)卡沒設(shè)置APN的情況下也能激活PDP,但是不能連專網(wǎng)卡指定的服務(wù)器,或者開機后模塊沒自動激活PDP,這個時候參考1,檢查APN參數(shù)是否設(shè)置正確。
2)如果有其他廠家的模塊,對比測試下是否連接正常。
3)如果無法百分百保證服務(wù)器配置沒問題,最好在服務(wù)器端用wireshark抓包,或者在服務(wù)器上安裝一個第三方工具,開啟一個服務(wù)器端口來對比測試。
4)用定向Ip的物聯(lián)網(wǎng)卡,需要把域名或IP加入白名單才能使用。
3、專網(wǎng)卡訪問白名單 用定向 IP 的物聯(lián)網(wǎng)卡,需要把域名或 IP 加入白名單才能使用,下面列出模塊會訪問的域名或 IP 服務(wù)器。
八、常見問題和注意事項
8.1 注意事項
1、發(fā)送 MIPSTART 命令后,收到 OK 僅僅表示 4G 模塊開始處理這條命令,并不表示 TCP 已經(jīng)連接成功;只有收到 CONNECT OK 才是成功的應(yīng)答;2、發(fā)送 MCONNECT 命令后,收到 OK 僅僅表示 4G 模塊開始處理這條命令,并不表示 MQTT 已經(jīng)連接成功;只有收到 CONNACK OK 才是成功的應(yīng)答;3、發(fā)送 MSUB 命令后,收到 OK 僅僅表示 4G 模塊開始處理這條命令,并不表示 MQTT 已經(jīng)訂閱成功;只有收到 SUBACK 才是成功的應(yīng)答;4、發(fā)送 MPUB 命令后,如果 QOS 不是 0,則收到 OK 僅僅表示 4G 模塊開始處理這條命令,并不表示 MQTT 已經(jīng)發(fā)布成功;只有收到 PUBACK(QOS 為 1 時)或者 PUBCOMP(QOS 為 2 時)才是成功的應(yīng)答;
8.2 常見問題
1、780E 支持的 MQTT 版本
MQTT3.1.1
2、連接服務(wù)器失敗
1、檢查下模塊信號、網(wǎng)絡(luò)注冊、網(wǎng)絡(luò)附著、PDP激活狀態(tài)。
2、檢查下SIM卡是否欠費【4G模塊有一種欠費表現(xiàn):無法注冊4G網(wǎng)絡(luò),可以注冊2G網(wǎng)絡(luò)】。
3、使用mqtt.fx,連接服務(wù)器確認一下是否可以連接成功,排除服務(wù)器故障。
4、部分國外的開源項目提供免費的MQTT代理服務(wù)器,因為網(wǎng)絡(luò)的原因,國內(nèi)存在嚴重的延遲或者丟包現(xiàn)象,導(dǎo)致程序運行出現(xiàn)問題。
5、確認是不是域名解析失敗導(dǎo)致,可以通過AT+CDNSGIP=確認一下域名是否能正常解析(注意:該命令只有在執(zhí)行完at+cstt、at+ciicr、at+cifsr后才能正常工作),不能正常解析,可以通過AT+CDNSCFG=ip1,ip2設(shè)置域名解析服務(wù)器。
6、在 MIPSTART /SSLMIPSTART返 回 CONNECT OK后 才 能 發(fā) MCONNECT命令,而且要立即發(fā),否則會被服務(wù)器踢掉。
3、頻繁掉線是什么原因
1、檢查下是否存在代碼邏輯錯誤,導(dǎo)致異常。
2、檢查下是否不斷重啟,導(dǎo)致異常。
3、檢查下服務(wù)器網(wǎng)絡(luò)是否穩(wěn)定,不要用內(nèi)網(wǎng)穿透方式搭建服務(wù)器。
4、檢查下使用環(huán)境是否網(wǎng)絡(luò)覆蓋不好,例如車庫、地下、電梯、山區(qū)等。
5、檢查下模塊信號、網(wǎng)絡(luò)注冊、網(wǎng)絡(luò)附著、PDP激活狀態(tài)。
6、排查是否為設(shè)備天線問題:發(fā)出來設(shè)備的天線調(diào)試指標參數(shù)給合宙技術(shù)支持人員;曾經(jīng)有一個客戶天線指標明顯有問題,導(dǎo)致10幾個小時出現(xiàn)30次左右掉線;后來重新調(diào)試天線之后,40個小時出現(xiàn)幾次掉線。7、如果經(jīng)常出現(xiàn)連接被動斷開:
1) 檢查下mqtt keep alive的時間,一般建議使用2分鐘【如果每2分鐘內(nèi)都有應(yīng)用數(shù)據(jù)收發(fā),則可以把mqtt keep alive的時間設(shè)置的長一點兒】,除非有強制要求,否則不能太長,也不能太短。不建議超過4分鐘,基站策略會關(guān)閉長時間沒有數(shù)據(jù)傳輸?shù)倪B接,太長時間可能會導(dǎo)致連接被基站關(guān)閉;不建議少于1分鐘,太短時間可能會因為網(wǎng)絡(luò)環(huán)境波動導(dǎo)致上行數(shù)據(jù)發(fā)送超時,可能超過1.5倍的心跳時間,從而被服務(wù)器主動斷開連接。
2) 檢查下是否在1.5倍的mqtt keep alive的時間,沒有成功發(fā)送數(shù)據(jù)到服務(wù)器,就會被被服務(wù)器主動斷開,這種情況一般都是發(fā)送數(shù)據(jù)超時引起的。
8、如果要降低掉線率,可通過如下方式設(shè)置【注意:在網(wǎng)絡(luò)環(huán)境不變的情況下,降低掉線率意味著會增加響應(yīng)延時】A. mqtt keep alive的時間,一般建議使用2分鐘【如果每2分鐘內(nèi)都有應(yīng)用數(shù)據(jù)收發(fā),則可以把mqtt keep alive的時間設(shè)置的長一點兒】,除非有強制要求,否則不能太長,也不能太短。不建議超過4分鐘,基站策略會關(guān)閉長時間沒有數(shù)據(jù)傳輸?shù)倪B接,太長時間可能會導(dǎo)致連接被基站關(guān)閉;不建議少于1分鐘,太短時間可能會因為網(wǎng)絡(luò)環(huán)境波動導(dǎo)致上行數(shù)據(jù)發(fā)送超時,可能超過1.5倍的心跳時間,從而被服務(wù)器主動斷開連接。
B. 減少Q(mào)os1和Qos2的publish使用,允許的話建議都使用Qos0。
4、有沒有認證機制
有,每個設(shè)備有clientid、username、password。
5、client id 是否允許重復(fù)
不允許重復(fù),重復(fù)的話,服務(wù)器會踢掉上一個相同id的設(shè)備。
6、Qos0、1、2 如何選擇
應(yīng)用允許的情況下,建議使用Qos0,Qos1和Qos2會加重網(wǎng)絡(luò)負擔,在網(wǎng)絡(luò)擁堵和較差的情況下,數(shù)據(jù)傳輸?shù)拇螖?shù)越多,掉線的概率就會越高。
7、是否支持 ssl
支持證書配置,支持單向認證和雙向認證
支持如下六種加密套件:
0X0035 TLS_RSA_WITH_AES_256_CBC_SHA
0X002F TLS_RSA_WITH_AES_128_CBC_SHA
0X0005 TLS_RSA_WITH_RC4_128_SHA
0X0004 TLS_RSA_WITH_RC4_128_MD5
0X000A TLS_RSA_WITH_3DES_EDE_CBC_SHA
0X003D TLS_RSA_WITH_AES_256_CBC_SHA256
8、MQTT SSL 如何使用
參考上面流程或者翻閱AT手冊,如果SSL的參數(shù)配置不變,則每次開機運行過程中,僅設(shè)置一次即可
9、為什么 mqtt ssl 訪問失敗
1、檢查服務(wù)器是否支持模塊支持的加密套件。
2、發(fā)日志文件給合宙技術(shù)支持人員分析。
10、MQTT 支持多連接嗎
目前MQTT僅支持單連接,不支持多連接。
11、MQTT 的遺囑如何使用
通過AT+MCONFIG命令可以設(shè)置遺囑的qos、retain標志、topic、payload;在如下幾種(包含但是又不僅限于如下情況)情況下,服務(wù)器會主動發(fā)布遺囑消息到訂閱的客戶端:1、模塊和服務(wù)器通信異常(例如模塊突然關(guān)機、模塊進入了一個沒有網(wǎng)絡(luò)信號的環(huán)境等)超過1.5倍(一般是1.5倍,但不排除服務(wù)器可以修改這個時間)的 keep alive時間(可以通過AT+MCONNECT設(shè)置keep alive時間)。2、模塊主動執(zhí)行AT+MDISCONNECT或者AT+MIPCLOSE。
12、MPUB 命令中,payload 包含"如何發(fā)送?
1、消息中內(nèi)嵌的雙引號請用22 表達;控制字符回車r(0x0D) 請用D 表達;;控制字符換行n(0x0A )請用A 表達 ;控制字符反斜杠 (0x5C ) 請用5C表達。2、如果是 MCU 發(fā)消息,可能需要用\22 ,\0D ,\0A ,\5C 來表達,即 需要轉(zhuǎn)義成\ 。
13、重試多次 PDP,MQTT 應(yīng)用一直連接失敗
如果重試多次PDP激活,PDP一直激活失敗,或者MQTT一直連接失敗,則嘗試使用如下手段恢復(fù):1、使用RESET引腳復(fù)位模塊。2、極端情況下,直接給模塊斷電,再上電,POWER KEY引腳拉低開機。
14、數(shù)據(jù)接收緩存問題
可通過AT+MQTTMSGSET命令設(shè)置是否緩存,詳情參考AT手冊。1、不緩存:通過AT+MQTTMSGSET=0設(shè)置;收到訂閱的publish報文后,立即通過AT口輸出主題、payload長度、payload內(nèi)容,每個報文中支持的payload內(nèi)容最長1360字節(jié)。2、內(nèi)存緩存:通過AT+MQTTMSGSET=1設(shè)置;內(nèi)存中有一個緩存表,最多支持緩存4條publish報文;收到訂閱的publish報文后,插入緩沖表中的空閑位置,然后通過AT口輸出存儲位置;緩存表滿之后,新收到的publish報文會覆蓋最舊的publish報文。
注意:緩存表位于內(nèi)存中,斷電或者重啟后,緩存表中的數(shù)據(jù)會被清空;建議收到數(shù)據(jù)時,通過AT+MQTTMSGGET及時讀取出來,以防緩沖區(qū)滿覆蓋丟失數(shù)據(jù)。
15、數(shù)據(jù)發(fā)送問題
AT+MPUB最大publish 2384字節(jié),AT+MPUBEX長度取值范圍1-4100。
審核編輯 黃宇
-
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2902文章
44131瀏覽量
370473 -
AT
+關(guān)注
關(guān)注
2文章
192瀏覽量
65135 -
MQTT協(xié)議
+關(guān)注
關(guān)注
0文章
97瀏覽量
5339
發(fā)布評論請先 登錄
相關(guān)推薦
評論