当前位置: 首页 > news >正文

MQTT实用示例集:Air201版

今天贴出的是Air201版关于MQTT实用示例集,希望大家喜欢。

本示例教你通过使用脚本代码,对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 示例效果

图片


今天的分享就到这里

相关文章:

MQTT实用示例集:Air201版

今天贴出的是Air201版关于MQTT实用示例集,希望大家喜欢。 本示例教你通过使用脚本代码,对Air201模组进行MQTT链接操作。 操作例程包括: MQTT单链接 MQTT多链接 MQTT SSL不带证书链接 MQTT SSL带证书链接 大家可根据自身需求&#xff0c…...

Day23 opencv图像预处理

图像预处理 在计算机视觉和图像处理领域,图像预处理是一个重要的步骤,它能够提高后续处理(如特征提取、目标检测等)的准确性和效率。OpenCV 提供了许多图像预处理的函数和方法,常见的操作包括图像空间转换、图像大小调…...

优化模型训练过程中的显存使用率、GPU使用率

参考:https://blog.51cto.com/u_16099172/7398948 问题:用小数据集训练显存使用率、GPU使用率正常,但是用大数据集训练GPU使用率一直是0. 小数据: 大数据: 1、我理解GPU内存占用率显存使用率,由模型的大小…...

RocketMQ学习笔记

RocketMQ笔记 文章目录 一、引言⼆、RocketMQ介绍RocketMQ的由来 三、RocketMQ的基本概念1 技术架构2 部署架构 四、快速开始1.下载RocketMQ2.安装RocketMQ3.启动NameServer4.启动Broker5.使⽤发送和接收消息验证MQ6.关闭服务器 五、搭建RocketMQ集群1.RocketMQ集群模式2.搭建主…...

Linux第三讲:环境基础开发工具使用

Linux第三讲:环境基础开发工具使用 1.Linux软件包管理器yum1.1什么是软件包管理器1.2操作系统生态问题1.3什么是yum源 2.vim详解2.1什么是vim2.2vim的多模式讲解2.2.1命令模式的诸多指令2.2.1.1gg和nshiftg2.2.1.2shift$和shift^2.2.1.3上、下、左、右2.2.1.4w和b2.…...

日本TikTok直播的未来:专线网络助力创作者突破极限

近年来,随着短视频平台的崛起,尤其是TikTok(国际版抖音)成为全球范围内广受欢迎的社交娱乐平台,直播功能的加入无疑为内容创作者提供了更广阔的展示舞台。在日本,TikTok直播不仅使得年轻人能够实时与粉丝互…...

如何在家庭网络中设置静态IP地址:一份实用指南

在家庭网络环境中,IP地址扮演着至关重要的角色。大多数家庭用户依赖路由器的DHCP(动态主机配置协议)来自动分配IP地址,但在某些情况下,手动设置静态IP地址能为家庭网络带来更多的便利性与稳定性,尤其是在涉…...

qt QFile详解

1、概述 QFile类是Qt框架中用于读取和写入文本和二进制文件资源的I/O工具类。它继承自QFileDevice类,后者又继承自QIODevice类。QFile类提供了一个接口,允许开发者以二进制模式或文本模式对文件进行读写操作。默认情况下,QFile假定文件内容为…...

ESP8266 自定义固件烧录-Tcpsocket固件

一、固件介绍 固件为自定义开发的一个适配物联网项目的开源固件,支持网页配网、支持网页tcpsocket服务器配置、支持串口波特率设置。 方便、快捷、稳定! 二、烧录说明 固件及工具打包下载地址: https://download.csdn.net/download/flyai…...

内网项目,maven本地仓库离线打包,解决Cannot access central in offline mode?

背景&#xff1a; 内网项目打包&#xff0c;解决Cannot access central in offline mode? 1、修改maven配置文件&#xff1a; localRepository改为本地仓库位置 <localRepository>D:\WorkSpace\WorkSoft\maven-repository\iwhalecloud-repository\business</loca…...

stack和queue --->容器适配器

不支持迭代器&#xff0c;迭代器无法满足他们的性质 边出边判断 实现 #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> #include<stack> #include<queue> using namespace std; int main() {stack<int> st;st.push(1);st.push(2);st.push(3);…...

ffmpeg视频解码

一、视频解码流程 使用ffmpeg解码视频帧主要可分为两大步骤&#xff1a;初始化解码器和解码视频帧&#xff0c;以下代码以mjpeg为例 1. 初始化解码器 初始化解码器主要有以下步骤&#xff1a; &#xff08;1&#xff09;查找解码器 // 查找MJPEG解码器pCodec avcodec_fin…...

前端入门一之CSS知识详解

前言 CSS是前端三件套之一&#xff0c;在MarkDown中也完美兼容这些语法&#xff1b;这篇文章是本人大一学习前端的笔记&#xff1b;欢迎点赞 收藏 关注&#xff0c;本人将会持续更新。 文章目录 Emmet语法&#xff1a;CSS基本语法&#xff1a;css语法结构只有3种&#xff1a…...

【JS学习】10. web API-BOM

文章目录 Web APIs - 第5天笔记js组成window对象定时器-延迟函数location对象navigator对象histroy对象本地存储&#xff08;今日重点&#xff09;localStorage&#xff08;重点&#xff09;sessionStorage&#xff08;了解&#xff09;localStorage 存储复杂数据类型 综合案例…...

C#实现递归获取所有父级的列表

条件&#xff1a; 父级的id是子级的父id形成递归条件 实现功能&#xff1a; 获取自己到最顶级父级的列表&#xff08;假如最顶级父级的父ID0&#xff09; 代码&#xff1a; 解释&#xff1a;CF_CODE是自己的ID&#xff0c;CF_PARENT_ID是父id /// <summary>/// 递归获…...

【深度学习】梯度累加和直接用大的batchsize有什么区别

梯度累加与使用较大的batchsize有类似的效果&#xff0c;但是也有区别 1.内存和计算资源要求 梯度累加&#xff1a; 通过在多个小的mini-batch上分别计算梯度并累积&#xff0c;梯度累积不需要一次加载所有数据&#xff0c;因此显著减少了内存需求。这对于显存有限的设别尤为重…...

【Linux】网络相关的命令

目录 ① ip addr show ② ip route show ③ iptables -nvL ④ ping -I enx00e04c6666c0 192.168.1.100 ⑤ ip route get 192.168.1.100 ⑥ sudo ip addr add dev enx00e04c6666c0 192.168.1.101/24 ⑦ ifconfig ⑧ netstat ⑨ traceroute ⑩ nslookup ① ip addr sho…...

leetcode哈希表(五)-四数相加II

题目 454.四数相加II 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1&#xff1a; 输入&…...

Java学习路线:Maven(一)认识Maven

目录 认识Maven 新建Maven文件 导入依赖 认识Maven Maven是一个Java的项目管理工具&#xff0c;通过Maven&#xff0c;我们可以实现&#xff1a; 项目自动构建&#xff0c;包括代码的编译、测试、打包、安装等依赖管理&#xff0c;快速完成依赖的导入 在学习Maven之前&…...

【深度学习】— 多输入多输出通道、多通道输入的卷积、多输出通道、1×1 卷积层、汇聚层、多通道汇聚层

【深度学习】— 多输入多输出通道、多通道输入的卷积、多输出通道、11 卷积层、汇聚层、多通道汇聚层 多输入多输出通道多通道输入的卷积示例&#xff1a;多通道的二维互相关运算 多输出通道实现多通道输出的互相关运算 11 卷积层11 卷积的作用 使用全连接层实现 11 卷积小结 …...

java mapper 的 xml讲解

<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"com.bnc.s12.mapper.GoodaCateDT…...

全面解析:区块链技术及其应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 全面解析&#xff1a;区块链技术及其应用 文章目录 全面解析&#xff1a;区块链技术及其应用什么是区块链区块链的工作原理1. 分…...

python基础学习笔记

本文类比c语言讲解python 一.变量和类型 前缀小知识&#xff1a; 注意&#xff1a;1.python写每一行代码时&#xff0c;结尾不需要 ; 这点是和c语言有很大区别的 2.代码的缩进&#xff08;就是每行代码前面的空格&#xff09;是非常重要的后文会提到 1.定义变量 注意: 和C/C …...

【dvwa靶场:XSS系列】XSS (DOM) 低-中-高级别,通关啦

一、低级low 拼接的url样式&#xff1a;​​​​​​​ http://127.0.0.1/dvwa/vulnerabilities/xss_d/?default 拼接的新内容 <script>alert("假客套")</script> 二、中级middle 拼接的url样式&#xff1a;​​​​​​​ http://127.0.0.1/dvwa/vuln…...

ONLYOFFICE 8.2深度体验:高效协作与卓越性能的完美融合

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀ONLYOFFICE 8.2 &#x1f50d;引言&#x1f4d2;1. ONLYOFFICE 产品简介&#x1f4da;2. 功能与特点&#x1f341;协作编辑 PDF&#x1f342;…...

Mac如何将多个pdf文件归并到一个

电脑&#xff1a;MacBook Pro M1 操作方式&#xff1a; very easy 选中想要归并的所有pdf文件&#xff0c;然后 右键 -> quick actions -> Create PDF 然后就可以看到将所选pdf文件归并为一个pdf的文件了...

LINUX下的Mysql:Mysql基础

目录 1.为什要有数据库 2.什么是数据库 3.LINUX下创建数据库的操作 4.LINUX创建表的操作 5.SQL语句的分类 6.Mysql的架构 1.为什要有数据库 直接用文件直接存储数据难道不行吗&#xff1f;非得搞个数据库呢&#xff1f; 首先用文件存储数据是没错&#xff0c;但是文件不方…...

自然语言处理方向学习建议

自然语言处理方向学习建议 自然语言处理&#xff08;NLP&#xff09;作为人工智能的一个重要分支&#xff0c;近年来在学术界和工业界都取得了显著的发展。作为即将或正在攻读博士学位的你&#xff0c;投身于NLP领域无疑是一个充满挑战与机遇的选择。以下是一些针对NLP方向学习…...

介绍一下如何生成随机数(c基础)

适合对象 c语言初学者 总结语言用色&#xff0c;个人强调用红色&#xff0c;注意为易错点&#xff0c;若有问题请告诉我谢谢。(建议通过目录观看)。一定要自己动手打代码。 rand函数 是生成随机数的函数&#xff0c;但实则是伪随机数。(即是同一个值) 格式 #include<st…...

24-11-1-读书笔记(三十一)-《契诃夫文集》(五)下([俄] 契诃夫 [译] 汝龙)生活乏味但不乏魅力。

文章目录 《契诃夫文集》&#xff08;五&#xff09;下&#xff08;[俄] 契诃夫 [译] 汝龙&#xff09;生活乏味但不乏魅力。目录阅读笔记总结 《契诃夫文集》&#xff08;五&#xff09;下&#xff08;[俄] 契诃夫 [译] 汝龙&#xff09;生活乏味但不乏魅力。 休息&#xff0c…...