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

    <p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/STM32W5500AIR202A/" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

    功能说明

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

    关于这节的绑定方式:MulticastBind

    MulticastBind 是组播绑定的意思

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

    功能演示

    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用于解析,后来想了想就因为解析这一点点信息,不至于,所以自己写了一个程序用于解析

    微信小程序

    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.点击设备

    根据型号加载不同的页面,没有型号或其他错误加载ControlDevice页面
    提示携带的数据为:
    {"data":"bind","mac":"xx:xx:xx:xx:xx:xx","ip":"xxx.xxx.xxx.xxx","model":"E0000","name":"以太网设备"}

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

    7.接收处理消息

    8.发布消息

    结语

    对于初学者而言,此节代码测试一下通信即可,后面的章节会有详细的说明教程

    会让用户彻底明白一切的一切是怎么来的!

    不要心慌,无需着急!

    详细的说明教程过后还会有专门的移植使用教程.

    用户可以迅速的移植到自己的项目中使用.

  • 相关阅读:
    Django(app的概念、ORM介绍及编码错误问题)
    Django(完整的登录示例、render字符串替换和redirect跳转)
    Construct Binary Tree from Preorder and Inorder Traversal
    Single Number II
    Single Number
    Binary Tree Level Order Traversal II
    Binary Tree Level Order Traversal
    Binary Tree Zigzag Level Order Traversal
    Recover Binary Search Tree
    Add Binary
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/13354819.html
Copyright © 2011-2022 走看看