示例47:Modbus 继电器模块控制
大约 4 分钟
示例47:Modbus 继电器模块控制
实验概述
通过 Modbus RTU 协议控制 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 | 差分信号负 |
继电器模块通常需 12V/24V DC 供电,触点支持 AC 250V/10A 或 DC 30V/10A。
JSON 配置示例
4 路继电器控制
{
"id": "modbus_relay",
"name": "4路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": 5,
"startRegister": 0,
"registerCount": 4,
"interval": 0,
"controlMap": [
{ "register": 0, "name": "ch1", "onValue": 65280, "offValue": 0 },
{ "register": 1, "name": "ch2", "onValue": 65280, "offValue": 0 },
{ "register": 2, "name": "ch3", "onValue": 65280, "offValue": 0 },
{ "register": 3, "name": "ch4", "onValue": 65280, "offValue": 0 }
]
}
}继电器状态回读
{
"id": "modbus_relay_status",
"name": "继电器状态",
"type": 1,
"enabled": false,
"pins": [16, 17],
"params": {
"protocol": "modbus_rtu",
"slaveId": 1,
"function": 1,
"startRegister": 0,
"registerCount": 4,
"interval": 2000,
"dataMap": [
{ "register": 0, "name": "ch1_state", "scale": 1 },
{ "register": 1, "name": "ch2_state", "scale": 1 },
{ "register": 2, "name": "ch3_state", "scale": 1 },
{ "register": 3, "name": "ch4_state", "scale": 1 }
]
}
}参数说明
| 参数 | 说明 |
|---|---|
| function 5 | 写单个线圈(Write Single Coil) |
| function 1 | 读线圈状态(Read Coils) |
| onValue | 线圈闭合值:0xFF00 = 65280 |
| offValue | 线圈断开值:0x0000 = 0 |
控制命令
通过 MQTT 控制继电器:
[{"id": "modbus_relay", "value": "ch1:1,ch2:0,ch3:1,ch4:0"}]1= 闭合(ON)0= 断开(OFF)
外设执行联动
场晦1:温度联动风扇(轮询触发)
功能:温度超过30°C时打开风扇(继电器CH1)
Web界面配置步骤
步骤1:确保已配置外设
- Modbus温湿度:
modbus_th - Modbus继电器:
modbus_relay
步骤2:创建规则
- 点击左侧菜单 外设配置 → 切换到 外设执行管理 标签
- 点击 新增规则 按钮
- 填写基础配置:
- 规则名称:
高温开风扇 - 上报数据:✅ 启用
- 启用:✅ 启用
- 规则名称:
步骤3:配置触发器(轮询触发)
点击 添加触发 按钮
填写触发器配置:
字段 填写内容 说明 触发类型 选择 轮询触发 定时检测条件 目标外设 选择 modbus_thModbus温湿度 数据字段 temperature温度字段 运算符 >大于 阈值 3030°C 轮询间隔 50005秒
步骤4:配置动作(Modbus写入)
点击 添加动作 按钮
填写:
- 动作类型:选择 Modbus写入
- 目标外设:选择
modbus_relay - 寄存器:
0(CH1) - 值:
65280(闭合)
点击 保存 按钮
场晦2:定时灌溉(定时触发)
功能:每天早上6点打开灌溉阀门5分钟
配置步骤:
- 创建规则,名称:
定时灌溉 - 触发器配置:
- 触发类型:选择 定时触发
- 定时模式:选择 Cron表达式
- Cron:
0 6 * * *(每天6:00)
- 动作配置(需要3个动作):
- 动作1:选择 Modbus写入,寄存器
1(CH2),值65280(打开) - 动作2:选择 延时,时间
300000(5分钟) - 动作3:选择 Modbus写入,寄存器
1(CH2),值0(关闭)
- 动作1:选择 Modbus写入,寄存器
- 点击 保存
典型应用场景
| 场景 | 接法 | 说明 |
|---|---|---|
| 灯光控制 | 常开触点串联灯具 | 闭合=开灯 |
| 风扇控制 | 常开触点串联风扇 | 温控自动 |
| 电磁阀 | 常开触点串联阀门 | 灌溉/通风 |
| 加热器 | 常开触点串联加热片 | 低温加热 |
注意事项
- 触点容量:继电器触点有最大电流限制,大功率负载需加接触器
- 反向电动势:控制电感负载(电机/电磁阀)时,负载侧需加续流二极管
- 掉电状态:断电后继电器默认断开,如需保持状态需选择带锁存的型号
- 操作频率:机械继电器寿命约 10 万次,频繁开关建议使用固态继电器
- 从站地址:多个继电器模块在同一总线时,确保地址不冲突
- 安全距离:强电(220V AC)与弱电(RS485)布线需保持安全距离
