Example 45: Modbus temperature and humidity sensor
About 3 min
Example 45: Modbus temperature and humidity sensor
Synchronized Device Documentation
This page corresponds to the synchronized Chinese source. Commands, JSON examples, API paths, field names, and screenshots are kept aligned with the Chinese device-side source documentation.
What This Page Covers
- Overview
- Wiring
- JSON Configuration Example
- Data Reporting
- PeriphExec Linkage
- Notes
Source Reference
The detailed operational source is preserved below so implementation details stay exact while the English navigation, titles, and reading path remain available.
示例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 建议使用屏蔽双绞线
