<p> 我们今天分享的是关于<u>Ai</u>r201之MQTT快速入门,学习了本文后,相信大家对其都有深刻的认识。</p>
讯享网
讯享网<strong>本指南教你通过使用脚本代码,对Air201模组进行MQTT链接操作。</strong></p>
操作例程包括:</p>
讯享网MQTT单链接</p>
MQTT多链接</p>
讯享网MQTT SSL不带证书链接</p>
MQTT SSL带证书链接</p>
讯享网大家可根据自身需求,选择对应的例程学习。</p>
<strong>1. 搭建环境</strong><br /> </p>
讯享网新同学建议先看前期的基础知识相关<u>教程</u>,更有助于理解和操作。</p>
<img src="https://file1.elecfans.com/web1/M00/F4/45/wKgaoWcoiMuAWJGtAANRTkjo3UE308.png" alt="wKgaoWcoiMuAWJGtAANRTkjo3UE308.png" /></p>
讯享网本章所需要用到的脚本存于<u>LuatOS</u>-Air201demomqtt文件夹中;若没有找到该脚本,可能代码并非<u>最新</u>,请根据前面教学重新拉取。</p>
<strong>1.1 <u>硬件</u>准备</strong></p>
讯享网<img src="https://file1.elecfans.com/web1/M00/F4/45/wKgaoWcoiN6AXt3hAAWAUQbCugc958.png" alt="wKgaoWcoiN6AXt3hAAWAUQbCugc958.png" /></p>
Air201 <u>PCB</u>A</p>
讯享网带有数据<u>通信</u>功能的数据线</p>
Win10以上PC</p>
讯享网<strong>1.2 软件准备</strong><br /> </p>
<strong>LuaTools调试工具:</strong><br /> https://docs.openluat.com/Luatools/</p>
讯享网<strong>最新固件:</strong><br /> https://gi<u>te</u>e.com/openLuat/LuatOS-Air201/tree/master/core<br /> </p>
<strong>最新脚本:</strong><br /> https://gitee.com/openLuat/LuatOS-Air201/tree/master/demo/mqtt</p>
讯享网<strong>MQTTX工具:</strong><br /> https://mqttx.app/<br /> </p>
本指南以MQTTX工具为例进行学习,大家也可以使用其他MQTT工具。</p>
讯享网我们先把MQTTX工具配置一下:</p>
<strong>▼ MQTTX工具配置 ▼</strong></p>
讯享网<u>下载</u>好软件后,根据下方图中操作指示填写<u>信息</u>:</p>
<img src="https://file1.elecfans.com/web1/M00/F4/45/wKgaoWcoiQCAIFuLAAG_gU_acFc827.png" alt="wKgaoWcoiQCAIFuLAAG_gU_acFc827.png" /></p>
讯享网填写好信息,点击右上角【连接】。</p>
下一步,开始添加订阅主题和发布消息主题:</p>
讯享网<img src="https://file1.elecfans.com/web2/M00/0B/B5/wKgaomcoiQ2AfZyHAAGA14BH4WM245.png" alt="wKgaomcoiQ2AfZyHAAGA14BH4WM245.png" /></p>
<br /> </p>
讯享网这里,要特别注意一下主题格式。</p>
<strong>订阅主题格式</strong></p>
讯享网要求默认为:/luatos/pub/ 加模组的IMEI号<br /><strong>例如:</strong><br /> /luatos/pub/5271</p>
<strong>发布主题格式</strong><br /> 要求默认为:/luatos/<u>sub</u>/ 加模组的IMEI号<br /><strong>例如:</strong><br /> /luatos/sub/5271</p>
讯享网MQTTX配置已经完成,现在开始正式学习。学成之后便可通过MQTT进行自由通信了,实际效果如下图所示:</p>
<img src="https://file1.elecfans.com/web2/M00/0A/CD/wKgZomcoiRyAWV9XAAPnMVbODM0022.png" alt="wKgZomcoiRyAWV9XAAPnMVbODM0022.png" /></p>
讯享网<strong>2.MQTT单链接示例</strong></p>
<strong>2.1 main.lua说明</strong></p>
讯享网在main.lua中我们需要调用single_mqtt,代码参考如下:</p>
<img src="https://file1.elecfans.com/web1/M00/F4/45/wKgaoWcoiTGATJyfAARe6d2Tqes195.png" alt="wKgaoWcoiTGATJyfAARe6d2Tqes195.png" /></p>
讯享网<strong>2.2 single_mqtt.lua说明</strong></p>
下面将对single_mqtt.lua中的代码进行简单说明,并指导大家修改指定<u>参数</u>,以便顺利进行MQTT单链接操作。</p>
讯享网<strong>1)在代码开头部分,根据自己的服务器修改指定的参数。</strong></p>
需要注意的是user_name和passw<u>or</u>d在有些服务器上是可以不传入的,或者是对传入的值没有要求限制。</p>
讯享网要根据实际服务器要求来填写。</p>
<img src="https://file1.elecfans.com/web1/M00/F4/45/wKgaoWcoiUCAAgZPAAKsOz9Aa6k477.png" alt="wKgaoWcoiUCAAgZPAAKsOz9Aa6k477.png" /></p>
讯享网<strong>2)此task实现的是MQTT的连接、订阅消息、发布消息的流程。</strong></p>
要先等待<u>网络</u>就绪之后,才可进行MQTT后续操作。</p>
讯享网待网络就绪之后,根据代码编写情况此时client_id、pub_to<u>pi</u>c和sub_topic会发生变化,<strong>会覆盖掉代码开头部分时的配置,这点需要注意。</strong>device_id为模组的IMEI号。</p>
<img src="https://file1.elecfans.com/web2/M00/0A/CD/wKgZomcoiVGAXdGVAAT9bBUwaCM504.png" alt="wKgZomcoiVGAXdGVAAT9bBUwaCM504.png" /><img src="https://file1.elecfans.com/web1/M00/F4/45/wKgaoWcoiWSALn1DAAdElI8L5Ng956.png" alt="wKgaoWcoiWSALn1DAAdElI8L5Ng956.png" /><img src="https://file1.elecfans.com/web1/M00/F4/46/wKgZoWcoiX2AQuEJAANnGi5sRYE936.png" alt="wKgZoWcoiX2AQuEJAANnGi5sRYE936.png" /></p>
讯享网<strong>3)此task的功能为模组每3秒向服务器发送一次数据:</strong></p>
<img src="https://file1.elecfans.com/web2/M00/0B/B5/wKgaomcoiYuAdF_SAALCWvqQs1A412.png" alt="wKgaomcoiYuAdF_SAALCWvqQs1A412.png" /></p>
讯享网<strong>4)此代码可实现mqtt-<u>uart</u>透传,利用串口工具给服务器发消息或者接收来自服务器的消息。</strong></p>
注意:要使用串口1,且波特率为9600。</p>
讯享网<img src="https://file1.elecfans.com/web2/M00/0A/CD/wKgZomcoiZiAG62fAAQ95v2Uf4E081.png" alt="wKgZomcoiZiAG62fAAQ95v2Uf4E081.png" /></p>
<strong>5)此task是通过使用<u>rtos</u>.meminfo()查询内存信息,并进行打印。</strong></p>
讯享网RTOS库详细信息请参考:</p>
<strong>RTOS底层操作库</strong></p>
讯享网https://wiki.luatos.com/api/rtos.html?highlight=rtos#rtos-meminfo-type</p>
<img src="https://file1.elecfans.com/web2/M00/0B/B5/wKgaomcoiaWAL86HAAFRj5_hK-g267.png" alt="wKgaomcoiaWAL86HAAFRj5_hK-g267.png" /></p>
讯享网<strong>2.3 示例效果</strong></p>
MQTT单链接示例如下图所示,实现效果为模块每3秒向服务器发送一次数据。</p>
讯享网<img src="https://file1.elecfans.com/web2/M00/0A/CD/wKgZomcoibeANB89AAPRwQ7nRJs182.png" alt="wKgZomcoibeANB89AAPRwQ7nRJs182.png" /></p>
前面代码中所提到的mqtt-uart透传实现效果图如下所示:</p>
讯享网<img src="https://file1.elecfans.com/web2/M00/0B/B5/wKgaomcoiciAdZjZAAL_BbCxcY0912.png" alt="wKgaomcoiciAdZjZAAL_BbCxcY0912.png" /></p>
<strong>3. MQTT多链接示例</strong></p>
讯享网<strong>3.1 main.lua说明</strong></p>
在main.lua中我们需要调用multilink_mqtt,代码参考如下:</p>
讯享网<img src="https://file1.elecfans.com/web2/M00/0A/CD/wKgZomcoid2Aa1tuAARhvggbgt4838.png" alt="wKgZomcoid2Aa1tuAARhvggbgt4838.png" /></p>
<strong>3.2 multilink_mqtt.lua说明</strong></p>
讯享网<strong>1)在代码开头部分,请根据自己的服务器修改指定的参数。</strong></p>
特别说明:<br /> client1_pub_topic<br /> client1_sub_topic<br /> client2_pub_topic<br /> client2_sub_topic</p>
讯享网以上几项在后面函数中会再次赋参数,因此会覆盖掉这里的参数,所以大家可以选择不填。</p>
<img src="https://file1.elecfans.com/web2/M00/0B/B5/wKgaomcoifiAHVnuAAP_hJ2ZJBE324.png" alt="wKgaomcoifiAHVnuAAP_hJ2ZJBE324.png" /></p>
讯享网<strong>2)此create_mqtt函数主要功能是创建并配置MQTT客户端对象。</strong></p>
具体步骤包括:</p>
讯享网使用mqtt.create创建一个MQTT客户端对象,并将其存储在mqtt_pa<u>ram</u>表的mqttc字段中;</p>
使用log.info打印MQTT客户端的配置信息;</p>
讯享网使用mqttc:auth进行MQTT三元组配置;</p>
使用mqttc:autoreconn配置自动重连机制,true表示启动自动重连机制,3000为自动重连周期,单位为ms。</p>
讯享网<img src="https://file1.elecfans.com/web2/M00/0A/CD/wKgZomcoigeARpOoAASKkT1Svww514.png" alt="wKgZomcoigeARpOoAASKkT1Svww514.png" /></p>
<strong>3)此mqtt_client1函数主要功能是创建并配置一个MQTT客户端1(client1),并链接到指定的MQTT服务器。</strong></p>
讯享网具体步骤包括:</p>
client1_pub_topic和client1_sub_topic分别定义了客户端1的上报主题和订阅主题,device_id为设备的IMEI号;</p>
讯享网使用log.info函数打印客户端1的上报和下发主题;</p>
使用create_mqtt函数创建MQTT客户端1,并传入mqtt1_param表中参数;</p>
讯享网设置MQTT客户端1的事件回调函数,event为事件类型标识,可能出现的值有"conack"(连接确认)、"recv"(接收消息)、"sent"(发送完成)、"disconnect"(服务器断开连接)等,再根据不同事件类型执行不同的功能;</p>
调用connect方法连接到MQTT服务器。</p>
讯享网<img src="https://file1.elecfans.com/web2/M00/0A/CD/wKgZomcoihmAN6CFAAdXce-Ifh4405.png" alt="wKgZomcoihmAN6CFAAdXce-Ifh4405.png" /><img src="https://file1.elecfans.com/web2/M00/0A/CD/wKgZomcoiimAf1ahAAHHd3ffniE544.png" alt="wKgZomcoiimAf1ahAAHHd3ffniE544.png" /></p>
<strong>4)此mqtt_client2函数主要功能是创建并配置一个MQTT客户端2(client2),并链接到指定的MQTT服务器。</strong></p>
讯享网代码内容与mqtt_client1类似,此处不再复述。</p>
<img src="https://file1.elecfans.com/web2/M00/0B/B6/wKgaomcoijiAL7X5AAaQbBlzmSw284.png" alt="wKgaomcoijiAL7X5AAaQbBlzmSw284.png" /><img src="https://file1.elecfans.com/web2/M00/0B/B6/wKgaomcoikeATLJOAAGQR8g1arM680.png" alt="wKgaomcoikeATLJOAAGQR8g1arM680.png" /></p>
讯享网<strong>5)此sys.taskInit为主task函数</strong></p>
函数主要功能是初始化刚才那两个MQTT客户端,确保它们能够成功连接到服务器,并进行周期性的发布消息以实现与服务器的通信。代码中还进行了设备联网检查及库的兼容性验证,确保在合适环境下运行。</p>
讯享网具体步骤包括:</p>
使用sys.waitUn<u>ti</u>l让系统等待网络连接就绪;</p>
讯享网使用mobile.imei()获取模块IMEI号后赋值给device_id作为设备ID;</p>
代码检查是否存在有可用的MQTT库。若不存在,进入一个无限循环,每秒打印一个日志信息,告知用户未找到MQTT库;</p>
讯享网分别启动两个MQTT客户端,并等待与服务器成功连接的确认;</p>
设定要发布的数据及qos(服务质量)等级,qos为1表示消息至少会被传递一次;</p>
讯享网使用一个无限循环,每隔3秒检查MQTT客户端是否准备好,并发送带有时间戳的数据到指定的主题。</p>
<img src="https://file1.elecfans.com/web2/M00/0B/B6/wKgaomcoilqAYBx-AATAQk43uwI392.png" alt="wKgaomcoilqAYBx-AATAQk43uwI392.png" /><img src="https://file1.elecfans.com/web2/M00/0A/CD/wKgZomcoinaAd5hDAAQDdPOAtuY176.png" alt="wKgZomcoinaAd5hDAAQDdPOAtuY176.png" /></p>
讯享网<strong>6)此sys.taskInit的主要功能是,每隔3秒打印一次Lua程序和<u>操作系统</u>的内存使用情况。</strong></p>
<img src="https://file1.elecfans.com/web1/M00/F4/45/wKgaoWcoioeAOmDnAAF6MWTzxfA453.png" alt="wKgaoWcoioeAOmDnAAF6MWTzxfA453.png" /></p>
讯享网<strong>3.3 示例效果</strong></p>
<strong>Client 1:</strong></p>
讯享网<img src="https://file1.elecfans.com/web1/M00/F4/46/wKgZoWcoipeAMJ6fAAQSby1tmzc347.png" alt="wKgZoWcoipeAMJ6fAAQSby1tmzc347.png" /></p>
<strong>Client 2:</strong></p>
讯享网<img src="https://file1.elecfans.com/web2/M00/0A/CD/wKgZomcoiqOAVLOmAAQhfRO2eBo546.png" alt="wKgZomcoiqOAVLOmAAQhfRO2eBo546.png" /></p>
<strong>4. MQTT SSL不带证书链接示例</strong></p>
讯享网<strong>4.1 main.lua说明</strong></p>
在main.lua中我们需要调用ssl_mqtt,代码参考如下:</p>
讯享网<img src="https://file1.elecfans.com/web2/M00/0A/CD/wKgZomcoireAIlm4AARZ4qSkhow252.png" alt="wKgZomcoireAIlm4AARZ4qSkhow252.png" /></p>
<strong>4.2 ssl_mqtt.lua说明</strong></p>
讯享网<strong>1)在代码开头部分,根据自己的服务器修改对应参数。</strong></p>
<strong>特别注意:</strong></p>
讯享网MQTT SSL不带证书链接与带证书链接为同一个文件,我们本节教程是MQTT SSL不带证书链接,<strong>因此要将mqtt_isssl的值改为true ,</strong>大家可自行参考下方代码进行修改。</p>
<img src="https://file1.elecfans.com/web1/M00/F4/46/wKgZoWcoisWACuXrAAVrAL3L.png" alt="wKgZoWcoisWACuXrAAVrAL3L.png" /></p>
讯享网2)其余代码部分就与MQTT单链接示例中的single_mqtt.lua 代码相同,同样为避免重复信息过多,影响阅读感受,大家可转到上文<strong>2.2 single_mqtt.lua说明</strong>进行了解。</p>
<strong>4.3 示例效果</strong></p>
讯享网<img src="https://file1.elecfans.com/web1/M00/F4/45/wKgaoWcoitWAbyFuAAQl5uFymEo526.png" alt="wKgaoWcoitWAbyFuAAQl5uFymEo526.png" /></p>
<strong>5. MQTT SSL带证书链接示例</strong></p>
讯享网<strong>5.1 main.lua说明</strong></p>
在main.lua中我们依旧需要调用ssl_mqtt,代码参考如下:</p>
讯享网<img src="https://file1.elecfans.com/web1/M00/F4/45/wKgaoWcoiumAIMyoAARYwCdVhUA726.png" alt="wKgaoWcoiumAIMyoAARYwCdVhUA726.png" /></p>
<strong>5.2 ssl_mqtt.lua说明</strong></p>
讯享网1)在代码开头部分,依旧需要大家根据自己的服务器进行修改对应参数。</p>
不过需要注意的是,本次是使用MQTT SSL带证书链接,所以需要将mqtt_isssl的值改为table;</p>
讯享网另外需要注意的是,既然是带证书链接,那么肯定是需要准备好证书文件了,大家在使用自己的服务器时,一定要准备好对应的证书文件才行,证书文件建议直接放在 LuatOS-Air201demomqtt 文件夹下,证书文件路径根据代码中示例自行修改。</p>
在烧录时,要将证书文件作为脚本文件一同烧录到模组中。详细烧录教程,大家可自行参考:<br /> https://docs.openluat.com/Luatools/</p>
讯享网<img src="https://file1.elecfans.com/web1/M00/F4/46/wKgZoWcoiwyAYYS4AAW0G-oPHrI718.png" alt="wKgZoWcoiwyAYYS4AAW0G-oPHrI718.png" /></p>
2)其余代码部分就与MQTT单链接示例中的single_mqtt.lua代码相同,为避免重复信息过多,影响阅读感受,大家可转到上文</p>
讯享网<strong>2.2 single_mqtt.lua说明</strong></p>
进行了解。</p>
讯享网<strong>5.3 示例效果</strong></p>
<img src="https://file1.elecfans.com/web1/M00/F4/46/wKgZoWcoixGAJuucAAPrP5vaGyE501.png" alt="wKgZoWcoixGAJuucAAPrP5vaGyE501.png" /></p>
讯享网今天的分享就到这</p>
欢迎关注<br /><br /> 审核编辑 黄宇</p>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/184116.html