一、项目介绍
本系统是一款基于物联网技术的智能园艺灌溉解决方案,通过STM32G431Rx微控制器作为核心处理器,配合ESP32-MINI-1实现云端连接,实现自动化、智能化的植物养护管理。系统具备精准灌溉控制、电池状态监控、水泵故障检测与自动维护等功能,特别适用于家庭花园、阳台种植等场景。
1.1 硬件介绍
硬件模块 | 型号规格 | 主要功能 |
|---|---|---|
主控制器 | 系统核心处理器,负责数据采集、逻辑控制和通信协调 | |
无线通信模块 | Wi-Fi连接,实现与智能家居平台(如Home Assistant)的数据交互 | |
电源监控模块 | 高精度电流/电压检测,实时监测3串锂电池组状态 | |
降压转换器 | 将锂电池电压(9-12.6V)转换为5V/2A稳定输出,驱动水泵 | |
电流检测模块 | 监测潜水泵工作电流,用于判断水泵状态和故障检测 | |
SWD烧录器 | 实现程序的下载、调试、与串口通信 | |
电源 | 3串锂电池组 | 11.1V标称电压,提供系统所需电力 |
执行器 | 5V直流潜水泵 | 实现灌溉作业的主要执行部件 |
辅助元件 | 继电器模块、水位传感器、土壤湿度传感器 | 系统保护与状态监测 |

上图为本次系统演示使用到的全部功能模块,包含 Make Blocks 1 ~ 6 期设计的全部模块。
1.2 功能概览
功能类别 | 具体功能 | 实现方式 |
|---|---|---|
智能灌溉 | 定时灌溉、土壤湿度触发灌溉 | STM32控制继电器,ESP32接收云端指令 |
电源管理 | 电池电压/电流监控、电量估算 | INA226采集数据,STM32处理分析,并上传数据至智能家居平台 |
故障保护 | 水泵堵塞检测、自动反冲洗 | ACS712监测电流异常,STM32触发反冲洗程序 |
远程监控 | 手机APP/网页控制、状态查看 | ESP32连接MQTT服务器,上传数据至智能家居平台 |
1.3 设计思路
系统采用“感知-决策-执行”的闭环控制架构:
- 感知层:通过多种传感器采集环境数据(土壤湿度)和设备状态(电池电压、水泵电流)
- 决策层:STM32根据预设策略、传感器数据和云端指令综合判断,生成控制指令
- 执行层:控制水泵启停,执行正常灌溉或反冲洗流程
- 通信层:ESP32负责与云端保持双向通信,实现远程监控和控制
二、功能实现
2.1 软件流程图

2.2 实现过程
ESP32通信模块实现
// ESP32配置为STA模式连接家庭Wi-Fi
// 通过AT指令与STM32通信,简化主控编程
void ESP32_Init(void) {
UART_SendString("AT+RST\r\n"); // 重启模块
UART_SendString("AT+CWMODE=1\r\n"); // 设置为STA模式
UART_SendString("AT+CWJAP=\"SSID\",\"PASSWORD\"\r\n"); // 连接Wi-Fi
UART_SendString("AT+MQTTUSERCFG=0,1,\"clientID\",\"username\",\"password\",0,0,\"\"\r\n");
UART_SendString("AT+MQTTCONN=0,\"broker.address\",1883,1\r\n"); // 连接MQTT服务器
UART_SendString("AT+MQTTSUB=0,\"garden/irrigation/cmd\",1\r\n"); // 订阅控制主题
}
电池监控实现现
INA226 INA(0x40, &twoWire); // INA226
// INA 226 初始化
bool inaInitialized = false;
for (int i = 0; i < 5; i++) { // 尝试5次初始化
if(INA.begin()) {
inaInitialized = true;
safeSerialPrintln("INA226 initialized successfully");
INA.setMaxCurrentShunt(5, 0.025);
break;
} else {
safeSerialPrintf("INA226 initialization failed, attempt %d/5\n", i+1);
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
while (1) {
// 读取原始INA226数据
float rawBusVoltage = INA.getBusVoltage();
float rawShuntVoltage = INA.getShuntVoltage_mV();
float rawCurrent_mA = INA.getCurrent_mA();
float rawPower_mW = INA.getPower_mW();
// 应用滤波处理
busVoltage = filterINA226Data(busVoltageBuffer, &ina226BufferIndex, rawBusVoltage, INA226_FILTER_SIZE);
shuntVoltage = filterINA226Data(shuntVoltageBuffer, &ina226BufferIndex, rawShuntVoltage, INA226_FILTER_SIZE);
current_mA = filterINA226Data(currentMaBuffer, &ina226BufferIndex, rawCurrent_mA, INA226_FILTER_SIZE);
power_mW = filterINA226Data(powerMwBuffer, &ina226BufferIndex, rawPower_mW, INA226_FILTER_SIZE);
}
温湿度数据采集
// 初始化DHT11传感器
DHT dht(DHT11_PIN, DHT11); // DHT11传感器初始化
dht.begin();
// 读取DHT11温湿度数据
temperature = dht.readTemperature();
humidity = dht.readHumidity();
水泵控制
// 电机控制任务
void TaskMotorControl(void *pvParameters) {
(void) pvParameters;
// 初始化电机控制引脚
pinMode(D5, OUTPUT);
pinMode(D6, OUTPUT);
digitalWrite(D5, HIGH);
digitalWrite(D6, HIGH);
while (1) {
if (motorDirection) {
// 正转:D6输出低电平,D5输出PWM
digitalWrite(D6, LOW);
analogWrite(D5, motorSpeed);
} else {
// 反转:D5输出低电平,D6输出PWM
digitalWrite(D5, LOW);
analogWrite(D6, motorSpeed);
}
vTaskDelay(100 / portTICK_PERIOD_MS); // 100ms刷新一次
}
}
三、功能展示
系统工作状态

正常灌溉模式
- 土壤湿度低于阈值或定时触发
- 水泵以正常电流范围(80-120mA)工作
- 电池状态实时监控并显示
- 灌溉时长根据设置自动控制

故障检测与处理
- 当水泵电流持续超过180mA时,系统判定为堵塞
- 自动触发反冲洗流程,无需人工干预
- 反冲洗过程状态实时上报云端

四、总结
项目成果
本项目成功实现了一套完整的智能园艺灌溉系统,具备以下特点:
- 智能化程度高:实现了基于土壤湿度、定时计划和远程控制的多模式灌溉策略
- 可靠性强:通过多级保护机制(低压保护、过流保护、堵塞检测)确保系统稳定运行
- 维护便捷:自动反冲洗功能显著减少了水泵维护需求
- 用户体验好:通过智能家居平台提供直观的远程监控和控制界面
- 节能环保:精细化的灌溉控制和低功耗设计,有效节约水资源和电能
技术亮点
- 采用STM32G431Rx与ESP32-MINI-1组合,兼顾了实时控制与网络连接需求
- INA226高精度电量监测,实现准确的电池状态评估
- ACS712实时电流监测,创新的堵塞检测与自动维护机制
- 模块化设计,便于功能扩展和维护升级
改进方向
- 功能扩展:增加更多环境传感器(温度、光照)实现更智能的灌溉策略
- 节能优化:进一步优化低功耗策略,延长电池续航时间
- 水源管理:集成水位传感器,实现自动补水功能
- 数据分析:增加历史数据记录与分析,提供灌溉优化建议
- 机械结构:设计防水外壳和标准化接口,提升户外耐用性
应用前景
本系统不仅适用于家庭园艺,稍加改造后可扩展至农业大棚、城市绿化、高尔夫球场等场景。通过云平台的集中管理,可实现对分布式灌溉系统的规模化智能控制,具有良好的市场应用前景和推广价值。
遇到的问题
- 演示时不小心短路将INA226模块烧毁,导致无法测量电流和功率,电压显示也偏低了很多。
- 手上没有合适的水泵,也因天气寒冷,使用了一个减速电机代替进行功能测试。
- ACS712测量小电流时的零漂有点大,导致测量到的电流比实际值大了一些。另外使用ACS712原本是可以测量交流水泵的电流的,只因主控芯片的ADC量程是3.3V,因此只能使用直流电机进行代替。