Node-RED实战:用node-red-contrib-modbus节点5分钟搞定温湿度传感器数据采集
Node-RED极简实战:5分钟构建Modbus-RTU温湿度监测系统
在工业物联网和智能楼宇领域,温湿度监测是最基础却至关重要的环节。传统的数据采集方案往往需要开发者深入理解串口通信、协议解析和校验算法,而Node-RED配合node-red-contrib-modbus节点彻底改变了这一局面——就像用乐高积木搭建专业级监测系统,无需焊接电路就能实现稳定可靠的数据采集。
1. 环境准备与硬件连接
1.1 硬件选型指南
市面常见的Modbus-RTU温湿度传感器主要分为两类:
- 86型面板式:如海凌科HLK-TH20,安装便捷但探头固定
- 分体探头式:如炜盛科技SHT20系列,探头可分离部署
关键参数对比表:
| 型号 | 测量范围 | 精度 | 供电电压 | 典型价格 |
|---|---|---|---|---|
| HLK-TH20 | -40~80℃,0~100%RH | ±0.5℃/3% | 5-24V DC | ¥120 |
| SHT20-MODBUS | -40~125℃,0~100%RH | ±0.3℃/2% | 3.3-5.5V | ¥85 |
提示:工业场景建议选择24V供电型号,抗干扰能力更强
1.2 接线实战
以最普遍的RS485接线为例:
- 使用双绞线连接传感器A/B端子到转换器
- USB转485转换器接入工控机
- 给传感器单独供电(注意电压匹配)
常见故障排查:
- 通信失败时首先检查终端电阻(120Ω)
- 长距离传输需增加485中继器
- 接地环路问题会导致数据异常
# Linux下查看串口设备 ls /dev/ttyUSB*2. Node-RED环境配置
2.1 核心组件安装
通过npm一键获取所需模块:
npm install -g node-red npm install node-red-contrib-modbus npm install node-red-dashboard2.2 串口参数配置
在Modbus客户端节点中需设置:
- 波特率:9600/19200/38400(需与传感器一致)
- 数据位/停止位:通常8N1
- 响应超时:建议2000ms以上
典型配置代码片段:
{ "type": "modbus-client", "clienttype": "serial", "serialPort": "/dev/ttyUSB0", "serialBaudrate": "9600", "serialDatabits": "8", "serialStopbits": "1" }3. Modbus节点深度配置
3.1 寄存器地址映射
以某型号温湿度传感器为例:
| 寄存器地址 | 数据类型 | 说明 | 换算公式 |
|---|---|---|---|
| 0x0000 | INT16 | 温度原始值 | 实际值×0.1 |
| 0x0001 | UINT16 | 湿度原始值 | 实际值×0.1 |
| 0x1000 | UINT32 | 设备序列号 | 直接读取 |
3.2 功能码选择技巧
- FC3:最常用的读取保持寄存器
- FC4:读取输入寄存器(只读)
- FC16:批量写入寄存器
配置示例:
// 读取温湿度的sequencer配置 { "name": "readTH", "unitid": 1, "fc": "FC3", "address": "0", "quantity": "2" }4. 数据流构建与优化
4.1 完整流结构设计
典型数据处理流程:
- Modbus读取节点(定时触发)
- 数据转换函数节点
- Dashboard图表输出
- MQTT发布节点
# 数据转换函数示例 def convert_modbus(msg): if len(msg.payload) >= 2: msg.temperature = msg.payload[0] * 0.1 msg.humidity = msg.payload[1] * 0.1 msg.payload = { "ts": Date.now(), "temp": round(msg.temperature,1), "humi": round(msg.humidity,1) } return msg4.2 性能优化技巧
- 使用批处理模式减少请求次数
- 设置合理的轮询间隔(通常5-10秒)
- 启用Modbus节点的缓存功能
- 重要数据添加异常检测逻辑
注意:避免同时发起过多请求,可能导致从设备响应超时
5. 高级应用场景拓展
5.1 多设备组网方案
通过修改Unit ID实现设备轮询:
// 动态设置设备地址 msg.unitid = flow.get("currentDevice") || 1; flow.set("currentDevice", msg.unitid % 32 + 1); return msg;5.2 数据持久化方案
推荐组合:
- InfluxDB + Grafana:专业时序数据分析
- SQLite:轻量级本地存储
- CSV文件:快速导出备份
配置示例:
{ "type": "influxdb out", "host": "127.0.0.1", "port": "8086", "dbname": "sensor_data", "measurement": "environment" }在实际机房监控项目中,这套方案成功替代了原有的SCADA系统,将部署时间从3天缩短到2小时。特别是当需要临时增加监测点时,只需复制节点修改地址即可,这种灵活性在应急场景中表现出色。
