前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >04-STM32+W5500+AIR202基本控制篇-功能2-Android和微信小程序使用MulticastBind绑定W5500,并通过MQTT实现485,422通信和继电器控制(微信小程序)

04-STM32+W5500+AIR202基本控制篇-功能2-Android和微信小程序使用MulticastBind绑定W5500,并通过MQTT实现485,422通信和继电器控制(微信小程序)

作者头像
杨奉武
发布2020-07-23 10:23:36
1K0
发布2020-07-23 10:23:36
举报
文章被收录于专栏:知识分享知识分享

功能说明

这节的功能是使用微信小程序绑定W5500,然后和W5500实现MQTT远程通信控制

关于这节的绑定方式:MulticastBind

MulticastBind 是组播绑定的意思

微信小程序和W5500通过组播交换数据,实现绑定

但是实现起来并没有那么轻松,W5500内部协议栈做的不够好,组播模式下只能自己解析tcp/ip数据!!!

功能演示

1.根据第一节的硬件介绍下载单片机程序

2.程序文件hex路径

3.使用微信开发工具打开微信小程序

4.编译 ->预览 

然后用微信扫描二维码安装到手机

5,按照下面方式短接通信端口

 电脑串口 连接 STM32串口1  (注:单片机的串口1作为了Debug端口)

 422/485 连接 STM32串口3

6.连接网线(网线另一端连接可以上网的路由器或者交换机)

7.连接485/422通信模块(任选一种即可,下面说明两种接线方式)

485连接方式:

422连接方式:

8,打开串口调试助手,分别监控STM32串口1和485/422的数据

单片机串口1监听配置

485/422通信口串口配置

开始测试

1.长按开发板 PB5(图示①)按钮大约3S   ,直至指示灯快闪(图示②)

2.点击微信小程序下方的添加设备按钮

3.选择 以太网设备

4.点击绑定设备

5.绑定成功以后,将在主页上显示一个设备

6.点击设备进入控制页面

控制页面有设备状态检测和两路继电器通信控制

7.控制两路继电器

单片机程序说明

1.关于W5500和微信小程序MQTT通信

W5500连接MQTT以后

订阅的主题:user/W5500的mac地址

发布的主题:device/W5500的mac地址

如果想让微信小程序和W5500之间实现通信

微信小程序需要

订阅: device/W5500的mac地址

发布: user/W5500的mac地址

所以只要微信小程序获取到W5500的MAC地址即可!

2.关于MulticastBind协议

1. APP/微信小程序向固定广播地址 224.1.1.1  端口号 5558  发送信息 :"{"data":"bind","msg":"hello"}"

2. 单片机利用组播接收到  "{"data":"bind","msg":"hello"}"以后,解析客户端 IP地址和端口号

3.使用UDP发送自身的IP地址和MAC地址给APP/微信小程序

"{"data":"bind","ip":"0.0.0.0","mac":"XX:XX:XX:XX:XX:XX"}"

4.微信小程序接收到以后,即实现了和w5500绑定

3.单片机程序是在功能1的基础上增加了MulticastBind 绑定程序 和 simip 以太网解析程序

4.用户长按3S执行 启动 MulticastBind

5.MulticastBindStart 函数主要是初始化,设置要传输给APP/微信小程序的IP,mac信息

6.MulticastBindLoop 是绑定通信函数

 1.此函数里面开了两个UDP

其中一个udp作为组播通信,另一个udp作为普通udp

组播通信的udp获取到app/微信小程序发来的消息以后,解析处理对方的IP地址和端口号

然后用普通的udp通信把w5500的ip地址和mac地址信息发送给app/微信小程序

 2.为什么需要开两个udp

组播模式下的udp,发送数据的时候不会按照你自己设置的ip和端口号发送数据

无论你怎么设置,消息都是发往组播地址!!!!!这是W5500官方固件应该去优化的地方!

3.解析对方的ip地址和端口号是我自己写的解析程序,取名为smallip

原因:组播模式下的udp官方固件是获取不到对方的ip地址和端口号的

获取到的是组播地址和组播端口号,组播地址和端口号都是用户自己写在程序里面固定的,获取这个没啥子用!!!

这也应该是W5500官方应该去优化的地方!

本来一开始我移植了lwip用于解析,后来想了想就因为解析这一点点信息,不至于,所以自己写了一个程序用于解析

7.优化了一下MQTT继电器消息处理程序

统一了解析方式,便于扩展控制多路继电器

微信小程序

1.点击绑定按钮

每隔1S向组播地址发送  "{"data":"bind","msg":"hello"}" 数据

 2.绑定成功,携带着数据跳转到index

提示:数据格式 

{"data":"bind","mac":"xx:xx:xx:xx:xx:xx","ip":"xxx.xxx.xxx.xxx","model":"E0000","name":"以太网设备"}

3.在 onLoad 中提取数据,并存储到手机

4.微信小程序调用完onLoad 会再调用 onShow

在onShow里面把每个设备的数据提取到 ArrayListClientId 数组

然后把每个设备在页面显示的名字放到  ArrayListShowName 数组

5.点击设备

根据型号加载不同的页面,没有型号或其他错误加载ControlDevice页面

提示携带的数据为:

{"data":"bind","mac":"xx:xx:xx:xx:xx:xx","ip":"xxx.xxx.xxx.xxx","model":"E0000","name":"以太网设备"}

6.在控制页面的onLoad提取mac,在onShow订阅主题

7.接收处理消息

8.发布消息

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 功能说明
  • 功能演示
  • 开始测试
  • 单片机程序说明
  • 微信小程序
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档