来了,超全MQTT实用示例

news/2024/11/12 22:02:40/文章来源:https://www.cnblogs.com/luatos/p/18536296

Air201快速入门之MQTT示例

合宙Air201资产定位模组——是一个集成超低功耗4G通信、语音通话、超低功耗定位、计步、震动、Type-C、充电、放音、录音等功能的超小PCBA

内部集成高效、简单、可靠的LuatOS语言,旨在帮助客户降低开发难度,降低研发成本,以及打造超小超低功耗的精品产品。

合宙Air201最新资料下载链接:
https://docs.openluat.com/air201/

图片

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

操作例程包括:

  • MQTT单链接

  • MQTT多链接

  • MQTT SSL不带证书链接

  • MQTT SSL带证书链接

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

1. 搭建环境

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

图片

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

1.1 硬件准备

图片

  • 合宙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工具配置 ▼

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

图片

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

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

图片

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

订阅主题格式

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

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

 

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

图片

 


2. MQTT单链接示例

2.1 main.lua说明

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

图片

2.2 single_mqtt.lua说明

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

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

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

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

图片

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

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

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

图片

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

图片

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

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

图片

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

RTOS库详细信息请参考:

RTOS底层操作库

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

图片

2.3 示例效果

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

图片

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

图片


3. MQTT多链接示例

3.1 main.lua说明

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

图片

3.2 multilink_mqtt.lua说明

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

特别说明:
client1_pub_topic
client1_sub_topic
client2_pub_topic
client2_sub_topic

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

图片

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

具体步骤包括:

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

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

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

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

图片

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服务器。

图片

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

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

图片

5)此sys.taskInit为主task函数

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

具体步骤包括:

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

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

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

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

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

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

图片

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

图片

3.3 示例效果

Client 1:

图片

Client 2:

图片


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

4.1 main.lua说明

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

图片

4.2 ssl_mqtt.lua说明

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

特别注意:

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

图片

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

 

4.3 示例效果

图片


 

5. MQTT SSL带证书链接示例

5.1 main.lua说明

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

图片

5.2 ssl_mqtt.lua说明

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

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

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

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

图片

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

5.3 示例效果

图片

今天的分享就到这里了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/829155.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Air780E软件指南:zlib解压示例

一、ZLIB解压工具简介Zlib解压工具是一个广泛使用的压缩和解压缩库,主要用于处理数据的压缩和解压缩任务。Zlib使用的是DEFLATE算法,这是一种通用的压缩算法。它被应用在很多场景中,比如压缩文件、网络传输中的数据压缩、以及各种应用程序中的数据存储和读取。 Zlib的代码库…

简单但实用,RTC时钟使用指南

合宙Air201快速入门-RTC实时时钟使用示例- 本教程教你通过使用脚本代码,实现Air201内置RTC实时时钟同步时间、获取时间、设置时间等功能,可根据实际需求灵活应用。 我们先了解一些相关基础知识: RTC——Real-Time Clock实时时钟,通常称为时钟芯片,可以提供精确的实时时间,…

Nexpose 6.6.278 发布下载,新增功能概览

Nexpose 6.6.278 for Linux & Windows - 漏洞扫描Nexpose 6.6.278 for Linux & Windows - 漏洞扫描 Rapid7 Vulnerability Management, released Nov 07, 2024 请访问原文链接:https://sysin.org/blog/nexpose-6/ 查看最新版。原创作品,转载请保留出处。 作者主页:s…

BuildCTF-sorin-wp(part)

BuildCTF部分题目wp队员:sorinEZ_ZIP010查找分析发现压缩包,使用foremost分离疑似套娃压缩包,使用开源软件extractnow或者脚本都可以批量压缩,这里使用extractnow得到flagHEX的秘密16进制每两位截取一次转10进制,对比Build的前几个字符的ascll码发现多了128,脚本如下:de…

深入解析 Transformers 框架(四):Qwen2.5/GPT 分词流程与 BPE 分词算法技术细节详解

本文深入解析 Qwen2.5 大语言模型的分词流程和 BPE 分词算法。通过中英文混合文本示例,详细介绍了从文本规范化、初步分词、字节编码与映射到 BPE 分词的每一步骤。结合代码实现,揭示了 Qwen2.5 如何高效处理多语言文本,帮助读者全面理解 BPE 分词算法的原理和应用……前面我…

37 机器人

机器人由计算机控制的机器,可编程机器人

鸿蒙项目实战(三):自定义弹窗开发实践

自定义弹窗选型 合理选择不同的系统能力实现弹窗,有利于提升应用开发效率,实现更好的功能需求,因此了解自定义弹窗的选型和差异非常重要。在应用开发中,为了选择出合适的弹窗选型,从使用场景上,需要重点关注以下两点:弹窗与界面代码解耦 在开发业务逻辑时,例如遇到一些…

换根 DP

树形 DP 中的换根 DP 问题又被称为二次扫描,通常需要求以每个点为根时某个式子的答案。 这一类问题通常需要遍历两次树,第一次遍历先求出以某个点(如 \(1\))为根时的答案,在第二次遍历时考虑由根为 \(u\) 转化为根为 \(v\) 时答案的变化(换根)。这个变化往往分为两部分,…

学习笔记(三十):ArkUi-UIContext.getPromptAction(弹窗)

概述: 基于promptAction弹窗演进而来,支持全局自定义弹窗,不依赖UI组件,依赖UIContext, 支持在非页面文件中使用,弹窗内容支持动态修改,支持自定义弹窗圆角半径、大小和位置, 适合在与页面解耦的全局弹窗、自定义弹窗显示和退出动画等场景下使用。 注意: 需先使用UICo…

MudBlazor:基于Material Design风格开源且强大的Blazor组件库

项目介绍 MudBlazor是一个基于Material Design风格开源、免费(MIT License)、功能强大的Blazor组件框架,注重易用性和清晰的结构。它非常适合想要快速构建Web应用程序的 .NET 开发人员,无需费力地处理 CSS 和 JavaScript。由于MudBlazor完全使用C#编写,因此你可以自由地调…

读数据工程之道:设计和构建健壮的数据系统32序列化和云网络

序列化和云网络1. 序列化 1.1. 仅仅通过从CSV转换到Parquet序列化,任务性能就提高了上百倍 1.2. 基于行的序列化1.2.1. 基于行的序列化是按行来组织数据1.2.2. 对于那些半结构化的数据(支持嵌套和模式变化的数据对象)​,基于行的序列化需要将每个对象作为一个单元来存储1.2…

入门龙芯旧世界汇编指令

我是龙芯汇编指令新手,本文是我学习龙芯汇编的笔记我借到了一台宝贵的龙芯 3A6000 设备,我期望在这台设备上面学习龙芯汇编指令。这台设备上的是龙芯旧世界的麒麟系统,由于这台设备很宝贵,我不能随意玩。为了防止弄坏设备,我将在此设备上面搭建 docker 环境,进入到 docke…