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 示例效果


今天的分享就到这里了

来了,超全MQTT实用示例的更多相关文章

  1. Linux超全实用指令大全

    参考 Linux超全实用指令大全

  2. 超全的web开发工具和资源

    首页 新闻 产品 地图 动态 城市 帮助 论坛 关于 登录 注册 · 不忘初心,继续前进,环境云V2接口正式上线 · 环境云测点地图全新改版 · 祝福各位环境云用户中秋快乐!   平台信息 培训互动 ...

  3. iOS超全开源框架、项目和学习资料汇总--数据库、缓存处理、图像浏览、摄像照相视频音频篇

    iOS超全开源框架.项目和学习资料汇总--数据库.缓存处理.图像浏览.摄像照相视频音频篇 感谢:Ming_en_long 的分享 大神超赞的集合,http://www.jianshu.com/p/f3 ...

  4. 转帖: 一份超全超详细的 ADB 用法大全

    增加一句 连接 网易mumu模拟器的方法 adb  connect 127.0.0.1:7555 一份超全超详细的 ADB 用法大全 2016年08月28日 10:49:41 阅读数:35890 原文 ...

  5. 干货100+ 最超全的web开发工具和资源大集合

    干货100+ 最超全的web开发工具和资源大集合   作为Web开发者,这是好的时代,也是坏的时代.Web开发技术也在不断变化.虽然很令人兴奋,但是这也意味着Web开发人员需要要积极主动的学习新技术和 ...

  6. 超全面的.NET GDI+图形图像编程教程

    本篇主题内容是.NET GDI+图形图像编程系列的教程,不要被这个滚动条吓到,为了查找方便,我没有分开写,上面加了目录了,而且很多都是源码和图片~ (*^_^*) 本人也为了学习深刻,另一方面也是为了 ...

  7. 【转】iOS超全开源框架、项目和学习资料汇总

    iOS超全开源框架.项目和学习资料汇总(1)UI篇iOS超全开源框架.项目和学习资料汇总(2)动画篇iOS超全开源框架.项目和学习资料汇总(3)网络和Model篇iOS超全开源框架.项目和学习资料汇总 ...

  8. 【Redis】命令学习笔记——字符串(String)(23个超全字典版)

    Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). 本篇基于redis 4.0.11版本,学习字符串( ...

  9. 超全面的JavaWeb笔记day03<JS对象&函数>

    1.js的String对象(****) 2.js的Array对象 (****) 3.js的Date对象 (****) 获取当前的月 0-11,想要得到准确的月 +1 获取星期时候,星期日是 0 4.j ...

  10. [转]超全面的.NET GDI+图形图像编程教程

    本篇主题内容是.NET GDI+图形图像编程系列的教程,不要被这个滚动条吓到,为了查找方便,我没有分开写,上面加了目录了,而且很多都是源码和图片~ GDI+绘图基础 编写图形程序时需要使用GDI(Gr ...

随机推荐

  1. Windows SSH 免密登陆远程计算机

    上传公钥 如果远程计算机是类 Unix 系统,使用下面这条命令: Get-Content $Env:USERPROFILE\.ssh\id_rsa.pub | ssh USER@HOST " ...

  2. Go plan9 汇编: 打通应用到底层的任督二脉

    原创文章,欢迎转载,转载请注明出处,谢谢. 0. 前言 作为一个严肃的 Gopher,了解汇编是必须的.本汇编系列文章会围绕基本的 Go 程序介绍汇编的基础知识. 1. Go 程序到汇编 首先看一个简 ...

  3. docker高级篇第三章-dockerfile案例之制作自己的centos镜像

    在上一篇文章中<Dockerfile介绍及常用保留指令>,我们介绍了Dockerfile是什么以及Dockerfile常用的保留字段.熟悉了这些之后,有没有想自己动手写一个Dockerfi ...

  4. Java并发编程学习前期知识上篇

    Java并发编程学习前期知识上篇 我们先来看看几个大厂真实的面试题: 从上面几个真实的面试问题来看,我们可以看到大厂的面试都会问到并发相关的问题.所以 Java并发,这个无论是面试还是在工作中,并发都 ...

  5. Cannot add task 'wrapper' as a task with that name already exists.

    写gradle项目的运行模板脚本 直接执行gradle clean build会报错 将原本的: task wrapper(type: Wrapper) { gradleVersion = '4.10 ...

  6. win10环境下 jdk8安装点击下一步没反应解决办法

    win10 安装 jdk8 这个界面点下一步,每次总是没反应. jdk8官网下载的,要是第三方下载的铁定要怀疑是不是安装包问题了 解决方法:将输入法切换到系统自带的.(我一开始默认的是百度输入法) 这 ...

  7. 爬虫案例1-爬取图片的三种方式之一:selenium篇(2)

    @ 目录 前言 selenium简介 实战 共勉 ps 博客 前言 继使用requests库爬取图片后,本文使用python第三方库selenium来进行图片的爬取,后续也会使用同样是自动化测试工具D ...

  8. 人脸伪造图像检测:Deepfake魔高一尺,TextIn道高一丈

      只因开了一个视频会议,直接被骗1.8个亿 今年2月,一家跨国公司的香港分公司财务人员被一场精心策划的Deepfake视频会议诈骗,导致公司损失2亿港币(约1.8亿人民币). 事件起因是财务人员收到 ...

  9. 记一次 .NET某上位机视觉程序 卡死分析

    一:背景 1. 讲故事 前段时间有位朋友找到我,说他的窗体程序在客户这边出现了卡死,让我帮忙看下怎么回事?dump也生成了,既然有dump了那就上 windbg 分析吧. 二:WinDbg 分析 1. ...

  10. Vue3——环境变量的配置

    vue3环境变量的配置 开发环境(development) 测试环境(testing) 生产环境(production) 项目根目录分别添加 开发.生产和测试环境的文件! .env.developme ...