You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenWRT环境下读取RS485十六进制数据并MQTT发送的脚本需求

解决方案

一、前期准备

  • 安装必要工具:确保OpenWRT已安装mosquitto-client和xxd(xxd用于正确转换十六进制)
    opkg update && opkg install mosquitto-client vim-full
    
  • 配置串口参数:根据你的RS485设备的实际波特率、数据位等参数,用stty命令配置(示例为9600波特率、8位数据位、无停止位、无奇偶校验,需替换为设备实际参数)
    stty -F /dev/rs485 9600 cs8 -cstopb -parenb
    

二、核心脚本实现

创建一个简单的Shell脚本,直接读取串口数据并发送MQTT消息,避免文件读写冲突,同时保证十六进制字节顺序正确:

#!/bin/sh

# 1. 配置串口参数(根据设备实际参数修改波特率等)
stty -F /dev/rs485 9600 cs8 -cstopb -parenb

# 2. 从RS485读取固定8字节数据,直接存入变量(无文件操作)
raw_data=$(dd if=/dev/rs485 bs=1 count=8 2>/dev/null)

# 3. 将原始二进制数据转为正确顺序的十六进制字符串
# -p:输出纯十六进制(无地址、空格);-c 8:按8字节连续输出
hex_data=$(echo -n "$raw_data" | xxd -p -c 8)

# 4. 发送JSON格式的MQTT消息
# 替换<Broker地址>为你的MQTT服务器IP/域名,<消息主题>为实际主题
mosquitto_pub -h <Broker地址> -t <消息主题> -m "{\"data\":\"$hex_data\"}"

三、脚本使用说明

  1. 保存脚本:将上述内容保存为rs485_to_mqtt.sh(比如存放在/root/目录下)
    vi /root/rs485_to_mqtt.sh
    
  2. 添加执行权限:
    chmod +x /root/rs485_to_mqtt.sh
    
  3. 测试运行:直接执行脚本,它会等待设备发送8字节数据,收到后自动发送MQTT消息
    /root/rs485_to_mqtt.sh
    

四、周期性监听优化

如果需要持续监听设备的周期性发送,可以给脚本添加循环,让它一直运行:

#!/bin/sh

# 配置串口参数
stty -F /dev/rs485 9600 cs8 -cstopb -parenb

# 循环监听并发送
while true; do
    raw_data=$(dd if=/dev/rs485 bs=1 count=8 2>/dev/null)
    hex_data=$(echo -n "$raw_data" | xxd -p -c 8)
    mosquitto_pub -h <Broker地址> -t <消息主题> -m "{\"data\":\"$hex_data\"}"
    # 可选:如果需要在两次监听间间隔一段时间,取消下方注释
    # sleep 1
done

运行这个脚本后,它会持续等待设备发送数据,每收到8字节就发送一次MQTT消息。

关键优势

  • 无文件读写:直接将串口数据存入变量,避免文件读写冲突和冗余操作
  • 字节顺序正确:使用xxd替代hexdump,保证十六进制字符串与原始字节顺序一致(如A1不会显示为1A)
  • 符合JSON要求:直接构造合法的JSON格式消息,适配MQTT Broker的要求

内容的提问来源于stack exchange,提问作者francis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 07:16:20