0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MQTT应用看这篇!Air780EP低功耗4G模组AT开发示例

合宙LuatOS 来源:合宙LuatOS 作者:合宙LuatOS 2024-10-08 10:05 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Air780EP是合宙的[低功耗4G模组]之一,支持全系列的AT指令以及LuatOS脚本二次开发。

本文应各位大佬邀请,详细讲解了Air780EP模组MQTT应用的多个AT命令示例。

一、**准备工作 **

图片

1.1 硬件准备

1.2 软件准备

  • 串口调试工具
    如果没有准备,推荐使用LLCOM:
  • AT固件下载

进入AT固件页面按下Ctrl+F,搜索AirM2M_780EP_LTE_AT,即可找到Air780EP模块所使用的AT固件。

本文示例为:

AirM2M_780EP_V1007_LTE_AT版本固件

推荐选用:相关型号固件名称后面数字版本号最高的最新relase版本进行调试。

**二、MQTT应用流程 **

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

  1. 如果要支持SSL,配置SSL参数
  2. 通过TCP连接到MQTT服务器
  3. 发送MQTT CONNECT到服务器,打开会话连接
  4. 订阅或者发布消息

三、MQTT发布消息

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

AT指令手册下载链接:

https://doc.openluat.com/article/4985

AT+CPIN?

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

OK

AT+CGATT?

+CGATT: 1

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

OK

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

OK

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

OK

CONNECT OK

AT+MCONNECT=1,60

OK

CONNACK OKAT+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

发布消息示例演示效果:

图片

图片

相关注意事项:

01. 发送MIPSTART命令

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

02. 发送MCONNECT命令

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

03. 发送MSUB命令

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

04. 发送MPUB命令

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

四、MQTT接收消息

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

AT指令手册下载链接:

https://doc.openluat.com/article/4985

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/sub_topic",0,0,"123456"

//在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

接收消息演示效果:

图片

图片

五、MQTT TCP被动断开

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

AT指令手册下载链接:

https://doc.openluat.com/article/4985

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还是CMEERROR,都直接跳过,不用做正确性判断

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

OK

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

OK

CONNECT OK

AT+MCONNECT=1,60

OK

CONNACK OK

六、MQTT PDP被动去激活

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

AT指令手册下载链接:

https://doc.openluat.com/article/4985

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

OK

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

OK

CONNECT OK

AT+MCONNECT=1,60

OK

CONNACK OK

+CGEV: NW PDN DEACT 1

//此处PDP被动去激活

AT+MIPCLOSE

OK

//此处无论返回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

七、SSL带证书验证流程【单向认证

先来看下SSL带证书验证(单向认证)时的AT命令处理序列,如果不理解AT命令含义,请自行参考AT手册。

AT指令手册下载链接:

https://doc.openluat.com/article/4985

AT+CGATT?

+CGATT: 1

OK

AT+FSCREATE="ca.crt"//创建CA证书文件

OK

AT+FSWRITE="ca.crt",0,1212,15

//1212是证书文件长度,15为超时时间,这里是举例说明,请填入实际数据,不要照抄 >

//此处填写证书数据

OK

AT+SSLCFG="cacert",88,"ca.crt"

//设置CA证书文件为ca.crt

OK

AT+SSLCFG="seclevel",88,1

//1表示设置认证模式为只对服务器认证

OK

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

//这三个参数可以不加双引号,第一个参数需要开发者自己设置

//后两个参数可以不填,格式为:

AT+MCONFIG="868488076506128","",""

OK

AT+SSLMIPSTART="airtest.openluat.com",8883

//开发者请修改为自己的服务器地址和端口

OK

CONNECT OK

AT+MCONNECT=1,60

//在MIPSTART返回CONNECT OK后才能发MCONNECT命令

//而且要立即发,否则会被服务器踢掉

OK

CONNACK OK

--后面发布和接收与前面一样,直接参考

** 八、SSL带证书验证流程【双向认证】**

先来看下SSL带证书验证(双向认证)时的AT命令处理序列,如果不理解AT命令含义,请自行参考AT手册。

AT指令手册下载链接:

https://doc.openluat.com/article/4985

AT+CGATT?

+CGATT: 1

OK

AT+FSCREATE="ca.crt" //创建CA证书文件

OK

AT+FSWRITE="ca.crt",0,1212,15

//1212是证书文件长度,15为超时时间,这里是举例说明,请填入实际数据,不要照抄 >

//此处填写证书数据

OK

AT+FSCREATE="client.crt"

//创建客户端证书文件

OK

AT+FSWRITE="client.crt",0,1127,15 >

//此处填写证书数据

OK

AT+FSCREATE="client.key"

//创建客户端key文件

OK

AT+FSWRITE="client.key",0,1679,15 >

//此处填写证书数据

OK

AT+SSLCFG="cacert",88,"ca.crt"

//设置CA证书文件为ca.crt

OK

AT+SSLCFG="clientcert",88,"client.crt"

//设置客户端证书文件为client.crt

OK

AT+SSLCFG="clientkey",88,"client.key"

//设置客户端密钥文件为client.key

OK

AT+SSLCFG="seclevel",88,2

//设置认证模式为双向认证

OK

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

//这三个参数可以不加双引号,第一个参数需要开发者自己设置

//后两个参数可以不填,格式为:

AT+MCONFIG="868488076506128","",""

OK

AT+SSLMIPSTART="airtest.openluat.com",8883

//开发者请修改为自己的服务器地址和端口

OK

CONNECT OK

AT+MCONNECT=1,60

//在MIPSTART返回CONNECT OK后才能发MCONNECT命令

//而且要立即发,否则会被服务器踢掉

OK

CONNACK OK

--后面发布和接收与前面一样,直接参考

九、常见问题Q&A

以下针对客户朋友们实际应用中的反馈,整理了MQTT应用中的常见问题:

01. MQTT支持多连接吗?

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

02. MQTT的遗嘱如何使用?

通过AT+MCONFIG命令可以设置遗嘱的qos、retain标志、topic、payload。

在如下(包含但不仅限于)情况下,服务器会主动发布遗嘱消息到订阅的客户端:

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

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

模块设置了遗嘱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消息。

03. 重试多次PDP,MQTT应用一直连接失败?

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

  • 使用RESET引脚复位模块;
  • 极端情况下,直接给模块断电,再上电,POWER KEY引脚拉低开机。

04. MPUB命令中,payload包含"如何发送?

  • 消息中内嵌的双引号请用22表达;
  • 控制字符 r(0x0D)请用�D表达;
  • 控制字符n(0x0A)请用�A表达;
  • 如果是MCU发消息,请用22,�D,�A来表达,即需要转义成。

05. 连接服务器失败

  • 检查模块信号、网络注册、网络附着、PDP激活状态;
  • 检查SIM卡是否欠费;
  • 使用mqtt.fx,连接服务器确认是否可以连接成功,排除服务器故障;
  • 部分国外的开源项目提供免费的MQTT代理服务器,因为网络的原因,国内存在严重的延迟或者丢包现象,导致程序运行出现问题,此现象在AT开发时影响严重;
  • 确认是不是域名解析失败导致,可以通过AT+CDNSGIP=确认域名是否能正常解析(注意:该命令只有在执行完at+cstt、at+ciicr、at+cifsr后才能正常工作)。
    如不能正常解析,可以通过AT+CDNSCFG=ip1,ip2设置域名解析服务器。
  • 在MIPSTART /SSLMIPSTART返回CONNECT OK后,才能发MCONNECT命令,而且要立即发,否则会被服务器踢掉。

06. 数据接收缓存问题

不缓存:

通过AT+MQTTMSGSET=0设置;收到订阅的publish报文后,立即通过AT口输出主题、payload长度、payload内容,每个报文中支持的payload内容最长4100字节。

内存缓存:

通过AT+MQTTMSGSET=1设置;内存中有一个缓存表,一条消息最多4kb,最多支持缓存4条publish报文;收到订阅的publish报文后,插入缓冲表中的空闲位置,然后通过AT口输出存储位置;缓存表满之后,新收到的publish报文会覆盖最旧的publish报文。

注意事项:

缓存表位于内存中,断电或者重启后,缓存表中的数据会被清空;建议收到数据时,通过AT+MQTTMSGGET及时读取出来,以防缓冲区满覆盖丢失数据。

07. 数据发送问题

AT+MPUB最大publish 4100字节,AT+MPUBEX长度取值范围1-4100。

​审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存
    +关注

    关注

    9

    文章

    3173

    浏览量

    76120
  • 低功耗
    +关注

    关注

    12

    文章

    2999

    浏览量

    106261
  • MQTT
    +关注

    关注

    5

    文章

    724

    浏览量

    24790
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    实战Air780EPM:构建4G共享网关,服务WiFi与有线设备!

    通过Air780EPM开发板,我们可以轻松实现4G网络作为数据出口,为周边的WiFi设备和以太网设备提供互联网共享,适用于移动办公、远程部署等场景。 一、多网融合概述   Air780
    的头像 发表于 09-30 16:03 882次阅读
    实战<b class='flag-5'>Air780</b>EPM:构建<b class='flag-5'>4G</b>共享网关,服务WiFi与有线设备!

    Air8101多网融合战略升级:Air780EPM模块助力4G联网落地

    应用迈向新高度。 本文将分享Air8101核心板通过外挂Air780EPM整机开发板,实现4G联网的功能示例。   一、硬件准备工作   1
    的头像 发表于 06-23 16:53 375次阅读
    <b class='flag-5'>Air</b>8101多网融合战略升级:<b class='flag-5'>Air780</b>EPM模块助力<b class='flag-5'>4G</b>联网落地

    COD监测革新!Air780EPM一站式替代STM32+4G模组的物联网方案 ~

    通过将4G通信、COD数据处理与低功耗控制集成于Air780EPM芯片,本方案彻底颠覆STM32+外置模组的松散架构。实测显示,设备启动时间从STM32方案的12s缩短至3s。 水质C
    的头像 发表于 05-21 16:51 430次阅读
    COD监测革新!<b class='flag-5'>Air780</b>EPM一站式替代STM32+<b class='flag-5'>4G</b><b class='flag-5'>模组</b>的物联网方案 ~

    大公开!用Air780EPM重构水质COD监测,替代STM32+4G模组的技术路径

    方法。 以往行业常规开发方案是STM32+4G模组组合,本次实验项目采用Air780EPM开发新方案——
    的头像 发表于 05-16 15:34 454次阅读
    大公开!用<b class='flag-5'>Air780</b>EPM重构水质COD监测,替代STM32+<b class='flag-5'>4G</b><b class='flag-5'>模组</b>的技术路径

    开发宝典:4低功耗ADC接口,Air780EPM二次开发必看!

    本文将深入探讨如何通过硬件参数配置、软件算法优化及系统级功耗管理,实现ADC接口性能与能耗的最佳平衡。从寄存器设置到驱动程序编写,从采样策略到噪声抑制,我们将全面揭秘Air780EPM低功耗ADC
    的头像 发表于 04-01 14:57 494次阅读
    <b class='flag-5'>开发</b>宝典:<b class='flag-5'>4</b>路<b class='flag-5'>低功耗</b>ADC接口,<b class='flag-5'>Air780</b>EPM二次<b class='flag-5'>开发</b>必看!

    快速开发实战——4低功耗ADC接口,Air780EPM二次开发必看!

    Air780EPM 模组,内置4MB大内存RAM,支持LCD、摄像头、Modbus、以太网、CAN;具备更强大的二次开发资源,更完善的外设能力,也更适于工业场景。   最新
    的头像 发表于 04-01 14:56 529次阅读
    快速<b class='flag-5'>开发</b>实战——<b class='flag-5'>4</b>路<b class='flag-5'>低功耗</b>ADC接口,<b class='flag-5'>Air780</b>EPM二次<b class='flag-5'>开发</b>必看!

    新手必看!4G模组Air780EPM——GPIO的设计说明

    Air780EPM的GPIO设计需兼顾硬件可靠性与软件灵活性,开发者应基于具体应用场景权衡复用功能优先级,并遵循电源管理规范以延长设备生命周期。通过模块化配置与精细化调试,可最大化释放模组性能潜力
    的头像 发表于 03-20 17:48 608次阅读
    新手必看!<b class='flag-5'>4G</b><b class='flag-5'>模组</b><b class='flag-5'>Air780</b>EPM——GPIO的设计说明

    干货预警!4G模组Air780EPM其他硬件接口

    Air780EPM 4G模组不仅凭借高速稳定的数据传输能力在智能终端、工业自动化、车载设备等领域大放异彩,更以其“全栈式”硬件接口设计,为开发者提供了近乎无限的扩展可能。 一、ADC
    的头像 发表于 03-17 17:37 743次阅读
    干货预警!<b class='flag-5'>4G</b><b class='flag-5'>模组</b>:<b class='flag-5'>Air780</b>EPM其他硬件接口

    手把手教你!4G模组Air780EPM——GPIO的设计说明

    4G模组Air780EPM作为广和通推出的高性能Cat.1bis无线通信模块,凭借其低功耗、高集成度及丰富的外设接口,在工业物联网、智能终端、车载设备等领域展现出卓越的适配性。 一、概
    的头像 发表于 03-17 16:07 844次阅读
    手把手教你!<b class='flag-5'>4G</b><b class='flag-5'>模组</b><b class='flag-5'>Air780</b>EPM——GPIO的设计说明

    4G模组Air780EPM的开机启动及外围电路设计!

    本文介绍了4G模组——Air780EPM 模块开机的完整硬件设计指南,涵盖供电要求、管脚配置、电路示例及常见问题排查方法,希望能够帮助大家避免设计错误,确保模块稳定启动!常见开机电路。
    的头像 发表于 03-07 16:06 820次阅读
    <b class='flag-5'>4G</b><b class='flag-5'>模组</b><b class='flag-5'>Air780</b>EPM的开机启动及外围电路设计!

    初学者必看!4G模组Air780EPM的开机启动及外围电路设计

    本文介绍了4G模组——Air780EPM 模块开机的完整硬件设计指南,涵盖供电要求、管脚配置、电路示例及常见问题排查方法,希望能够帮助大家避免设计错误,确保模块稳定启动!常见开机电路。
    的头像 发表于 03-07 16:02 578次阅读
    初学者必看!<b class='flag-5'>4G</b><b class='flag-5'>模组</b><b class='flag-5'>Air780</b>EPM的开机启动及外围电路设计

    功耗表现最佳有没有?——Air780EPS

    今天一起来聊聊Air780EPS模组~ 一、Air780EPS核心信息描述 软件开发Air780EPS软件上既支持传统的AT指令,也支持
    的头像 发表于 01-10 15:29 910次阅读
    <b class='flag-5'>功耗</b>表现最佳有没有?——<b class='flag-5'>Air780</b>EPS

    拥有低功耗低成本的Open开发应用,开发人员必看!

    Open开发应用需求,有没有低功耗、低成本方案? 今天我们一起来聊聊Air780EP模组。 一、Air780EP实网
    的头像 发表于 12-26 11:50 827次阅读
    拥有<b class='flag-5'>低功耗</b>低成本的Open<b class='flag-5'>开发</b>应用,<b class='flag-5'>开发</b>人员必看!

    要Open开发,又要低功耗低成本?建议等新方案

    Open开发应用需求,有没有低功耗、低成本方案? 今天我们一起来聊聊Air780EP模组。 一、Air780EP核心信息描述 运营商支持:
    的头像 发表于 12-24 17:09 723次阅读
    要Open<b class='flag-5'>开发</b>,又要<b class='flag-5'>低功耗</b>低成本?建议等新方案

    掌握4G模组PWM|技术精要

    今天要讲的是4G模组PWM的技术精要,以常用的合宙Air724UG为例做出示例分享给大家。
    的头像 发表于 12-14 09:40 1723次阅读
    掌握<b class='flag-5'>4G</b><b class='flag-5'>模组</b>PWM|技术精要