本文主要是介绍402-STM32F407+ESP8266基本控制篇(阿里云物联网平台)-微信小程序使用APUConfig配网绑定ESP8266并通过阿里云物联网平台实现远程通信控制,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ZLIOTE_STM32F407/ESP8266/aliyun.html" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
<iframe frameborder="0" height="1500" name="ifd" scrolling="auto" src="https://mnifdv.cn/resource/cnblogs/ZLIOTE_STM32F407/ESP8266/aliyun.html" width="100%"></iframe>
说明
这一节实现微信小程序使用APUConfig配网绑定模组并通过阿里云物联网平台实现远程通信控制.
概要:
APP和单片机设备分别作为设备以动态注册方式连接阿里云物联网平台,然后通过规则引擎实现APP和设备之间通信.
此节教程是前面所有知识点的整合,希望用户按部就班的学习了前面的内容,然后再学习此节.
测试准备
1.打开这节的微信小程序工程和单片机工程(单片机程序是上节的工程,如果已经下载了,不用重复下载)
![](/upload/202205/10/202205101101517729.png)
2.在微信小程序平台上设置域名白名单(推荐)
![](/upload/202205/10/202205101101528750.png)
域名为自己设备连接的MQTT服务器的IP地址:
wss://{productKey} .iot-as-mqtt.{Region} .aliyuncs.com
我的productKey为: a1m7er1nJbQ
我的Region地区为: cn-shanghai
所以; wss://a1m7er1nJbQ.iot-as-mqtt.cn-shanghai.aliyuncs.com
注意:设置完成以后重启一下微信开发工具
![](/upload/202205/10/202205101101539780.png)
3.如果不设置域名白名单也可以在软件上选择忽略校验域名
![](/upload/202205/10/202205101101553382.png)
4.登录自己的云平台
注:选择哪个产品,设备就会注册到哪个产品下
![](/upload/202205/10/202205101101564458.png)
5,查看并替换自己产品的ProductSecret; ProductKey; (单片机程序里面和android程序里面都需要替换)
![](/upload/202205/10/202205101101579184.png)
![](/upload/202205/10/202205101101588633.png)
![](/upload/202205/10/202205101102032891.png)
4,查看并替换自己instanceId
提示:在2021年7月30日之前购买的实例是没有 instanceId 的, 程序里面可保持空
![](/upload/202205/10/202205101102040913.png)
提示:有 instanceId 的, 填写上实例的 instanceId
![](/upload/202205/10/202205101102046416.png)
![](/upload/202205/10/202205101102066687.png)
![](https://www.www.zyiz.net/i/l/?n=20&i=blog/819239/202112/819239-20211226183802345-433445193.png)
配置规则引擎
1.规则引擎 ,云产品流转,创建规则
![](/upload/202205/10/202205101102087471.png)
![](/upload/202205/10/202205101102088730.png)
2.选择编写 SQL
![](/upload/202205/10/202205101102089985.png)
![](/upload/202205/10/202205101102091255.png)
3.添加操作
![](/upload/202205/10/202205101102092505.png)
4.注意①自己填写 ${TargetDevice}
![](/upload/202205/10/202205101102093770.png)
5.启动规则
![](/upload/202205/10/202205101102095166.png)
![](/upload/202205/10/202205101102096574.png)
![](/upload/202205/10/202205101102097656.png)
测试
1.点击编译预览,微信扫码把微信小程序安装到手机
![](/upload/202205/10/202205101102098932.png)
2.运行会弹出注册页面.
注:这个步骤是让微信小程序在物联网平台上注册个设备,让微信小程序接入云平台.
设备的名字做成了需要用户去填写,用户如果做产品的话可以用用户的手机号替代.
![](/upload/202205/10/202205101102100337.png)
3.填写 222222(随意哈) 后点击 注册设备
![](/upload/202205/10/202205101102101475.png)
4.注册成功将会跳转到主页
![](/upload/202205/10/202205101102102744.png)
4.在平台上可以看到在相应的产品下面注册了设备
![](/upload/202205/10/202205101102103683.png)
5.点击添加设备
![](/upload/202205/10/202205101102104947.png)
6.添加WiFi设备
![](/upload/202205/10/202205101102106047.png)
7.手机连接自家的路由器,输入自家路由器密码
![](/upload/202205/10/202205101102107153.png)
8.重新编译下载单片机程序以后, 长按开发板上面的单片机按键引脚大约3S,直至指示灯快闪
![](/upload/202205/10/202205101102112041.png)
9.点击 APP 绑定设备按钮
![](/upload/202205/10/202205101102113472.png)
10,绑定成功以后自动跳转到主页面,并添加了一个设备
![](/upload/202205/10/202205101102114566.png)
11.点击设备进入设备控制页面
![](/upload/202205/10/202205101102115674.png)
![](/upload/202205/10/202205101102118203.png)
12.在物联网平台上刷新一下设备列表,也会看到单片机注册了一个新设备
![](https://www.www.zyiz.net/i/l/?n=20&i=blog/819239/202010/819239-20201010160153450-1302524770.png)
整体通信流程说明
1.通信流程详细说明
APP和单片机各自作为阿里云的设备接入阿里云服务器.
APP接入的名字为用户注册时填写的名字;
单片机接入的名字为模组的MAC;
APP 添加设备的时候添加的模组的MAC
假设APP注册的设备的名字为: 111111
假设模组的MAC为: 00:00:00:00:00:00
APP发布的主题: /a1m7er1nJbQ/111111/user/update
APP发布的消息为: {"TargetDevice":"00:00:00:00:00:00","DeviceName":"111111","data":"switch","status":"1"} (以控制继电器吸合的数据为例子)
注:
TargetDevice 字段的值是APP扫码添加的设备的名字
DeviceName 字段的值是APP本身设备的名字.
这个主题发给云平台以后,经过了转发规则里面的SQL语句
![](/upload/202205/10/202205101102120786.png)
注: /a1m7er1nJbQ/+/user/update (里面的 + 代表任意)
APP发布的主题为 /a1m7er1nJbQ/111111/user/update 符合咱设置的规则.规则便会提取这个主题里面的消息.
然后下面的配置是对提取的消息进行操作
![](/upload/202205/10/202205101102122041.png)
发布到另一个 Topic /a1kalhdMH2Z/${TargetDevice}/user/get
${TargetDevice}意思是提取消息里面字段为 TargetDevice 的字段值,然后替换上面的 ${TargetDevice}
咱的消息是 {"TargetDevice":"00:00:00:00:00:00","DeviceName":"111111","data":"switch","status":"1"}
所以最终消息转发给下面的主题(也就是单片机订阅的主题)
/a1m7er1nJbQ/00:00:00:00:00:00/user/get
然后单片机就收到了消息 {"TargetDevice":"00:00:00:00:00:00","DeviceName":"111111","data":"switch","status":"1"}
单片机接收到消息以后,提取 "DeviceName":"111111"
然后用自己的发布主题发布消息
发布的主题: /a1m7er1nJbQ/00:00:00:00:00:00/user/update
发布的消息: {"TargetDevice":"111111","DeviceName":"00:00:00:00:00:00","data":"switch","status":"1"}
TargetDevice 字段的值改为了 111111
DeviceName 字段的值为单片机设备的名字 00:00:00:00:00:00
消息发给了服务器,然后经过转发规则,同理 ,消息便会转发给了APP
最后APP 提取消息里面的数据,就完成了通信
单片机程序说明
单片机程序就是前面的动态注册, 规则引擎 的结合
APP和设备通信使用的是自定义主题.
单片机程序是在 在阿里云物联网平台上一型一密动态注册设备(STM32F407+ESP8266)
基础上增加了订阅自定义的主题, 还有就是在接收回调函数里面接收并处理数据.
具体大家伙看前面的程序(希望用户按部就班的学习!做技术别想着走捷径哈)
1.连接成功之后订阅主题
![](/upload/202205/10/202205101102123335.png)
2.在MQTT回调函数里面接收处理和返回消息
![](/upload/202205/10/202205101102124738.png)
![](/upload/202205/10/202205101102126631.png)
微信小程序程序说明
1.如果微信小程序没有注册,跳转到注册设备页面
![](/upload/202205/10/202205101102127953.png)
2.点击按钮注册设备,并把注册信息存储以后跳转到主页面
![](/upload/202205/10/202205101102129364.png)
3.注册以后,内部的MQTT会自动连接
![](/upload/202205/10/202205101102130591.png)
![](/upload/202205/10/202205101102131714.png)
4.点击添加设备,进入添加设备页面
![](/upload/202205/10/202205101102132978.png)
5.点击添加WiFi设备按钮跳转到绑定页面
![](/upload/202205/10/202205101102134229.png)
6,接收到模组返回的mac地址数据,携带着数据跳转到index
![](/upload/202205/10/202205101102135493.png)
7.在index把接收的数据存储起来
![](/upload/202205/10/202205101102136745.png)
8.在onShow显示数据
![](/upload/202205/10/202205101102137691.png)
9.点击设备,携带着提取点击的设备名字跳转到控制页面
![](/upload/202205/10/202205101102138961.png)
10.使用productKey和deviceName,并拼接其自定义的主题; 使用传递过来的设备名称来拼接各种数据指令
![](/upload/202205/10/202205101102140523.png)
11.微信小程序订阅自身的自定义主题
![](/upload/202205/10/202205101102141929.png)
![](/upload/202205/10/202205101102143042.png)
12.定时请求设备数据
![](/upload/202205/10/202205101102144292.png)
13.点击按钮发送控制继电器指令
![](/upload/202205/10/202205101102145557.png)
14.接收数据
![](/upload/202205/10/202205101102147134.png)
![](/upload/202205/10/202205101102148384.png)
细节说明
1.微信小程序每隔一段时间发送查询继电器状态和查询温湿度数据
如果发送完查询命令之后设备返回了数据,则设备在线
如果在下次查询时,设备上次没有返回数据,则认为设备离线
![](/upload/202205/10/202205101102149648.png)
![](/upload/202205/10/202205101102150913.png)
2.建议用户优化的问题
现在是每隔一段时间查询继电器状态会出现一个问题: (假设是控制继电器吸合)
如果刚刚发送了查询继电器状态,然后用户突然点击了控制继电器的按键,
这样子的话会发送了一个查询和一个控制指令给设备, 设备会先返回继电器状态(继电器是断开状态)
设备呢再返回控制状态(继电器吸合状态)
所以就会发现APP那个按键先变为吸合状态,然后又变为断开状态, 然后又变为吸合状态.
建议用户查询继电器状态的时候呢,只要查询上了继电器状态就不要去查询了.
但是呢又来个问题, 如果是多个人使用APP控制设备继电器呢?
我这边不去查询的话,又不能知道设备的真实状态了, 咱需要让设备主动上报才可以.
那么就需要单片机去记录所有的APP设备名称, 发送数据的时候呢,
轮训把消息发送给每个控制过自己的APP.
但是呢,单片机不能无限的去记录各个APP的名称, 咱希望的是有限的记录, 并且可以对这些APP进行等级排序
经常控制设备的APP呢就把它记录到前面, 不经常甚至是太久远的呢可以自动去丢弃掉.
为此我设计了一套缓存
https://www.cnblogs.com/yangfengwu/p/14164215.html
实现的话大家伙去实现吧, 现在程序里面之所以没加上是为了便于大家入门
这篇关于402-STM32F407+ESP8266基本控制篇(阿里云物联网平台)-微信小程序使用APUConfig配网绑定ESP8266并通过阿里云物联网平台实现远程通信控制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!