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