应用使用 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。该示例代码尚未烧录到真实硬件验收。
联调顺序
- 核对 ID、波特率 / topic 与换行,先用串口工具检查真实设备输出。
- 启动自有 Broker 与桥接,检查连接及消息投递,禁用控制与采样 retained。
- 建档、选择设备、连接;确认首次数据来自设备。
- 发错 ID、旧请求、非数值、越界、半帧,检查不会写入有效采样。
- 断线和停止设备回复,检查 15 秒超时、离线和设备本地限时。
- 重启应用核对记录,导出 CSV 并检查真实字段。
扫码添加客服咨询