Example 47: Modbus relay module control
About 4 min
Example 47: Modbus relay module control
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
- Hardware purpose, wiring requirements, and firmware edition notes.
- Peripheral configuration fields and JSON examples.
- Validation steps, PeriphExec linkage, and field-operation 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.
示例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)布线需保持安全距离
