示例45:Modbus 温湿度传感器
大约 3 分钟
示例45:Modbus 温湿度传感器
实验概述
通过 Modbus RTU 协议读取 RS485 温湿度变送器(如 SHT20/SHT30 RS485 型)数据。这是工业环境中最常见的传感器接入方式,适用于大棚、机房、仓库等场景监控。
硬件接线
RS485 通信接线
| ESP32 引脚 | TTL转RS485模块 | 说明 |
|---|---|---|
| GPIO 16 | TXD | 串口发送 |
| GPIO 17 | RXD | 串口接收 |
| GPIO 4(可选) | DE/RE | 方向控制 |
| 3.3V | VCC | 电源 |
| GND | GND | 地 |
RS485 总线到传感器
| RS485 模块 | 温湿度变送器 | 说明 |
|---|---|---|
| A+ | A+ | 差分信号正 |
| B- | B- | 差分信号负 |
总线末端建议接 120Ω 终端电阻;多个设备并联到同一总线,设置不同从站地址。
JSON 配置示例
{
"id": "modbus_th",
"name": "Modbus温湿度传感器",
"type": 1,
"enabled": false,
"pins": [16, 17],
"params": {
"baudRate": 9600,
"dataBits": 8,
"parity": "none",
"stopBits": 1,
"dePin": 4,
"protocol": "modbus_rtu",
"slaveId": 1,
"function": 3,
"startRegister": 0,
"registerCount": 2,
"interval": 5000,
"dataMap": [
{ "register": 0, "name": "temperature", "scale": 0.1, "unit": "°C" },
{ "register": 1, "name": "humidity", "scale": 0.1, "unit": "%" }
]
}
}参数说明
| 参数 | 说明 |
|---|---|
| slaveId | 从站地址(出厂默认通常为 1,可通过拨码或指令修改) |
| function | Modbus 功能码,读保持寄存器为 3 |
| startRegister | 起始寄存器地址(不同厂家可能不同,查手册) |
| registerCount | 读取寄存器数量 |
| interval | 轮询间隔(ms) |
| dataMap | 寄存器到数据字段的映射,scale 为缩放系数 |
数据上报
传感器数据通过 MQTT 上报:
[{"id": "modbus_th", "value": "temperature:25.3,humidity:60.5"}]外设执行联动
场晦1:高温报警(轮询触发)
功能:温度超过35°C时触发蜂鸣器报警
Web界面配置步骤
步骤1:确保已配置蜂鸣器外设
- 外设ID:
buzzer_gpio - 类型:GPIO输出
步骤2:创建规则
- 点击左侧菜单 外设配置 → 切换到 外设执行管理 标签
- 点击 新增规则 按钮
- 填写基础配置:
- 规则名称:
温湿度报警 - 上报数据:✅ 启用
- 启用:✅ 启用
- 规则名称:
步骤3:配置触发器(轮询触发)
点击 添加触发 按钮
填写触发器配置:
字段 填写内容 说明 触发类型 选择 轮询触发 定时检测条件 目标外设 选择 modbus_thModbus温湿度 数据字段 temperature温度字段 运算符 >大于 阈值 3535°C 轮询间隔 50005秒
步骤4:配置动作
点击 添加动作 按钮
填写:
- 动作类型:选择 高电平
- 目标外设:选择
buzzer_gpio
点击 保存 按钮
场晦2:联动OLED显示(定时触发)
功能:定时在OLED上显示温湿度数据
配置步骤:
- 创建规则,名称:
显示温湿度 - 触发器配置:
- 触发类型:选择 定时触发
- 间隔时间:
5000(5秒)
- 动作配置(需要2个动作):
- 动作1:选择 传感器读取,目标
modbus_th - 动作2:选择 显示控制,目标
oled1,模板Temp:{modbus_th.temperature}C\nHumi:{modbus_th.humidity}%
- 动作1:选择 传感器读取,目标
- 点击 保存
注意事项
- 地址确认:使用系统 Modbus 扫描功能确认从站地址,出厂地址可能非 1
- 寄存器格式:不同厂家温度寄存器可能是有符号整数(需 scale=0.1)或浮点数
- 波特率匹配:传感器与 ESP32 波特率必须一致,常见 4800/9600
- 接线极性:A+/B- 不可接反,否则通信失败
- 供电要求:RS485 传感器通常需 12-24V DC 供电,需独立电源
- 总线长度:总线越长抗干扰越差,超过 50m 建议使用屏蔽双绞线
