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

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

3天内不再提示

Air201:MQTT实用示例的终极指南

青山老竹农 来源:jf_82863998 作者:jf_82863998 2024-11-07 19:30 次阅读

今天我们学习的是关于Air201的MQTT实用示例的终极指南。

教程教你通过使用脚本代码,对Air201模组进行MQTT链接操作。

操作例程包括:

MQTT单链接

MQTT多链接

MQTT SSL不带证书链接

MQTT SSL带证书链接

大家可根据自身需求,选择对应的例程学习。

1. 搭建环境

新同学建议先看前期的基础知识相关教程,更有助于理解和操作。

wKgaoWcsoiuAUi3OAANUcDKHwSk769.png

本章所需要用到的脚本存于LuatOS-Air201demomqtt文件夹中;若没有找到该脚本,可能代码并非最新,请根据前面教学重新拉取。

1.1 硬件准备

wKgZoWcsojyAYph2AAWHvo6EzmY249.png

Air201 PCBA

带有数据通信功能的数据线

Win10以上PC

1.2 软件准备

LuaTools调试工具:
https://docs.openluat.com/Luatools/

最新固件:
https://gitee.com/openLuat/LuatOS-Air201/tree/master/core

最新脚本:
https://gitee.com/openLuat/LuatOS-Air201/tree/master/demo/mqtt

MQTTX工具:
https://mqttx.app/

本章教程以MQTTX工具为例进行学习,大家也可以使用其他MQTT工具。

我们先把MQTTX工具配置一下:

▼ MQTTX工具配置 ▼

下载好软件后,根据下方图中操作指示填写信息

wKgaoWcsolmAW0NMAAG_5uYBnK0702.png

填写好信息,点击右上角【连接】。

下一步,开始添加订阅主题和发布消息主题:

wKgZoWcsomaAacEdAAGBaPhU7rk288.png


这里,要特别注意一下主题格式。

订阅主题格式

要求默认为:/luatos/pub/ 加模组的IMEI号
例如:
/luatos/pub/864536071785271

发布主题格式
要求默认为:/luatos/sub/ 加模组的IMEI号
例如:
/luatos/sub/864536071785271

MQTTX配置已经完成,现在开始正式学习。学成之后便可通过MQTT进行自由通信了,实际效果如下图所示:

wKgaoWcsoneAJ4BwAAPZW0p0HH8608.png

2.MQTT单链接示例

2.1 main.lua说明

在main.lua中我们需要调用single_mqtt,代码参考如下:

wKgZoWcsooyAb2MsAARfGH7_PYk590.png

2.2 single_mqtt.lua说明

下面将对single_mqtt.lua中的代码进行简单说明,并指导大家修改指定参数,以便顺利进行MQTT单链接操作。

1)在代码开头部分,根据自己的服务器修改指定的参数。

需要注意的是user_name和password在有些服务器上是可以不传入的,或者是对传入的值没有要求限制。

要根据实际服务器要求来填写。

wKgZoWcsop6AI0P8AAKrJH-m89A792.png

2)此task实现的是MQTT的连接、订阅消息、发布消息的流程。

要先等待网络就绪之后,才可进行MQTT后续操作。

待网络就绪之后,根据代码编写情况此时client_id、pub_topic和sub_topic会发生变化,会覆盖掉代码开头部分时的配置,这点需要注意。device_id为模组的IMEI号。

wKgaoWcsorCACXaiAAUAzG6oxfY865.pngwKgZoWcsosKAULN5AAbfq-ftPeQ268.pngwKgZoWcsotKASDPWAAPQ4TzJhlI803.png

3)此task的功能为模组每3秒向服务器发送一次数据:

wKgZoWcsot-ALDpXAAK-5Gh5sUA117.png

4)此代码可实现mqtt-uart透传,利用串口工具给服务器发消息或者接收来自服务器的消息。

注意:要使用串口1,且波特率为9600。

wKgaoWcsou2AZaAWAAQ8xqPo0M8971.png

5)此task是通过使用rtos.meminfo()查询内存信息,并进行打印。

RTOS库详细信息请参考:

RTOS底层操作库

https://wiki.luatos.com/api/rtos.html?highlight=rtos#rtos-meminfo-type

wKgZoWcsovmAFgl8AAFH_XwiB7Y602.png

2.3 示例效果

MQTT单链接示例如下图所示,实现效果为模块每3秒向服务器发送一次数据。

wKgaomcsowqAdGJ1AAPOC_FISn8888.png

前面代码中所提到的mqtt-uart透传实现效果图如下所示:

wKgZomcsoxSAU_miAAL9qJS1K_s649.png

3. MQTT多链接示例

3.1 main.lua说明

在main.lua中我们需要调用multilink_mqtt,代码参考如下:

wKgaomcsoyiAE-gIAARhKGwDFqA644.png

3.2 multilink_mqtt.lua说明

1)在代码开头部分,请根据自己的服务器修改指定的参数。

特别说明:
client1_pub_topic
client1_sub_topic
client2_pub_topic
client2_sub_topic

以上几项在后面函数中会再次赋参数,因此会覆盖掉这里的参数,所以大家可以选择不填。

wKgaoWcsoz-ABCdOAAP7YzRNFmM231.png

2)此create_mqtt函数主要功能是创建并配置MQTT客户端对象。

具体步骤包括:

使用mqtt.create创建一个MQTT客户端对象,并将其存储在mqtt_param表的mqttc字段中;

使用log.info打印MQTT客户端的配置信息;

使用mqttc:auth进行MQTT三元组配置;

使用mqttc:autoreconn配置自动重连机制,true表示启动自动重连机制,3000为自动重连周期,单位为ms。

wKgZomcso0yANyLkAASPkY_Cs5o443.png

3)此mqtt_client1函数主要功能是创建并配置一个MQTT客户端1(client1),并链接到指定的MQTT服务器。

具体步骤包括:

client1_pub_topic和client1_sub_topic分别定义了客户端1的上报主题和订阅主题,device_id为设备的IMEI号;

使用log.info函数打印客户端1的上报和下发主题;

使用create_mqtt函数创建MQTT客户端1,并传入mqtt1_param表中参数;

设置MQTT客户端1的事件回调函数,event为事件类型标识,可能出现的值有"conack"(连接确认)、"recv"(接收消息)、"sent"(发送完成)、"disconnect"(服务器断开连接)等,再根据不同事件类型执行不同的功能;

调用connect方法连接到MQTT服务器。

wKgaoWcso16AXrVpAAZF5iBhSGQ831.pngwKgZoWcso2yAZjRzAAMZh2zBBA8601.png

4)此mqtt_client2函数主要功能是创建并配置一个MQTT客户端2(client2),并链接到指定的MQTT服务器。

代码内容与mqtt_client1类似,此处不再复述。

wKgaoWcso3uANnn5AAbmoVkdcNs034.pngwKgZomcso4mAEb7YAAFN6TxtOEU993.png

5)此sys.taskInit为主task函数

函数主要功能是初始化刚才那两个MQTT客户端,确保它们能够成功连接到服务器,并进行周期性的发布消息以实现与服务器的通信。代码中还进行了设备联网检查及库的兼容性验证,确保在合适环境下运行。

具体步骤包括:

使用sys.waitUntil让系统等待网络连接就绪;

使用mobile.imei()获取模块IMEI号后赋值给device_id作为设备ID;

代码检查是否存在有可用的MQTT库。若不存在,进入一个无限循环,每秒打印一个日志信息,告知用户未找到MQTT库;

分别启动两个MQTT客户端,并等待与服务器成功连接的确认;

设定要发布的数据及qos(服务质量)等级,qos为1表示消息至少会被传递一次;

使用一个无限循环,每隔3秒检查MQTT客户端是否准备好,并发送带有时间戳的数据到指定的主题。

wKgaomcso5eAfCruAATrRSBC4E0538.pngwKgZomcso6mANWaJAAPdCQmtrEs584.png

6)此sys.taskInit的主要功能是,每隔3秒打印一次Lua程序和操作系统的内存使用情况。

wKgZomcso7OAL1udAAF6-U7Pslw892.png

3.3 示例效果

Client 1:

wKgZoWcso8KAfWrjAAQLQEpJ1ZM791.png

Client 2:

wKgZoWcso8yAffu6AAQaJJZ0Wpk048.png

4. MQTT SSL不带证书链接示例

4.1 main.lua说明

在main.lua中我们需要调用ssl_mqtt,代码参考如下:

wKgaoWcso9-AI4gYAARc8AW4N7E729.png

4.2 ssl_mqtt.lua说明

1)在代码开头部分,根据自己的服务器修改对应参数。

特别注意:

MQTT SSL不带证书链接与带证书链接为同一个文件,我们本节教程是MQTT SSL不带证书链接,因此要将mqtt_isssl的值改为true ,大家可自行参考下方代码进行修改。

wKgZoWcso--AYji5AAVrOwmVYr8125.png

2)其余代码部分就与MQTT单链接示例中的single_mqtt.lua 代码相同,同样为避免重复信息过多,影响阅读感受,大家可转到上文2.2 single_mqtt.lua说明进行了解。

4.3 示例效果

wKgaoWcso_-AHXuQAAQgKibSzQs587.png

5. MQTT SSL带证书链接示例

5.1 main.lua说明

在main.lua中我们依旧需要调用ssl_mqtt,代码参考如下:

wKgaoWcspBaAM2PgAARdQKc3T4k169.png

5.2 ssl_mqtt.lua说明

1)在代码开头部分,依旧需要大家根据自己的服务器进行修改对应参数。

不过需要注意的是,本次是使用MQTT SSL带证书链接,所以需要将mqtt_isssl的值改为table;

另外需要注意的是,既然是带证书链接,那么肯定是需要准备好证书文件了,大家在使用自己的服务器时,一定要准备好对应的证书文件才行,证书文件建议直接放在 LuatOS-Air201demomqtt 文件夹下,证书文件路径根据代码中示例自行修改。

在烧录时,要将证书文件作为脚本文件一同烧录到模组中。详细烧录教程,大家可自行参考:
https://docs.openluat.com/Luatools/

wKgaoWcspCeAZ1V3AAW74W3PkQg204.png

2)其余代码部分就与MQTT单链接示例中的single_mqtt.lua代码相同,为避免重复信息过多,影响阅读感受,大家可转到上文

2.2 single_mqtt.lua说明进行了解。

5.3 示例效果

wKgZoWcspJKAXrqWAAPlU3NX-ys656.png

分享完毕,欢迎关注

审核编辑 黄宇

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

    关注

    5

    文章

    647

    浏览量

    22392
  • LuatOS
    +关注

    关注

    0

    文章

    57

    浏览量

    1916
收藏 人收藏

    评论

    相关推荐

    GPS/LBS/Wi-Fi定位,全安排!—合宙Air201资产定位模组LuatOS快速入门04

    程/固件。   Air201定位示例教程     合宙Air201资产定位模组 ——是一个集成超低功耗4G通信、语音通话、超低功耗定位、计步、震动、Type-C、充电、放音、录音等功能的超小PCBA。 内部集成高效、简单、可靠的
    的头像 发表于 09-12 12:04 993次阅读
    GPS/LBS/Wi-Fi定位,全安排!—合宙<b class='flag-5'>Air201</b>资产定位模组LuatOS快速入门04

    合宙Air201资产定位模组LuatOS课程:远程控制

    很多小伙伴已经学习了前两期教程hello world、点灯,对合宙Air201这款低功耗资产定位模组的LuatOS开发已有一定了解,大家的实操反馈是:真的很简单! 那么,这一期我们要一起体验更有
    的头像 发表于 09-14 16:28 1007次阅读
    合宙<b class='flag-5'>Air201</b>资产定位模组LuatOS课程:远程控制

    Air780E/Air780EP/Air780EQ/Air201模块遇到死机问题如何分析

    Air780E/Air780EP/Air780EQ/Air201模块遇到死机问题如何分析简介本文档适用于合宙Air780E、
    的头像 发表于 07-19 15:37 520次阅读
    <b class='flag-5'>Air</b>780E/<b class='flag-5'>Air</b>780EP/<b class='flag-5'>Air</b>780EQ/<b class='flag-5'>Air201</b>模块遇到死机问题如何分析

    Air780E/Air780EP/Air780EQ/Air201模块遇到内存死机如何分析

    Air780E/Air780EP/Air780EQ/Air201模块遇到内存死机如何分析简介本文档适用于合宙Air780E、
    的头像 发表于 07-19 16:07 451次阅读
    <b class='flag-5'>Air</b>780E/<b class='flag-5'>Air</b>780EP/<b class='flag-5'>Air</b>780EQ/<b class='flag-5'>Air201</b>模块遇到内存死机如何分析

    合宙 Air780E/Air780EP/Air780EQ/Air201模块遇到死机问题如何分析

    Air780E/Air780EP/Air780EQ/Air201模块遇到死机问题如何分析简介本文档适用于合宙Air780E、
    的头像 发表于 08-01 17:27 648次阅读
    合宙 <b class='flag-5'>Air</b>780E/<b class='flag-5'>Air</b>780EP/<b class='flag-5'>Air</b>780EQ/<b class='flag-5'>Air201</b>模块遇到死机问题如何分析

    合宙Air201定位模组,千万不要忘记设置这个......

    合宙Air201定位模组,千万不要忘记设置这个:AT+WIFILOC设置wifi定位优先
    的头像 发表于 08-09 18:01 1288次阅读
    合宙<b class='flag-5'>Air201</b>定位模组,千万不要忘记设置这个......

    远程控制,就是这么简单—合宙Air201资产定位模组LuatOS快速入门03

    通过前两期教程hello world、点灯,大家对合宙Air201这款低功耗资产定位模组的LuatOS开发已有一定了解,实操反馈是:真的很简单! 那么,这一期我们要一起体验更有趣的 ——远程
    的头像 发表于 09-12 11:54 219次阅读
    远程控制,就是这么简单—合宙<b class='flag-5'>Air201</b>资产定位模组LuatOS快速入门03

    资产定位 | 合宙Air201模组LuatOS快速入门01-hello world

    合宙的Air201模组,功耗低,品质稳定,购买样品也方便,且资料全开放。
    的头像 发表于 09-13 15:21 281次阅读
    资产定位 | 合宙<b class='flag-5'>Air201</b>模组LuatOS快速入门01-hello world

    合宙Air201资产定位模组LuatOS快速入门:GPS/LBS/Wi-Fi定位,全安排!​

    ​  经过三期的学习:hello world、点灯、远程控制,小伙伴们是不是收获满满呢?更高阶的应用来啦! 本期,我们将学习合宙Air201的核心功能之一 ——定位功能  Air201定位示例
    的头像 发表于 09-14 07:56 330次阅读
    合宙<b class='flag-5'>Air201</b>资产定位模组LuatOS快速入门:GPS/LBS/Wi-Fi定位,全安排!​

    合宙Air201资产定位模组LuatOS课程:点灯仪式

      上一期教程,我们学习了合宙Air201hello world,很多小伙伴有了初步了解,接下来,推出第二篇:你将体验工程师的重要仪式——点灯! Air201点灯教程     合宙Air201资产
    的头像 发表于 09-14 16:24 245次阅读
    合宙<b class='flag-5'>Air201</b>资产定位模组LuatOS课程:点灯仪式

    合宙Air201资产定位模组LuatOS基础课程:FOTA远程升级,一键搞定!

    的实用示例**——FOTA远程升级** ** FOTA远程升级** [ ] 合宙Air201资产定位模组 ——是一个集成超低功耗4G通信、语音通话、超低功耗定位、计步、震动、Type-C、充电、放音、录音等功能的超小PCBA。 内部集成高效、简单、可靠的LuatOS语言,
    的头像 发表于 09-18 18:07 322次阅读
    合宙<b class='flag-5'>Air201</b>资产定位模组LuatOS基础课程:FOTA远程升级,一键搞定!

    合宙Air201资产定位模组LuatOS快速入门(五):玩转扩展库,温湿度传感器篇!

    ​ 通过前面几期的学习,同学们的学习热情越来越高哇! 合宙Air201不仅支持[三种定位方式]"三种定位方式"),还具有丰富的扩展功能哦:通过外扩BTB链接方案,最多可支持21个IO接口:SPI
    的头像 发表于 09-18 07:05 249次阅读
    合宙<b class='flag-5'>Air201</b>资产定位模组LuatOS快速入门(五):玩转扩展库,温湿度传感器篇!

    合宙Air201资产定位模组LuatOS课程(六):PWRKEY控制解决关机难问题

    进一步学习合宙Air201应用示例**——PWRKEY控制关机功能** ** PWRKEY控制关机功能** [ ] 编辑 合宙Air201资产定位模组 ——是一个集成超低功耗4G通信、语音通话、超低
    的头像 发表于 09-18 07:06 322次阅读
    合宙<b class='flag-5'>Air201</b>资产定位模组LuatOS课程(六):PWRKEY控制解决关机难问题

    你要的录音&amp;播放录音功能,直接用!Air201资产定位模组LuatOS快速入门

    音频解码芯片(Audio Codec)及MIC麦克,可支持本地的录音功能;使用配套喇叭即可将录音保存的数据进行播放,操作极为方便。 本期,我们就来学习合宙Air201实用示例 ——录音和播放录音功能 文末阅读原文,下载最新教程/固件。 **
    的头像 发表于 09-27 07:06 208次阅读
    你要的录音&amp;播放录音功能,直接用!<b class='flag-5'>Air201</b>资产定位模组LuatOS快速入门

    Air201资产定位模组LuatOS:录音和播放录音功能的操作方法

    一直有小伙伴们问,迷你小巧的合宙Air201虽然有很多优点,超低功耗、精准定位,那么它是否支持录音、播放录音功能?
    的头像 发表于 10-16 16:22 117次阅读
    <b class='flag-5'>Air201</b>资产定位模组LuatOS:录音和播放录音功能的操作方法