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