| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 阿里MQTT物联网平台“云产品流转”实战——两片ESP32通过物联网平台实现远程互操作 -> 正文阅读 |
|
[嵌入式]阿里MQTT物联网平台“云产品流转”实战——两片ESP32通过物联网平台实现远程互操作 |
关键词:阿里,物联网,MQTT,ESP32,ARDUINO,云产品流转。 摘要:本文介绍了阿里MQTT物联网平台关于“规则引擎”中“云产品流转”设置方法,以及利用“云产品流转”消息转发机制,选用两片ESP32,使用ARDUINO软件编程实现MQTT设备远程互连互通。项目包含硬件说明、平台设置、ARDUINO代码及演示资料。 资源下载地址:阿里MQTT物联网平台“云产品流转”实战(设备间远程互操作)-C++文档类资源-CSDN下载 目录 ? ? ? ? 之前写过两篇关于阿里MQTT物联网平台的相关文章,其中有连接阿里MQTT物联网的相关资源,但仅仅是设备与云的连接。可以在平台上进行调试,但还远远没有达到MQTT实用化目的。要想让MQTT真正地实用化,必须进行“设备——云——设备”互连互通。这种互连互通可以是物联网设备与电脑(包括云平台服务)之间的互连互通,也可以是物联网设备与手机之间的互连互通,还可以是两个物联网设备之间的互连互通。而电脑和手机编程涉及到复杂的系统性编程知识,不在本文讨论范围,本文主要使用ARDUINO编程,实现两个物联网设备(两片ESP32)间的互连互通。利用ESP32板载LED和按键,实现远程互操作。即利用A板按键控制B板LED,使用B板按键控制A板LED,并可以互传消息。实现了设备间的数据传输、消息收发、协调控制。是学习阿里MQTT物联网运用的很好的案例。 一、硬件说明:? ? ? ? 某宝购买两片ESP32最小系统板,板载一个LED,一个烧录键,一个复位键,USB电源接口。外加2根USB数据线,将模块用数据线连接到电脑上,既可以方便地烧录程序,又不必另外提供电源,就可以实现本项目的实验了。 二、平台设置。? ? ? ? 平台地址:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台 ? ? ? ? 扫码登陆后,注意上边的站点默认显示为“华东2(上海)”,其站点域名为“cn-shanghai”,如果你选择其他站点,MQTT连接的时候,需要修改站点域名,与其一致。 (一)、创建产品和设备。1、创建产品。? ? ? ? 现在点“公共实例”,如果还没有免费开通,请先开通。 ? ? ? ? 左边导般栏点“设备管理”下的“产品”,然后点“创建产品”进入创建产品设置界面: ? ? ? ? 这里设置“产品名称”:ESP32_1;“所属品类”:自定义品类;“节点类型”:直连设备;其余默认值,点“确认”创建产品成功。 2、创建自定义Topic。? ? ? ? 左边导般栏点“设备管理”下的“产品”,就会在产品列表里看到我们刚创建的产品“ESP32_1”。? ? ? ? 点其后的“查看”,进入“产品详情”设置页面。依次点“Topic 类列表”、“自定义Topic”,然后点“定义Topic类”,进行自定义Topic设置。 ? ? ? ? “设备操作权限”选“发布”;“Topic 类”填“post”;“描述”填“数据上行”,点“确认”完成。 照此方法再建一个自定义Topic。“设备操作权限”选“订阅”;“Topic 类”填“set”;“描述”填“数据下行”。 ? ? ? ? 最后点右上角的“发布”,接下来的界面中三步确认全部打勾,点“发布”完成。(右上角的“发布”变成了“撤消发布”,如果以后要修改产品,需要点右上角的“撤消发布”) 3、创建设备? ? ? ? 左边导航栏点“设备管理”下的“设备”,然后点“添加设备”进入添加设备界面。 ? ? ? ? “产品”列表中选我们刚刚创建的产品“ESP32_1”;“DeviceName”下输入“ESP32_1_0”;“备注名称”里填“第一个设备”,点“确认”,接下来再点“完成”。 ? ? ? ? 至此,我们创建了产品“ESP32_1”,并创建了其设备实例 “ESP32_1_0”。照此方法再建一个产品“ESP32_2”,并创建其设备实例 “ESP32_2_0”。注意两种产品都建立了相同的自定义Topic。(将来设置“云产品流转”需要用到) 4、获取设备密钥(设备三元组信息)? ? ? ? 导航栏点“设备管理”下面的“设备”,点设备列表右边的“查看” ? ? ? ? 上边文字“DeviceSecret”后边显示为几个星号,点其右边的“查看”,如下图,你就得到设备证书信息(三元组)。将其保存好,MQTT连接必须使用这些信息。 这里总结一下,本步骤中需要用到的信息包括五个: (1)、站点域名:“cn-shanghai”。 (2)、自定义Topic。(包括发布Topic: /user/post。订阅Topic:/user/set。) (3)、设备三元组信息(你创建的设备信息与之类似,但不会完全相同。): productKey:a1Ptlr1aTzy deviceName:ESP32_1_0 deviceSecret:193260d46730301dea3874a920fc4c2e (二)、“规则引擎”——“云产品流转”设置。? ? ? ? 为了使两片ESP32模块两两互通,还必须进行消息发布和订阅的流转设置。这里特别强调:阿里MQTT设备实例只能订阅自身的Topic,不能订阅其他设备的Topic,要想收到其他设备发布的消息,必须进行“云产品流转”设置。其实就是消息转发,也就是通过平台将一台设备发布的消息转发到另一设备订阅的Topic上。两台设备消息互通,就必须做双向的发布和订阅的转发规则。 1、创建规则。? ? ? ? 左边导航栏点“规则引擎”下的“云产品流转”,如下图: ? ? ? ? 点“创建规则”,如下图:? ? ? ? 填入规则名称:1TO2,数据格式:JSON,规则描述:设备一发消息给设备二。点“确认”,创建规则成功。 2、“处理数据”设置。? ? ? ? 进入规则设置界面,点“处理数据”栏后面的“编写SQL”,如下图: ? ? ? ? “字段”里输入一个“*”号,表示所有字段;“Topic”选择“自定义”;接下来选产品“ESP32_1”,T选择设备“ESP32_1_0”,Topic余下部分选user/post。点“确认”,生成“规则查询语句”:SELECT * FROM "/a1Ptlr1aTzy/ESP32_1_0/user/post。 3、“转发数据”设置。? ? ? ? 然后,点“转发数据”栏后面的“添加操作”,如下图: ? ? ? ? “选择操作”选“发布到另一个Topic”,“Topic”下选“自定义”,选择产品:“ESP32_2”,选择设备:“ESP32_2_0”,Topic余下部分选user/set。点“确认”完成规则创建。 4、启用规则。? ? ? ? 左侧导航栏点“规则引擎”下的“云产品流转”,你就会看到刚建立的规则:1TO2,其后有个“启动”,点击并“确认”,此条规则生效,就完成了将设备1发布消息转给设备2的设置工作了。 ? ? ? ? 照此方法再建一条规则:2TO1,进行反向消息转发,两设备就可以互连互通了。 ? ? ? ? 至此,平台设置大功告成,就等我们烧写程序,连上平台,进行两设备的远程互操作了。 三、ARDUINO代码编写烧录。1、软件环境搭建。请自行百度完成。这里提供一些关键软件资源,可以参考: (1)ESP32开发环境资源(解决开发板不能下载的问题):ARDUINO编译ESP32开发环境文件。_esp32文件-C++文档类资源-CSDN下载 (2)阿里MQTT连接库及示例代码:ESP32连接阿里云MQTT物联网平台的Arduino支持库及示例代码。_esp32连接阿里云,esp32mqtt阿里云-C++文档类资源-CSDN下载 我之前写的相关文章:《ESP32连接阿里云MQTT物联网平台》ESP32连接阿里云MQTT物联网平台_悟渔的博客-CSDN博客_esp32连接阿里云 2、程序代码。? ? ? ? 虽然本项目只是实现简单的按键传送和LED控制,但实现代码仍然比较长,其中连接阿里MQTT平台的代码封装为一个库:ALIMQTT.C,按键状态机封装为一个库:KEYS.C,ESP32板载资源封装为一个库:ESP32OBJ.C,所有代码为本人参考各种资源,耗费大量时间写成,全部加了中注文释,包括下面要讲到的主程序文件,一并打包。需要的可以下载: 阿里MQTT物联网平台“云产品流转”实战(设备间远程互操作)-C++文档类资源-CSDN下载 主程序说明: ? ? ? ? 引用相关库,建立需要的操作对象:
? ? ? ? mqtt对象负责物联网平台连接和消息收发;keys对象负责处理按键;esp32对象负责WIFI连接,LED控制等。
? ? ? ? 启动过程setup()首先设置串口波特率,注意调试时设置相关软件的波特率,使其一致。然后连接WIFI,注意修改相关信息与你所在环境WIFI一致(如果你不提供WIFI信息,程序将自动转入微信配网模式,你可以使用安信可微信公众号进行配网,从而正确连接WIFI)。然后是MQTT对象信息设置,请使用前面创建的设备相关信息。烧录前确认,两片ESP32要使用不同的信息烧录,如果两片ESP32烧录完全一样,平台会把它们当着一台设备,后者上线将迫使前者下线,就达不到两设备同时在线,互连互通了,切记!紧接着注册回调函数,这里使用了mqtt对象的属性回调注册,可以添加多个回调函数(最多可以达20个,可以进ALIMQTT.C里修改)。注意这里没有订阅Topic代码,因为在ALIMQTT.C文件的连接成功代码里加了自动订阅,你可以进入该文件修改相关代码,使订阅的Topic与你平台添加的自定义Topic保持一致。过程中WIFI连接和MQTT连接会在串口输出相应信息,可以使用串口调试程序观察,便于掌握程序执行情况。保证设备连上WIFI,连上平台。最后初始化按键状态机(本项目使用定时器0设置按键状态机,可以实现按键的单击、双击、三连击、长按等功能)。
? ? ? ? loop()过程里必须加入mqtt.loop();以使MQTT连接保持心跳,如果不加这句,就接收不到消息。keys.getKey();获取按键信息,如果有按键信息,则发送给对方,本项目演示了发送int型数据,发送字符串数据,发送控制指令。mqtt.add()将要发送的消息内容添加到MQTT发送缓冲区,该方法有两个参数,第一个参数表示设备属性,在消息体中表示JSON键值对的键名KEY,第二个参数为发送的数据,在消息体中表示JSON键值。mqtt.send()将发送缓冲区中的内容发布出去。 ? ? ? ? 阿里MQTT物联网平台接收到设备发来的消息,会根据“云产品流转”设置将消息转发出去,订阅该消息的设备就会收到消息。 ? ? ? ? 消息接收成功,就会根据mqtt.addItemCallback()方法注册的回调函数,查询消息体中是否有相应的JSON键,如果有,则会产生回调事件,并将相应键值传给回调函数处理。 本案例注册了三个回调函数:
? ? ? ? mqttCommand()回调函数处理对方发来的字符串指令,根据指令进行相应控制(如复位模块等)。 ? ? ? ? mqttMessage()回调函数处理对方发来的提示信息,将其发送给串行调试软件,以直观检测系统通信处理情况。 ? ? ? ? mqttKeys()回调函数处理对方发来的按键信息,根据按键信息进行相应处理,就像是远程键盘一样。 ? ? ? ? 将下载的两个目录直接复制到ARDUINO程序文件夹下,打开.ino后缀文件(主程序文件),分别编译烧写(注意setup()过程里的注释行,两块ESP32使用不同的设备信息进行烧录)。成功后,两块ESP32都接上USB电源,会看到LED闪烁后常亮,如果使用串行调试助手,会看到串口信息提示WIFI连接情况、MQTT连接情况、消息接收情况。 ? ? ? ? 两块ESP32模块都连接成功,按一下设备上的按键(烧写键),另一设备上的LED灯灭了,再按一下,另一设备上的LED又亮了,反之亦然。如果长按,你就会看到另一设备复位重启,LED灯闪烁,重新连接WIFI,连接阿里MQTT物联网平台…… 总结:本案例成功的关键在阿里MQTT物联网平台的“云产品流转”设置,也就是消息转发设置。目前,平台已经上线新的消息转发处理机制,大家可以使用旧版(就像本文),也可以使用新的消息处理转发机制,平台设备界面里点右上角“体验新版”就可以开启新的旅程了。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 0:52:22- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |