Example 48: Modbus soil sensor
About 4 min
Example 48: Modbus soil 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.
示例48:Modbus 土壤传感器
实验概述
通过 Modbus RTU 协议读取 RS485 土壤传感器数据,监测土壤温度、湿度和电导率(EC)。适用于智能农业、大棚种植、花卉养护等精准灌溉场景。
硬件接线
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) | 差分信号负 |
土壤传感器通常需要 12-24V DC 供电(红线=VCC,黑线=GND),探针部分防水可埋入土壤。
JSON 配置示例
土壤三合一传感器(温度+湿度+EC)
{
"id": "modbus_soil",
"name": "土壤传感器",
"type": 1,
"enabled": false,
"pins": [16, 17],
"params": {
"baudRate": 4800,
"dataBits": 8,
"parity": "none",
"stopBits": 1,
"dePin": 4,
"protocol": "modbus_rtu",
"slaveId": 1,
"function": 3,
"startRegister": 0,
"registerCount": 3,
"interval": 10000,
"dataMap": [
{ "register": 0, "name": "soil_moisture", "scale": 0.1, "unit": "%" },
{ "register": 1, "name": "soil_temperature", "scale": 0.1, "unit": "°C" },
{ "register": 2, "name": "soil_ec", "scale": 1, "unit": "μS/cm" }
]
}
}土壤五合一传感器(温度+湿度+EC+pH+氮磷钾)
{
"id": "modbus_soil5",
"name": "土壤五合一",
"type": 1,
"enabled": false,
"pins": [16, 17],
"params": {
"baudRate": 4800,
"dataBits": 8,
"parity": "none",
"stopBits": 1,
"dePin": 4,
"protocol": "modbus_rtu",
"slaveId": 2,
"function": 3,
"startRegister": 0,
"registerCount": 7,
"interval": 10000,
"dataMap": [
{ "register": 0, "name": "moisture", "scale": 0.1, "unit": "%" },
{ "register": 1, "name": "temperature", "scale": 0.1, "unit": "°C" },
{ "register": 2, "name": "ec", "scale": 1, "unit": "μS/cm" },
{ "register": 3, "name": "ph", "scale": 0.01, "unit": "" },
{ "register": 4, "name": "nitrogen", "scale": 1, "unit": "mg/kg" },
{ "register": 5, "name": "phosphorus", "scale": 1, "unit": "mg/kg" },
{ "register": 6, "name": "potassium", "scale": 1, "unit": "mg/kg" }
]
}
}参数说明
| 参数 | 说明 |
|---|---|
| baudRate | 土壤传感器常见波特率为 4800(也有 9600 的) |
| soil_moisture | 土壤体积含水率(0-100%) |
| soil_temperature | 土壤温度(-40~80°C) |
| soil_ec | 土壤电导率(0-20000 μS/cm) |
| ph | 酸碱度(3.0-9.0) |
数据上报
传感器数据通过 MQTT 上报:
[{"id": "modbus_soil", "value": "soil_moisture:45.3,soil_temperature:22.1,soil_ec:120"}]外设执行联动
场晦1:土壤湿度低自动灌溉(轮询触发)
功能:土壤湿度低于30%时自动灌溉1分钟
Web界面配置步骤
步骤1:确保已配置外设
- 土壤传感器:
modbus_soil - Modbus继电器:
modbus_relay(控制灌溉阀门)
步骤2:创建规则
- 点击左侧菜单 外设配置 → 切换到 外设执行管理 标签
- 点击 新增规则 按钮
- 填写基础配置:
- 规则名称:
自动灌溉 - 上报数据:✅ 启用
- 启用:✅ 启用
- 规则名称:
步骤3:配置触发器(轮询触发)
点击 添加触发 按钮
填写触发器配置:
字段 填写内容 说明 触发类型 选择 轮询触发 定时检测条件 目标外设 选择 modbus_soil土壤传感器 数据字段 soil_moisture土壤湿度 运算符 <小于 阈值 3030% 轮询间隔 1000010秒
步骤4:配置动作(需要3个动作)
动作1:打开灌溉阀门
- 点击 添加动作 按钮
- 填写:
- 动作类型:选择 Modbus写入
- 目标外设:选择
modbus_relay - 寄存器:
1(CH2) - 值:
65280(闭合)
动作2:延时1分钟
- 再次点击 添加动作 按钮
- 填写:
- 动作类型:选择 延时
- 延时时间:
60000(60000ms=1分钟)
动作3:关闭灌溉阀门
第三次点击 添加动作 按钮
填写:
- 动作类型:选择 Modbus写入
- 目标外设:选择
modbus_relay - 寄存器:
1(CH2) - 值:
0(断开)
点击 保存 按钮
场晦2:土壤数据显示(定时触发)
功能:定时在OLED上显示土壤数据
配置步骤:
- 创建规则,名称:
显示土壤数据 - 触发器配置:
- 触发类型:选择 定时触发
- 间隔时间:
10000(10秒)
- 动作配置(需要2个动作):
- 动作1:选择 传感器读取,目标
modbus_soil - 动作2:选择 显示控制,目标
oled1,模板:Soil Monitor M:{modbus_soil.soil_moisture}% T:{modbus_soil.soil_temperature}C EC:{modbus_soil.soil_ec}
- 动作1:选择 传感器读取,目标
- 点击 保存
注意事项
- 波特率:土壤传感器常见 4800bps,与其他 9600 设备共线时需统一
- 埋入深度:探针埋入深度影响读数,一般建议 10-20cm(作物根系区)
- 防水性:探针防水但接线端不防水,户外安装需做好防水处理
- 校准:出厂已校准,但长期使用后精度下降,建议定期对比校准
- 采样间隔:土壤参数变化缓慢,interval 设为 10000-30000ms 即可
- 多点监测:大面积种植建议布设多个传感器(不同从站地址),获取全面数据
