mqtt中clientid怎么查_Air系列4G模块AT版本MQTT应用说明

c98148b34839996311bb8eac7b1c0526.png

前两篇为大家讲解了Air系列4G模块AT版本的PDP使用汇总及HTTP应用,今天接下来讲解的是MQTT应用,文末依然为大家准备了惊喜福利!

1

MQTT应用概述

4G模块支持MQTT和MQTT SSl协议,  MQTT应用的基本流程如下:

1、激活PDP(参考:Air系列4G模块AT版本PDP使用汇总)

2、如果要支持SSL,配置SSL参数

3、通过TCP连接到MQTT服务器

4、发送MQTT CONNECT到服务器,打开会话连接

5、订阅或者发布消息

6、出现异常后:关闭TCP连接,有选择性的去激活PDP;然后再有选择性的激活PDP,从第2步开始执行。

2

应用流程和异常处理

本章节分四部分来介绍MQTT应用的基本流程和异常处理。

2.1、连接、订阅、发布

先来看个正常情况下的AT命令序列,如果不理解AT命令含义,请自行参考AT手册。

AT+CPIN?

+CPIN: READY    //查询sim卡是否正常

OK

AT+CGATT?

+CGATT: 1        //查询是否附着上数据网络,如果返回+CGATT: 0表示未附着上

OK

AT+SAPBR=3,1,"CONTYPE","GPRS"

OK

AT+SAPBR=3,1,"APN",""    //设置APN,此处""表示使用从网络端自动获取到的APN

OK

AT+SAPBR=1,1             //发起激活PDP的请求

OK

AT+SAPBR=2,1             //注意:此命令仅仅查询PDP地址,可以不执行

+SAPBR: 1,1,"10.159.1.145"    //请求到的PDP地址

OK

AT+MCONFIG="866289037465624","user","password"

OK

AT+MIPSTART="lbsmqtt.airm2m.com","1884"

OK

CONNECT OK

AT+MCONNECT=1,60

OK

CONNACK OK

AT+MSUB="mqtt/sub_topic",0

OK

SUBACK

AT+MPUB="mqtt/pub_topic",0,0,"publish 0 payload"

OK

AT+MPUB="mqtt/pub_topic",1,0,"publish 1 payload"

OK

PUBACK

AT+MPUB="mqtt/pub_topic",2,0,"publish 2 payload"

OK

PUBREC

PUBCOMP

正常功能以及异常处理的流程图如下(请点击放大查看):

ca98221774448121106c6dd64ce205aa.png

在这个过程中,注意事项如下:

1)发送MIPSTART命令后,收到OK仅仅表示4G模块开始处理这条命令,并不表示TCP已经连接成功;只有收到CONNECT OK才是成功的应答(其余错误应答,参考AT手册)

2)发送MCONNECT命令后,收到OK仅仅表示4G模块开始处理这条命令,并不表示MQTT已经连接成功;只有收到CONNACK OK才是成功的应答(其余错误应答,参考AT手册)

3)发送MSUB命令后,收到OK仅仅表示4G模块开始处理这条命令,并不表示MQTT已经订阅成功;只有收到SUBACK才是成功的应答(其余错误应答,参考AT手册)

4)发送MPUB命令后,如果QOS不是0,则收到OK仅仅表示4G模块开始处理这条命令,并不表示MQTT已经发布成功;只有收到PUBACK(QOS为1时)或者PUBCOMP(QOS为2时)才是成功的应答(其余错误应答,参考AT手册)

2.2、接收

先来看下接收到订阅消息时的AT命令处理序列,如果不理解AT命令含义,请自行参考AT手册。

......           //此处省略了PDP激活的过程,参考2.1章节

AT+MCONFIG="866289037465624","user","password"

OK

AT+MIPSTART="lbsmqtt.airm2m.com","1884"

OK

CONNECT OK

AT+MCONNECT=1,60

OK

CONNACK OK

AT+MSUB="mqtt/sub_topic",0

OK

SUBACK

//在mqtt/sub_topic上收到订阅消息,payload为123456

//默认是直接输出收到的订阅消息,不做缓存

+MSUB: "mqtt/sub_topic",6 byte,123456

//设置订阅消息的处理模式,设置为缓存模式

//接下来收到订阅消息时,会提示订阅消息的缓存位置

AT+MQTTMSGSET=1

OK

//在mqtt/sub_topic上收到一条订阅消息,缓存到位置0

+MSUB: 0

//主动读取缓存的所有订阅消息

AT+MQTTMSGGET

+MSUB:mqtt/sub_topic,6 byte,123456

OK

//在mqtt/sub_topic上收到一条订阅消息,缓存到位置0

+MSUB: 0

//在mqtt/sub_topic上收到一条订阅消息,缓存到位置1

+MSUB: 1

//主动读取缓存的所有订阅消息

AT+MQTTMSGGET

+MSUB:mqtt/sub_topic,6 byte,123456

+MSUB:mqtt/sub_topic,6 byte,123456

OK

注意事项如下:

1)红色和蓝色两部分演示了处理订阅消息的两种方式,用户根据产品需要自行决定使用何种方式;

2)使用蓝色的缓存方式处理订阅消息时,需要注意最多支持4条缓存,为了防止消息覆盖导致的丢失,收到订阅消息时,应及时主动读取处理。

2.3、TCP被动断开

先来看下连接被动断开时的AT命令处理序列,如果不理解AT命令含义,请自行参考AT手册。

......           //此处省略了PDP激活的过程,参考2.1章节

AT+MCONFIG="866289037465624","user","password"

OK

AT+MIPSTART="lbsmqtt.airm2m.com","1884"

OK

CONNECT OK

AT+MCONNECT=1,60

OK

CONNACK OK

CLOSED               //此处TCP连接被动断开

AT+MIPCLOSE

+CME ERROR: 767     //此处无论返回OK、ERROR还是CME ERROR,都直接跳过,不用做正确性判断

AT+MCONFIG="866289037465624","user","password"

OK

AT+MIPSTART="lbsmqtt.airm2m.com","1884"

OK

CONNECT OK

AT+MCONNECT=1,60

OK

CONNACK OK

参考2.1章节流程图,左下角的“收到CLOSED错误提示,表示MQTT的TCP连接被动断开”为异常处理的触发点。

2.4、PDP被动去激活

先来看下PDP被动去激活时的AT命令处理序列,如果不理解AT命令含义,请自行参考AT手册。

......           //此处省略了PDP激活的过程,参考2.1章节

AT+MCONFIG="866289037465624","user","password"

OK

AT+MIPSTART="lbsmqtt.airm2m.com","1884"

OK

CONNECT OK

AT+MCONNECT=1,60

OK

CONNACK OK

+SAPBR 1: DEACT       //此处PDP被动去激活

AT+MIPCLOSE

OK                     //此处无论返回OK、ERROR还是CME ERROR,都直接跳过,不用做正确性判断

AT+SAPBR=0,1

+CME ERROR: 3         //此处无论返回OK、ERROR还是CME ERROR,都直接跳过,不用做正确性判断

......                //此处省略了PDP激活的过程,参考2.1章节

AT+MCONFIG="866289037465624","user","password"

OK

AT+MIPSTART="lbsmqtt.airm2m.com","1884"

OK

CONNECT OK

AT+MCONNECT=1,60

OK

CONNACK OK

参考2.1章节流程图,右下角的“收到+SAPBR 1: DEACT错误提示,表示PDP被动去激活”为异常处理的触发点。

3

MQTT应用常见问题

3.1、MQTT支持多连接吗

目前MQTT仅支持单连接,不支持多连接。

3.2、MQTT的遗嘱如何使用

通过AT+MCONFIG命令可以设置遗嘱的qos、retain标志、topic、payload;在如下几种(包含但是又不仅限于如下情况)情况下,服务器会主动发布遗嘱消息到订阅的客户端:

1)模块和服务器通信异常(例如模块突然关机、模块进入了一个没有网络信号的环境等)超过1.5倍(一般是1.5倍,但不排除服务器可以修改这个时间)的 keep alive时间(可以通过AT+MCONNECT设置keep alive时间)

2)模块主动执行AT+MDISCONNECT或者AT+MIPCLOSE

曾经有用户碰到过如下问题:

7c2b4464ff6fcd6e69527201089aa640.gif

模块设置了遗嘱topic为/will_topic,遗嘱payload为offline,keep alive时间为5分钟,模块关机后,等待2分钟,在等待的2分钟内,其他订阅了/will_topic的客户端没有收到遗嘱消息(这是正常的,因为还没有到达1.5倍的keep alive时间),2分钟后,模块开机mqtt重连成功后,其他客户端却收到了遗嘱消息,这是什么原因呢?

这部分机制是服务器端设计的,和模块无关,个人认为:服务器端仍然在维持2分钟前的那个mqtt连接,现在模块开机,用同样的client id重连后,会断开之前维护的相同client id的mqtt连接,断开时,就发布了一次遗嘱消息。

那这种问题,如何解决呢?模块可以在AT+MCONNECT返回CONNACK OK之后,通过AT+MPUB一个topic为/will_topic,payload为online的消息,这样订阅了遗嘱topic的其他客户端就会收到这个online消息。

3.3、MQTT SSL如何使用

本文主要描述了基本流程和异常处理,对于MQTT SSL使用方法没有做过多描述,这一部分,请自行参考AT手册MQTT章节下《使用方法举例》中的"SSL带证书验证流程"使用方法;支持的SSL参数,请自行参考AT+SSLCFG命令说明。

如果SSL的参数配置不变,则每次开机运行过程中,仅设置一次即可。

3.4、重试多次PDP,MQTT应用一直连接失败

如果重试多次PDP激活,PDP一直激活失败,或者MQTT一直连接失败,则尝试使用如下手段恢复:

1)使用RESET引脚复位模块;

2)极端情况下,直接给模块断电,再上电,POWER KEY引脚拉低开机。

为感谢大家的关注,合宙IoT商城特别推出团购专区及限量特价活动,快来领取专属福利吧!!!

cd5c0846fcbaae935b26baf0860a718b.gif ecb8a5aa83c314f234ca982d0e92a30f.png 更多福利,敬请期待

dc9e9364d645465ac6c9ec079b700e04.gif

Luat相关教程文章:

Luat系列官方教程1:下载调试工具LuaTools的使用指南

Luat系列官方教程2:控制LED小灯

Luat系列官方教程3:Luat程序的基本时序

Luat小企业系列原创文章:

小企业怎么寻找生意的蓝海?

小企业2B新产品怎样定价?

小企业的2B业务怎么获客(一)?

合宙Luat将陆续推出小企业系列原创作品,敬请关注!

113a3e1a3b489ffb336bfc3f20cfe4f9.png

b0c03af32e5815aecdc26b6035fd4338.png

 ▼ Luat热文推荐 ▼

>小企业怎么寻找生意的蓝海?

>NB-IoT,未来的物联网脊梁,还是扶不起的阿斗?

>2019年最值得工作和落户的几个城市,有你的家乡吗?

>为什么说『 物联网通信模块业务』没有前途?

>4G模块价格进入2位数时代,合宙Air720模块正式量产发货

>NB向左,GPRS向右,谁会率先突破百亿连接数?

>GPRS模块为什么会低至十几元?我所经历的物联网模块国产化过程

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值