专栏首页知识分享SWA2G422&485JK2G基础篇: STM32+W5500(以太网)实现MQTT通信控制,485/422透传通信

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作为日志输出口,为保证全部打印所有的运行日志,发送数据采用的环形队列

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • WIFI网络(ESP8266)升级STM32: STM32使用http下载程序文件,乒乓升级方式,支持程序回滚,支持MQTT通信控制 (WIFI模块AT,TCP透传方式)

        如果有更新标志位,STM32控制WIFI模块以TCP方式连接Web服务器,然后发送Get 协议获取程序文件,写入Flash后,重启!

    杨奉武
  • SWA2G422&485JK2G基础篇: STM32+W5500实现MQTT通信控制,485/422透传通信

        如果使用域名连接,则会经过DHCP->DNS->TCP连接->MQTT连接通信

    杨奉武
  • ESP8266 LUA脚本语言开发: 测试下诱人的程序

      实现的功能,APP通过SmartConfig给Wi-Fi模块配网并绑定设备,然后通过MQTT远程控制开发板的继电器,

    杨奉武
  • Jump Start Bootstrap 第1章

    Bootstrap是一个前端框架,可以帮助开发者启动网页开发的过程;从后端转前端的(Java、PHP等)开发者可能很难把握CSS和JavaScript;但是,使...

    Remember_Ray
  • python 关于epoll的学习

          在linux中,默认情况下所有的socket都是blocking;当 用户进程调用了recvfrom这个系统调用,kernel就开始了IO的第一个阶...

    py3study
  • TKE上搭建集群Dashboard

    如果需要将TKE的信息展示给多个部门的人查看,但是又不想让他们通过控制台查看,这边可以搭建一个dashborad用来展示。

    聂小星
  • 使用Chrome对项目进行性能分析

    最近发现一篇关于使用Chrome进行调试和优化的文章,写的特别全面和友好,虽然Chrome版本比较老了,但是和现在的功能基本没有大变化,还是非常...

    用户1428723
  • Python多版本情况下四种快速进入交互式命令行的操作技巧

    因为工作需求或者学习需要等原因,部分小伙伴的电脑中同时安装了Python2和Python3,相信在Python多版本的切换中常常会遇到Python傻傻分不清楚的...

    Python进阶者
  • Python多版本情况下四种快速进入交互式命令行的操作技巧

    信任就像一张纸,皱了,即使抚平,也恢复不了原样了!永远不要去欺骗别人,因为你能骗到的人,都是相信你的人!

    Python进阶者
  • Swift 小心字典Value等于nil(容易出错)

    版权声明:转载请标明出处 https://blog.csdn.net/ZY_FlyWay/article/details/89186333

    ZY_FlyWay

扫码关注云+社区

领取腾讯云代金券