1. 项目概述:STM32 WiFi远程可视化农业灌溉系统
这个毕业设计项目将传统农业灌溉与现代物联网技术相结合,打造了一套基于STM32微控制器的智能灌溉解决方案。系统通过WiFi模块实现远程监控和数据可视化,能够根据土壤湿度等环境参数自动调节灌溉量,既避免了人工操作的随意性,又解决了传统定时灌溉的水资源浪费问题。
我在实际开发中发现,这类系统在温室大棚、家庭菜园和小型农场等场景特别实用。系统硬件部分采用STM32F103C8T6作为主控芯片,搭配土壤湿度传感器、DHT11温湿度传感器和继电器控制的水泵组成执行端;软件部分则通过ESP8266 WiFi模块将数据上传至云端服务器,用户可以通过网页或手机APP实时查看环境数据和历史曲线,并手动控制灌溉设备。
提示:选择STM32F103C8T6是因为它性价比高,具有丰富的外设接口,足够处理传感器数据和控制逻辑,同时开发资料丰富,非常适合学生项目。
2. 系统设计与核心功能解析
2.1 硬件架构设计
系统硬件采用模块化设计,便于调试和维护。核心部件包括:
- 主控模块:STM32F103C8T6最小系统板,负责数据处理和逻辑控制
- 传感器模块:
- 土壤湿度传感器(电容式,避免电解腐蚀)
- DHT11温湿度传感器(数字输出,接线简单)
- 光照强度传感器(可选BH1750)
- 通信模块:ESP8266-01S WiFi模块,通过AT指令与STM32通信
- 执行模块:5V继电器控制的水泵,带光电隔离保护电路
- 电源模块:12V转5V/3.3V双路输出,为各模块提供稳定电源
我在PCB布局时特别注意将数字电路与模拟电路分区,传感器信号线尽量短,并在电源入口处增加了TVS二极管防止浪涌。实测证明,这种设计能有效降低环境干扰导致的传感器数据跳变。
2.2 软件系统架构
软件部分采用分层架构设计:
code复制应用层:Web界面/手机APP
↑
通信层:MQTT协议 over WiFi
↑
业务层:STM32固件(传感器采集+控制逻辑)
↑
驱动层:硬件外设驱动(ADC、GPIO、UART等)
选择MQTT而非HTTP协议是因为它对嵌入式设备更友好,具有轻量级、低功耗和实时性好的特点。服务器端我使用了Node-RED作为MQTT broker和可视化工具搭建平台,它图形化编程界面降低了开发难度,同时支持快速生成响应式Web界面。
3. 核心功能实现细节
3.1 环境数据采集与处理
土壤湿度采集采用定时触发方式(每5分钟一次),通过STM32的ADC读取传感器电压值。为提高数据准确性,我实现了以下处理策略:
- 滑动平均滤波:连续采集10次数据,去掉最大最小值后取平均
- 温度补偿:根据DHT11的温度数据对土壤湿度读数进行补偿
- 异常检测:当连续3次读数超出合理范围时触发传感器故障报警
ADC配置代码示例(基于HAL库):
c复制void ADC_Config(void)
{
hadc1.Instance = ADC1;
hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
hadc1.Init.ContinuousConvMode = DISABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 1;
HAL_ADC_Init(&hadc1);
ADC_ChannelConfTypeDef sConfig = {0};
sConfig.Channel = ADC_CHANNEL_1;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}
3.2 WiFi通信实现
ESP8266模块通过UART与STM32通信,我设计了一套简单的AT指令交互协议:
-
初始化序列:
- AT+RST(重启模块)
- AT+CWMODE=1(设置为Station模式)
- AT+CWJAP="SSID","password"(连接WiFi)
- AT+CIPSTART="TCP","mqtt.broker.com",1883(连接MQTT服务器)
-
数据发布格式:
json复制{ "deviceID":"farm01", "soilHumidity":45.2, "temperature":26.5, "humidity":60.3, "pumpStatus":0 }
注意:实际项目中应该实现断线重连机制,我在代码中添加了心跳包检测(每30秒发送一次),当连续3次无响应时自动重新初始化WiFi连接。
3.3 灌溉控制逻辑
系统支持三种工作模式:
- 手动模式:用户通过APP直接控制水泵开关
- 自动模式:根据土壤湿度阈值自动控制
- 当湿度<30%:开启灌溉
- 当湿度>60%:停止灌溉
- 定时模式:在设定时间段内按周期灌溉(如每天6:00-8:00,每20分钟灌溉2分钟)
控制逻辑实现代码片段:
c复制void Irrigation_Control(void)
{
static uint32_t lastWateringTime = 0;
uint32_t currentTime = HAL_GetTick();
if(mode == MANUAL_MODE){
HAL_GPIO_Write(PUMP_GPIO_Port, PUMP_Pin, manualState);
}
else if(mode == AUTO_MODE){
if(soilHumidity < 30 && currentTime - lastWateringTime > 300000){
HAL_GPIO_Write(PUMP_GPIO_Port, PUMP_Pin, GPIO_PIN_SET);
lastWateringTime = currentTime;
}
else if(soilHumidity > 60){
HAL_GPIO_Write(PUMP_GPIO_Port, PUMP_Pin, GPIO_PIN_RESET);
}
}
// 定时模式逻辑类似,省略...
}
4. 远程可视化实现
4.1 数据存储与展示
我选择InfluxDB作为时序数据库存储传感器数据,Grafana用于数据可视化。这种组合的优势在于:
- InfluxDB专门为时间序列数据优化,写入和查询效率高
- Grafana提供丰富的图表类型和灵活的仪表盘配置
- 两者都支持Docker部署,便于快速搭建
Grafana仪表盘配置了以下关键面板:
- 实时土壤湿度曲线(5分钟刷新)
- 温湿度历史趋势(24小时)
- 水泵运行状态指示灯
- 今日用水量统计(基于水泵运行时间估算)
4.2 手机APP开发
为方便移动端访问,我使用Flutter开发了跨平台APP,主要功能包括:
- 实时监控页面:显示当前环境数据和设备状态
- 历史数据查询:可按日期选择查看历史曲线
- 控制面板:模式切换和手动控制按钮
- 报警通知:当传感器异常或湿度超限时推送提醒
APP通过WebSocket与服务器通信,确保控制指令的实时性。界面采用Material Design风格,核心页面截图如下:
code复制[主页]
┌─────────────────┐
│ 土壤湿度 45% │
│ 温度 26°C │
│ 湿度 60% │
│ │
│ [自动] [手动] │
│ ○ ● │
│ │
│ [立即灌溉] │
└─────────────────┘
5. 系统优化与问题解决
5.1 低功耗设计
为延长电池供电时的使用时间,我实施了以下优化措施:
-
传感器采样间隔动态调整:
- 白天:每5分钟采样一次
- 夜间:每30分钟采样一次(植物蒸腾作用减弱)
-
WiFi模块节能模式:
- 数据发送后立即进入睡眠模式
- 使用MQTT的遗嘱消息(LWT)处理异常断线
-
STM32低功耗处理:
- 空闲时进入STOP模式
- 使用RTC定时唤醒
- 关闭未使用的外设时钟
5.2 常见问题与解决方案
在实际调试中遇到的典型问题及解决方法:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 土壤湿度读数不稳定 | 传感器接触不良/电源噪声 | 1. 检查探头与土壤接触 2. ADC电源加滤波电容 |
| WiFi频繁断开 | 信号弱/路由器设置问题 | 1. 改用ESP8266-12F(天线更强) 2. 关闭路由器的AP隔离 |
| 水泵不工作 | 继电器驱动电流不足 | 1. 改用MOSFET驱动 2. 增加续流二极管 |
| 数据上传延迟 | MQTT服务器响应慢 | 1. 更换更轻量的broker 2. 减少数据发送频率 |
5.3 论文写作要点
毕业设计论文应包含以下核心章节:
- 绪论:研究背景与意义(节水农业、智慧农业趋势)
- 系统总体设计:功能需求分析、方案对比选择
- 硬件设计:电路原理图、PCB设计、元件选型依据
- 软件设计:程序流程图、关键算法说明
- 系统测试:功能测试数据、性能指标验证
- 总结与展望:创新点总结、可改进方向
写作技巧:多用图表展示系统架构和测试结果,代码部分只展示关键片段,注意格式规范(字体、行距、图标编号等)。我在论文中特别强调了系统的实用性和可扩展性,这是评委比较看重的点。
6. 项目扩展方向
基础功能实现后,可以考虑以下增强功能:
- 多节点组网:通过LoRa实现多个采集节点的数据汇总
- 天气预报集成:根据降雨概率调整灌溉计划
- 植物生长模型:不同生长阶段适配不同的湿度阈值
- 太阳能供电:添加光伏板和锂电池管理电路
- 边缘计算:在STM32上实现简单的AI模型(如异常检测)
硬件上,升级到STM32H7系列可以获得更强的处理能力;软件方面,改用ESP32替代STM32+ESP8266组合可以简化设计,但会牺牲一些灵活性。这些选择需要根据具体应用场景权衡。