示例53:Modbus 控制设备配置
大约 2 分钟
示例53:Modbus 控制设备配置
场景概述
通过 Modbus RTU 协议连接外部控制设备(如多路继电器模块、电机控制器、调光器等),实现远程控制和自动化联动。
适用设备
| 设备类型 | 典型型号 | 控制功能 |
|---|---|---|
| 多路继电器 | 4/8/16 路 RS485 继电器 | 通断控制 |
| 电机控制器 | 变频器 RS485 | 转速/方向控制 |
| 调光模块 | 0-10V/PWM RS485 | 灯光亮度调节 |
| 电磁阀 | RS485 比例阀 | 流量控制 |
硬件接线
RS485 接口连接
| ESP32 引脚 | TTL转RS485模块 | 说明 |
|---|---|---|
| GPIO 16 (TX) | TXD | 串口发送 |
| GPIO 17 (RX) | RXD | 串口接收 |
| GPIO 4(可选) | DE/RE | 方向控制(半双工) |
| 3.3V | VCC | 电源 |
| GND | GND | 地 |
控制命令
通过 MQTT 发送控制
控制继电器:
[{"id": "modbus_relay4", "value": "relay1:1,relay2:0"}]控制电机:
[{"id": "modbus_motor", "value": "speed:500,direction:1"}]调节亮度:
[{"id": "modbus_dimmer", "value": "brightness:75"}]通过 Web 界面控制
在外设管理页面可直接操作各控制通道的开关/数值。
与外设执行联动
温度联动继电器(配合传感器场景)
{
"name": "高温开风扇继电器",
"enabled": true,
"triggers": [
{
"type": "poll",
"params": {
"periphId": "modbus_temp_humi",
"field": "temperature",
"operator": ">",
"threshold": 30
}
}
],
"actions": [
{
"type": "modbus_write",
"params": {
"periphId": "modbus_relay4",
"register": 0,
"value": 65280
}
}
]
}定时控制灯光
{
"name": "定时开灯",
"enabled": true,
"triggers": [
{
"type": "timer",
"params": { "cron": "0 18 * * *" }
}
],
"actions": [
{
"type": "modbus_write",
"params": {
"periphId": "modbus_dimmer",
"register": 0,
"value": 80
}
}
]
}按键手动控制
{
"name": "按键控制继电器",
"enabled": true,
"triggers": [
{
"type": "event",
"params": { "periphId": "btn1", "event": "pressed" }
}
],
"actions": [
{
"type": "modbus_write",
"params": {
"periphId": "modbus_relay4",
"register": 0,
"value": 65280
}
}
]
}状态回读
部分控制设备支持状态回读:
{
"id": "modbus_relay4_status",
"name": "继电器状态",
"type": 1,
"enabled": false,
"pins": [16, 17],
"params": {
"protocol": "modbus_rtu",
"slaveId": 10,
"function": 1,
"startRegister": 0,
"registerCount": 4,
"interval": 2000
}
}功能码 1(Read Coils)用于读取线圈状态。
注意事项
- 功能码选择:线圈控制用功能码 5/15,寄存器控制用功能码 6/16
- 写入确认:写入后建议回读状态确认执行成功
- 互锁保护:相反动作(如正转/反转)需设计互锁逻辑,避免同时导通
- 掉电记忆:部分继电器模块支持掉电记忆,重启后恢复上次状态
- 响应超时:控制设备响应较快,超时设置建议 500-1000ms
- 安全联锁:关键设备控制建议添加硬件急停按钮,不完全依赖软件控制
