RS485与MQTT透传示例

一、目标

将 RS485 电表(dds1079)的数据,通过网关转换为 MQTT 消息,上报到 MQTT 服务器,用户在电脑上的 MQTT 客户端就能看到电表数据。
涉及设备
  • 网关开发板(内置 RS485 与以太网接口,运行网关程序)

  • RS485 电表 dds1079(或等效设备)

  • 客户电脑(用于网页配置 + MQTT 客户端)

  • MQTT 服务器(可以是公网的 broker.emqx.io,也可以是客户自建)

二、设备连接

RS485连接
  1. 准备一根 RS485 通讯线 (A/B 两芯,或差分线)。

  2. 将 RS485 接线端子与网关的 RS485 接口对应连接:

  • 电表 A ↔ 网关 A2

  • 电表 B ↔ 网关 B2

  • 电表GND↔ 网关GND

  1. 确认电表和网关都上电正常:

  • 电表显示屏/指示灯正常;

  • 网关电源指示灯、RUN 指示灯正常。

RS485与MQTT透传示例1.png

三、网口连接

ETH1 – WAN: DHCP
BR0 – LAN: 192.168.9.1
BR0 (ETH2, WLAN0, WLAN1)
  1. 先通过网线将主机和开发板连接,通过静态ip,192.168.137.81进入网址首页找到MAC地址并记住。

RS485与MQTT透传示例2.png
这里的MAC地址是C6:72:27:3C:73:E1
  1. 进入主机cmd命令端,输入命令arp -a | find /i “c6-72-27-3c-73-e1”来找到

RS485与MQTT透传示例3.png
  1. 在网站中输入命令端进入网页

三、网页配置

进入左侧配置编辑,当前界面可以对配置文件进行修改,Device 是设备,UART 是串口,MQTT 是服务器 ,三者通过 object/interface 串起来”。

设备列表配置

参数说明

  • interface (接口名称)

    • 含义 :该采集任务的唯一识别名。

    • 说明 :建议设置为设备型号或安装位置(如 dds1079 ),方便在日志和数据平台中区分不同的设备。

  • status (启用状态)

    • 含义 :该任务的开关。

    • 说明 :设置为 enabled 表示立即开始采集;设置为 disabled 表示暂时停止该任务。

  • command (采集指令)

    • 含义 :发送给物理设备的原始指令报文。

    • 说明 :通常为十六进制格式(Hex)。例如,图中是一串读取电表数据的 Modbus 或 DL/T 645 协议指令。

  • period (采集周期)

    • 含义 :两次采集之间的时间间隔。

    • 说明 :单位为 毫秒 。例如设置为 1000 表示每隔 1 秒钟向设备发送一次指令。

  • action (处理动作)

    • 含义 :获取到设备回传数据后的处理方式。

    • 说明 :常用 forward (转发),表示将采集到的原始数据直接转发给服务器或云平台。

  • object (物理端口)

    • 含义 :指令通过哪个硬件接口发出去。

    • 说明 :例如 uart2 代表开发板上的第 2 个串口(通常对应板子上的 RS485 接口)。

  • format (数据格式)

    • 含义 :通信时使用的数据编码形式。

    • 说明 : hex 代表十六进制(工业设备最常用);也可以根据需求配置为 string (字符串)或 json 。

示例:

本次示例按照图中配置
RS485与MQTT透传示例4.png

串口列表配置

参数说明

  • interface (接口名称)

    • 含义 :该串口配置的内部识别名。

    • 说明 :通常命名为 uart1 、 uart2 等,用于在其他配置中引用此串口。

  • status (启用状态)

    • 含义 :是否激活该串口。

    • 说明 : enabled 为开启, disabled 为关闭。若不使用该串口,建议关闭以节省资源。

  • device (设备路径)

    • 含义 :硬件串口在 Linux 系统中的物理地址。

    • 说明 :例如 /dev/ttyS1 。这直接对应开发板上的某个物理接线端子,通常无需用户修改。

  • baud_rate (波特率)

    • 含义 :串口通信的传输速率。

    • 说明 :必须与连接的外部设备一致。常见值有 9600 、 115200 等。

  • data_bits / stop_bits / parity (数据位/停止位/校验位)

    • 含义 :串口通信的基础底层协议参数。

    • 说明 :工业标准通常为 8 位数据位、 1 位停止位、 none (无)校验。需根据外部设备手册进行匹配。

  • flow_control (流控)

    • 含义 :数据传输的流量控制方式。

    • 说明 :通常设置为 none 。除非设备明确要求硬件或软件流控,否则不建议开启。

  • udelay (微秒延迟)

    • 含义 :串口读写操作后的强制等待时间。

    • 说明 :单位为 微秒 。用于适配一些响应较慢的老旧工业设备,通常设置为 0 。

  • action / object (处理动作/转发对象)

    • 含义 :串口收到数据后的去向。

    • 说明 :例如 action 为 forward , object 为 server1 ,表示串口收到的所有原始数据都会立即转发给配置好的服务器。

  • format (数据格式)

    • 含义 :数据的表现形式。

    • 说明 : string 代表文本字符串形式, hex 代表十六进制原始字节。

RS485与MQTT透传示例5.png

示例

本次使用uart2接口,设备路径为图ttyS6,具体配置如图所示
RS485与MQTT透传示例6.png

MQTT列表配置

参数说明

  • interface (接口名称)

    • 含义 :该 MQTT 连接的唯一识别名。

    • 说明 :用于区分不同的云平台连接(如 mqtt1 、 mqtt2 )。

  • status (启用状态)

    • 含义 :是否开启此 MQTT 连接。

    • 说明 :设置为 enabled 后,开发板会尝试连接云端服务器。

  • serverURL (服务器地址)

    • 含义 :MQTT 服务器(Broker)的域名或 IP 地址。

    • 说明 :例如 broker.emqx.io 。这是数据上报的目的地。

  • clientId (客户端 ID)

    • 含义 :开发板在云端的“身份证号”。

    • 说明 :必须保证在同一个服务器上是唯一的,通常用于云平台识别具体的网关设备。

  • username / password (用户名 / 密码)

    • 含义 :连接云平台所需的身份验证凭据。

    • 说明 :如果服务器开启了安全认证,需在此填写正确的账号密码。

  • topic_sub (订阅主题)

    • 含义 :开发板“听”哪个频道。

    • 说明 :开发板会监听此主题,用于接收来自云端的远程控制指令。

  • topic_pub (发布主题)

    • 含义 :开发板“说”哪个频道。

    • 说明 :开发板采集到的所有数据都会通过这个主题发布到云端。

  • payload (测试负载)

    • 含义 :默认的发送内容。

    • 说明 :通常用于心跳包或测试连接是否正常。

  • qos (服务质量)

    • 含义 :消息传输的可靠性等级。

    • 说明 :可选 0 (最多一次)、 1 (至少一次)、 2 (只有一次)。工业场景建议设为 1 。

  • timeout (超时时间)

    • 含义 :网络响应等待时间。

    • 说明 :单位为 毫秒 。在网络环境较差时,可适当调大此值。

  • action / object / format (处理动作 / 转发对象 / 数据格式)

    • 含义 :云端指令下发后的去向。

    • 说明 :例如 action 为 forward , object 为 uart2 , format 为 hex 。这意味着:云端下发的 MQTT 消息会自动转换成十六进制,并从 RS485 串口发给现场设备。

示例

RS485与MQTT透传示例7.png

完成这三个列表的修改后本次示例的网页配置完成,下一步对串口调试工具进行配置

四、电脑

进入串口调试工具
RS485与MQTT透传示例8.png
默认界面如图所示:
RS485与MQTT透传示例9.png
点击左上角图标->工具->自动应答控制,打开右侧工具栏后点击右侧自动应答
RS485与MQTT透传示例10.png
对着右侧空白处点击右键->导入
将电表配置.cfg导入到自动应答中
RS485与MQTT透传示例11.png
导入完成后如图所示:
RS485与MQTT透传示例12.png
随后启动自动应答
RS485与MQTT透传示例13.png
串口设置配置 本次示例串口设置按照图中左侧所示:
RS485与MQTT透传示例14.png
RS485与MQTT透传示例15.png
设置完成后点击启动将接收设置和发送设置都设置成hex
RS485与MQTT透传示例16.png
完成配置开启串口
随后数据日志会有数据输出为完成启动:
RS485与MQTT透传示例17.png
串口调试助手配置完成

MQTT客户端配置

在电脑上安装 MQTT 客户端工具(推荐 MQTTX 或 mosquitto_sub)。
点击左上角添加连接
RS485与MQTT透传示例18.png
使用与网关中 serverURL 一致的 MQTT 服务器信息建立连接:
  • 服务器地址:例如 broker.emqx.io 或客户自建 IP

  • Port: 1883 (若无特殊说明)

  • username/password:可以默认为:admin和public

  • Client ID:一定不要和配置文件中的clientid一致,否则开发板的clientid会被踢掉

点击右上角connect进行连接
可以参考配置编辑中的mqtt列表进行配置。
RS485与MQTT透传示例19.png
RS485与MQTT透传示例20.png
完成连接后点击添加订阅,可以参考配置文件的topic进行编辑。
本次示例:
如果你想看网关上传的数据(电表读数)
MQTTX 的 Topic 框里填: emqx/my_gw/shsadl_645_ack
如果你想看网关接收到的指令
MQTTX 的 Topic 框里填: emqx/my_gw/shsadl_645_req
按照之前已经完成的mqtt列表的配置来填
RS485与MQTT透传示例21.png
最推荐的填法(全通配符)
如果你想同时看到上面两种数据,直接填: emqx/my_gw/#
RS485与MQTT透传示例22.png
RS485与MQTT透传示例23.png
完成订阅后可以查看mqtt订阅端就配置完成了,就会弹出电表数据如图所示。
RS485与MQTT透传示例24.png
注意:开发板启动后会自动执行miot程序。
RS485与MQTT透传示例25.png
如果想终止
输入root进入登录后输入/etc/init.d/S99miot stop
RS485与MQTT透传示例26.png