本文全部使用的是AT指令,測試的時候使用串口助手測試,其實整個MQTT通信流程跟串口通信流程大體相似的。
參考的官方文檔是:A76XX Series_AT_Command_Manual_V1.06、A76XX Series_MQTT(S)_Application Note_V1.02。
MCU 編程完整AT指令方法:以“AT” 為例,在寫入“AT” 后,緊跟“\r” 才是一條完整的指令。
參考文章:https://www.shangmayuan.com/a/c0beaeff30e9453dac8168af.html。
測試的時候使用串口助手測試,串口助手發送AT指令時需要勾選發送新行,串口助手操作圖如下。
0、MQTT前期准備(類似串口的配置串口操作)
/*------------------MQTT前期准備---------------------*/ AT #握手測試 AT+CPIN? #查詢SIM卡是否插入 AT+CSQ #查詢信號質量 AT+CREG? #網絡注冊 AT+CGREG?/AT+CEREG? #查詢網絡注冊狀態 AT+CPSI? #查詢模塊終端信息 /****在WCDMA/GSW中,需要繼續執行以下指令*****/ AT+CGDCONT=cid,"ip","APN" #指定PDP上下文的參數值 AT+CGACT=1,cid #激活指定的PDP文本 AT+CGACT? #查詢PDP上下文的IP地址 /*******************************************************/
1、建立MQTT鏈接(類似串口的打開串口操作)
/*-------------------建立MQTT鏈接---------------------*/ AT+CMQTTSTART #開始鏈接MQTT AT+CMQTTACCQ=0,"client test0" #用於獲取MQTT客戶機,設置自己id為client test0 AT+CMQTTCONNECT=0,"tcp://broker.hivemq.com:1883",60,1 #連接到測試服務器,自己要測試的話可以網上查一些免費MQTT服務器測試,這里注意必須以”tcp://“開頭,然后再接你的測試服務器,默認1883端口,端口也可以根據需求修改
2、MQTT發送數據(類似串口的發送數據操作)
/*----------------------MQTT發送----------------------*/ AT+CMQTTTOPIC=0,5 #設置發布主題,第1個參數是客戶機數字參數0/1,第2個參數是主題數據長度 /****************************************************** 輸入該指令后輸入對應長度的主題名,正確會回復OK ******************************************************/ AT+CMQTTPAYLOAD=0,60 #設置消息內容,參數和AT+CMQTTTOPIC的類似后面直接發送字符,長度要對應 /**************************************************** 輸入該指令后輸入對應長度的內容,正確會回復OK ****************************************************/ AT+CMQTTPUB=0,1,60 #發布消息,參數1是客戶機參數,參數2是信息發布次數設置,參數3是發布超時時間間隔S /*注意:模塊每次發送數據都要執行這3步,才能向MQTT服務器發送數據*/
3、MQTT接收數據(類似串口的接收數據操作)
/*----------------------MQTT接收----------------------*/ AT+CMQTTSUBTOPIC=0,5,1 #為要接收的消息設置一個數據長度為5的主題 /****************************************************** 輸入該指令后輸入對應長度的主題名,正確會回復OK ******************************************************/ AT+CMQTTSUB=0 #訂閱設置好的主題的消息 /*執行了這兩步后,只要是這個主題的消息,模塊都可以直接接收,而不需要每次接收都執行該指令,如果要接收其他主題的信息則要重新執行該部分指令*/
4、MQTT關閉(類似關閉串口操作)
/*----------------------MQTT關閉----------------------*/ AT+CMQTTUNSUB=0,5,0 #從MQTT服務器取消訂閱一個主題,MQTT收發都要有主題的,取消后該主題的信息就不能收發了 /****************************************************** 輸入該指令后輸入對應長度的主題名,正確會回復OK ******************************************************/ AT+CMQTTDISC=0,120 #從MQTT服務端斷開鏈接,參數1是客戶機參數,參數2是超時值 AT+CMQTTREL=0 #釋放客戶端0 AT+CMQTTSTOP #停止MQTT服務 /*注意:要先斷開MQTT服務端,釋放客戶端后才能正確停止MQTT服務*/
注意:這里所有的AT指令都沒有做具體說明,需要查看具體AT指令參數說明,可以登錄SIMCOM官網下載AT指令文檔查看,官網地址:www.simcom.com,這里說的AT指令是A76XX系列的操作,注意不要搞錯,上面的操作部分我已經分開記錄大家可以靈活結合使用。
5、附上官網的一個MQTT鏈接應用流程圖
補充:
測試的時候還要結合一個MQTT測試工具,MQTT測試工具的操作使用以及下載,可以參考我另外的博客:https://www.cnblogs.com/xingboy/p/16071606.html