1. 程式人生 > >物聯網-移遠M26模組MQTT開發(AT命令)

物聯網-移遠M26模組MQTT開發(AT命令)

MQTT(Message Queuing Telemetry Transport,訊息佇列遙測傳輸)是IBM開發的一個即時通訊協議,有可能成為物聯網的重要組成部分。該協議支援所有平臺,幾乎可以把所有聯網物品和外部連線起來,被用來當做感測器和制動器(比如通過Twitter讓房屋聯網)的通訊協議。

MQTT協議是為大量計算能力有限,且工作在低頻寬、不可靠的網路的遠端感測器和控制裝置通訊而設計的協議,它具有以下主要的幾項特性:

1、使用釋出/訂閱訊息模式,提供一對多的訊息釋出,解除應用程式耦合;

2、對負載內容遮蔽的訊息傳輸;

3、使用 TCP/IP 提供網路連線;

4、有三種訊息釋出服務質量:

  • “至多一次”,訊息釋出完全依賴底層 TCP/IP 網路。會發生訊息丟失或重複。這一級別可用於如下情況,環境感測器資料,丟失一次讀記錄無所謂,因為不久後還會有第二次傳送。
  • “至少一次”,確保訊息到達,但訊息重複可能會發生。
  • “只有一次”,確保訊息到達一次。這一級別可用於如下情況,在計費系統中,訊息重複或丟失會導致不正確的結果。

5、小型傳輸,開銷很小(固定長度的頭部是 2 位元組),協議交換最小化,以降低網路流量;

6、使用 Last Will 和 Testament 特性通知有關各方客戶端異常中斷的機制。

MQTT協議詳情參考:MQTT協議說明

既然MQTT在物聯網行業應用的這麼普遍,而且又有如上的優勢,那我就簡單講一下移遠M26模組如何通過AT命令實現MQTT功能的。

移遠M26模組通過AT指令開發MQTT功能主要步驟如下:

1.確保SIM卡的PIN碼已經解開,可以通過AT+CPIN?查詢一下,如果返回如下,說明SIM卡的PIN碼已經解開,不再需要提供密碼。

其他錯誤返回資訊如下:

SIM PIN ME 等待提供 SIM 卡的 PIN 碼
SIM PUK ME 等待提供 SIM 卡的 PUK 碼
PH_SIM PIN ME 等待提供從終端到最初 SIM 卡的密碼(防盜)

 

PH_SIM PUK

SIM PIN2

SIM PUK2

 

ME 等待提供從終端到最初 SIM 卡的 PUK 密碼

ME 等待提供 SIM 卡 PIN2(例如:當編輯 FDN 號碼薄,可能返回+CME ERROR: 17)

ME 等待提供 SIM 卡的 PUK2(在執行該命令過程中可能返回+CMEERROR: 18)

如果返回如上的其他資訊,可以通過如下方法設定:

返回:SIM PIN   通過串列埠傳送如下指令

AT+CPIN?
+CPIN: SIM PIN

OK //查詢有 PIN 碼鎖定
AT+CPIN=1234
+CPIN: READY

OK //輸入 PIN 碼
AT+CPIN?
+CPIN: READY

OK //PIN 碼鎖被解除

返回:SIM PUK   通過串列埠傳送如下指令

AT+CPIN?
+CPIN: SIM PUK

OK //查詢有 PUK 碼鎖定
AT+CPIN="26601934","1234"
+CPIN: READY

OK //輸入 PUK 碼和新 PIN 碼
AT+CPIN?

+CPIN: READY
OK //PUK 鎖被解除

2.   確認模組找網成功,通過傳送命令AT+CREG?查詢,返回如下表示成功:

如果沒有成功,可以繼續傳送命令AT+CREG?,也可以傳送AT+CREG=1,等待網路狀態變換時的自動上報。必須確保找網成功才能進行下一步操作。

3.確保M26模組GPRS附著成功,可以通過命令AT+CGATT?查詢,返回如下表示附著成功

如果成功,可以通過命令AT+CGATT=1來附著,效果如下:

AT+CGATT=1 //GPRS 附著
OK

AT+CGATT? //查詢 GPRS 附著狀態
+CGATT: 0

OK

4.配置前景場景,建議設定為0 ,配置命令AT+QIFGCNT=0,返回OK表示配置成功,以後所有的操作都是針對場景0進行操作。

5.設定GPRS連線模式,設定命令AT+QICSGP=1,"CMNET",返回OK表示設定成功。中國移動或者中國聯通卡通過GPRS連線TCP的這條命令可以省略,但是不建議省略。

此時,MQTT的網路環境基本建立完成了,整個配置返回資訊如下:

下面就是MQTT相關功能的配置了,接著上面的繼續講解。

6.為MQTT客戶端開啟一個網路,命令:AT+QMTOPEN=0, "47.93.196.203",1883,返回如下表示開啟成功:

如果返回的是其他的資料,如下:

表示出錯了或者已經存在開啟的MQTT網路,可以通過命令AT+QMTCLOSE=0關閉當前的連線,重新使用命令AT+QMTOPEN=0, "47.93.196.203",1883開啟網路,開啟後要儘快連線MQTT伺服器,否則會自動關閉網路,返回如下:

7.連線MQTT伺服器,命令AT+QMTCONN=0,"clientExample","wqy","1655123123",返回如下表示連線成功

8.訂閱主題,命令AT+QMTSUB=0,1,"Mqtt_test1",2,返回如下表示訂閱成功

到這裡,M26模組連線MQTT伺服器已經好了,可以使用MQTT客服端軟體釋出Mqtt_test1主題資訊,測試一下效果,客服端軟體設定如下:

客服端除錯軟體訂閱主題為Mqtt_test2,釋出的主題Mqtt_test1,即為M26模組訂閱的主題,等級為QoS2,僅一次,保證成功。點選send按鈕,M26模組就回接收到除錯軟體傳送的訊息,如下:

模組可以訂閱主題,當然也可以釋出主題,我們試一下模組釋出主題Mqtt_test2試一下效果,如下:

需要釋出的資訊輸在>號後面,如下:

然後按下ctrl+z鍵,模組就會將資料發出去,MQTT客服端除錯軟體就會收到模組傳送的資料,如下:

模組返回如下資訊表示傳送完成

到此,M26模組通過AT指令實現MQTT功能也就完成了,下面貼上配置成功的命令及返回資訊,如下圖:

當然,模組也可以釋出其他ID和等級的主題,讀者自行測試。釋出其他等級時ID不能設定為0

M26 MQTT開發參考手冊:

Quectel_GSM_MQTT_Application_Note_V1.2(C)

移遠GSM模組TCP開發應用指導手冊