1. 项目概述:当农业遇上物联网
去年帮学弟调试这个系统时,我们蹲在试验田边啃着西瓜等数据回传的场景至今难忘。这个基于STM32的智能灌溉系统,本质上是通过WiFi把田间地头的传感器数据变成手机上的曲线图,再让水泵根据这些数据自动干活。相比传统农业"看天浇水"的粗放模式,这套系统能精准控制每株作物的水肥供给——比如当土壤湿度低于25%时立即启动滴灌,同时把报警信息推送到农户微信。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构设计解析
2.1 硬件选型背后的考量
主控选用STM32F103C8T6不是偶然,这款被称为"蓝色药丸"的开发板在性能和成本间取得了完美平衡。72MHz主频足够处理多路传感器数据,而它的USART接口恰好匹配ESP8266的通信需求。在河南某草莓大棚实测中,我们对比发现CH340G串口芯片的稳定性明显优于CP2102,特别是在高温高湿环境下。
传感器阵列的搭配颇有讲究:
- 土壤湿度传感器用YL-69而非更贵的TDR-315,因后者对土壤盐碱度敏感
- DHT22温湿度传感器要悬空安装在遮阳罩下,避免直射导致读数偏高
- 光照强度传感器BH1750的FOV角度需调整到120°,以覆盖典型植株冠层
2.2 通信协议的精妙设计
在ESP8266的固件选择上,经过三个版本的迭代最终锁定ATv2.2.0。这个版本在TCP长连接稳定性上表现突出,实测连续工作72小时无断连。数据传输采用自定义的轻量级协议:
code复制[HEAD][LEN][CMD][DATA][CRC]
其中DATA段用JSON格式封装传感器读数,例如:
json复制{
"soil": 27.3,
"temp": 32.5,
"humi": 65.2,
"lux": 4500
}
关键技巧:每个数据包限制在128字节内,避免WiFi模块缓冲区溢出
3. 核心功能实现细节
3.1 传感器数据采集优化
ADC采样采用了滑动窗口滤波算法,这是解决土壤传感器波动大的关键。在STM32中实现的伪代码如下:
c复制#define WINDOW_SIZE 5
int adc_filter(int new_val) {
static int buffer[WINDOW_SIZE];
static int inde
