zoukankan      html  css  js  c++  java
  • SWA2G422&485JK2G基础篇: STM32+W5500(以太网)实现MQTT通信控制,485/422透传通信

    说明

    这节实现的功能:

      STM32+W5500实现MQTT通信控制,

      通过MQTT调试助手控制开发板两路继电器

      485/422接口输入的数据通过W5500(MQTT) 转发给MQTT调试助手

      MQTT调试助手发送的信息通过W5500(MQTT)转发到485/422接口输出

      细节功能:

      1.DHCP动态获取IP

      2.DNS域名解析

    功能演示

    1.注:根据自己的修改,默认连接我的服务器

    hex文件路径

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

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

     422/485 连接 STM32串口3

     

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

        

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

      4.1: 485连接方式

        

      4.2: 422连接方式

       

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

      5.1: 单片机串口1监听配置

        

        5.2: 485/422通信口串口配置

      

    6,打开MQTT调试助手

        

      

        

        

        根据自己的修改,默认连接我的服务器

        

        

    测试

    1.下载好单片机程序以后看一下串口1打印的信息

    复位下,单片机

    2.根据设备订阅和发布的主题,设置MQTT调试助手订阅和发布的主题

    3.调试助手发送信息

    4. 485/422接口上传数据

    5. 控制开发板两路继电器

    协议规定:

    上位机同时控制两路继电器协议:  "data":"switch":开关指令;  "bit":"1&2":第一路和第二路

    询问两路继电器状态:  {"data":"switch","bit":"1&2","status":"-1"}

    控制两路继电器吸合:  {"data":"switch","bit":"1&2","status":"1&1"}

    控制两路继电器断开:  {"data":"switch","bit":"1&2","status":"0&0"}

    控制第一路吸合,第二路断开:  {"data":"switch","bit":"1&2","status":"1&0"}

    控制第一路断开,第二路吸合:  {"data":"switch","bit":"1&2","status":"0&1"}

    下位机回复两路继电器状态:

    第一路断开,第二路吸合:  {"data":"switch","bit":"1&2","status":"0&1"}

        

    上位机控制一路继电器协议:  "bit":"1":第一路

    询问第一路继电器状态:  {"data":"switch","bit":"1","status":"-1"}

    询问第二路继电器状态:  {"data":"switch","bit":"2","status":"-1"}

    控制第一路继电器吸合:  {"data":"switch","bit":"1","status":"1"}

    控制第二路继电器断开:  {"data":"switch","bit":"2","status":"0"}

    下位机回复两路继电器状态:

    第一路断开  {"data":"switch","bit":"1","status":"0"}

    第二路吸合  {"data":"switch","bit":"2","status":"1"}

    6. 测试

    控制两路继电器吸合

    {"data":"switch","bit":"1&2","status":"1&1"}

    控制两路继电器断开

    {"data":"switch","bit":"1&2","status":"0&0"}

    控制第一路吸合,第二路断开

    {"data":"switch","bit":"1&2","status":"1&0"}

    控制第一路断开,第二路吸合

    {"data":"switch","bit":"1&2","status":"0&1"}

     

     

    程序说明

    1.STM32唯一码作为W5500的MAC地址

    MAC地址的字符串形式作为 MQTT的ClientID

    2.网线状态检测,DHCP 和 DNS解析

    3.连接TCP(MQTT)

    4.订阅主题

    5.接收处理消息

    提示

    程序中打开了3个串口,为保证程序的执行效率,程序中使用了缓存处理

    注:串口1作为日志输出口,为保证全部打印所有的运行日志,发送数据采用的环形队列

    关于缓存管理具体实现请参考:

  • 相关阅读:
    eslint 规则
    我的.eslintrc.js
    shell命令
    .sync 修饰符的理解
    【HNOI 2018】寻宝游戏
    【BZOJ 2820】YY的GCD
    【Luogu P2664】树上游戏
    【HAOI 2012】高速公路
    句摘
    【SCOI 2008】奖励关
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/12940821.html
Copyright © 2011-2022 走看看