硬件案例:连接、协议与设备端

返回综合应用专题 下载串口 MQTT 桥接与限时控制器示例

应用使用 UTF-8 文本协议,设备 ID 与建档编码完全一致。| 分隔字段;串口与经典蓝牙每帧以换行结束,MQTT 每条消息放一整帧。请求 ID 由应用生成,设备需原样返回。所有数值使用小数点,不附单位。

环境采集与告警

环境采集与告警

MQTT TCP;自有 Broker 主机/IP、端口和账号。设备发布 practical/NODE01/telemetry,retain=false。

ENV|NODE01|1|25.6|61.2

设备 ID、非负递增序号、温度、湿度。有效范围分别为 -40–85°C、0–100%;设备重启归零序号后,重新连接应用以清除旧序号。Broker 掉线只改变连接提示,不制造新采样。

定时浇灌控制台

定时浇灌控制台

MQTT TCP;设备订阅 command,发布 ack。所有命令和确认均禁用 retained。

发送 practical/NODE01/command:SET|NODE01|请求ID|ON|20
收到 practical/NODE01/ack:ACK|NODE01|请求ID|ON|20
停止指令:SET|NODE01|请求ID|OFF|0
停止确认:ACK|NODE01|请求ID|OFF|0

设备先应用输出,再回确认;同一请求 ID 重复送达不可重启计时。设备必须有独立的最长 300 秒停止、重启默认关闭及物理停止手段。应用收到开启确认只证明当时收到确认,不证明随后一直开启;15 秒无确认应视为状态未知。

蓝牙电源巡检

蓝牙电源巡检

系统先配对经典蓝牙 SPP,应用选 MAC 后连接;节点串口固件波特率与模块一致,应用层为 UTF-8。

查询:READ|NODE01|请求ID
回复:MEAS|NODE01|请求ID|12.50|1.20

回复字段为电压 V、电流 A。电压范围 0–60、电流 0–20;设备须实际读取和标定传感器后回复。没有传感器或读取失败时不发送伪值。BLE 不提供这里的 SPP 通道。

串口设备运行记录

串口设备运行记录

Android USB OTG 与兼容 USB 串口芯片,需完成系统授权;允许波特率 9600、19200、38400、57600、115200。

查询:READ|NODE01|请求ID
回复:RUN|NODE01|请求ID|1200|45.0

回复字段为转速 rpm、温度 °C。转速范围 0–100000、温度 -40–150。设备必须使用真实转速输入及温度传感器;换行分片先缓存,再按完整帧匹配请求。

随附设备端工具

mqtt_serial_bridge.py 把真实串口采样转发到 MQTT,或把浇灌指令转发给串口控制器。它不生成测量值,不提前产生 ACK;只有设备串口返回的对应帧才被转发。运行桥接的电脑与手机均需能访问同一个自有 Broker。

python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt
python mqtt_serial_bridge.py --broker YOUR_BROKER --serial /dev/ttyUSB0 --node NODE01 --mode pump

账号可通过 MQTT_USER、MQTT_PASSWORD 环境变量设置。温湿度节点使用 --mode environment,设备端按上文输出实际 ENV 帧。

pump_controller/pump_controller.ino 是 Arduino 串口限时输出示例,默认 NODE01、9600 波特率和 D7 高电平有效。它在开机时关闭输出、限制 1–300 秒、处理重复请求而不延长运行时间;修改输出脚和有效电平后,先断开负载,用指示灯验证 ON/OFF 及超时。实际泵需由匹配的驱动器供电,不能直接接 GPIO。该示例代码尚未烧录到真实硬件验收。

联调顺序

  1. 核对 ID、波特率 / topic 与换行,先用串口工具检查真实设备输出。
  2. 启动自有 Broker 与桥接,检查连接及消息投递,禁用控制与采样 retained。
  3. 建档、选择设备、连接;确认首次数据来自设备。
  4. 发错 ID、旧请求、非数值、越界、半帧,检查不会写入有效采样。
  5. 断线和停止设备回复,检查 15 秒超时、离线和设备本地限时。
  6. 重启应用核对记录,导出 CSV 并检查真实字段。

Paho Python 官方客户端文档 Arduino 官方语言参考 已验证与待验证范围

文档反馈