物联网-移远M26模块MQTT开发(AT命令)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014754841/article/details/84573178

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开发应用指导手册

猜你喜欢

转载自blog.csdn.net/u014754841/article/details/84573178