1. 项目概述
在农业现代化进程中,温室大棚的环境监测与控制一直是提升作物产量和品质的关键环节。传统的人工巡检方式效率低下,而基于STM32的远程监控系统正好能解决这一痛点。这个项目通过嵌入式硬件采集环境参数,结合无线通信技术实现远程监控,为现代设施农业提供了一套低成本、高可靠性的解决方案。
我去年为本地一家草莓种植基地部署了类似的系统,实测将人工巡检工作量减少了70%,异常响应速度提升至分钟级。系统稳定运行一年来,草莓产量提高了15%,糖度平均增加2度,农户反馈非常实用。下面我就详细拆解这个系统的技术实现方案。
2. 系统架构设计
2.1 整体框架
系统采用三层架构设计:
- 感知层:STM32F103C8T6最小系统板作为主控,连接各类传感器
- 传输层:ESP8266 WiFi模块负责数据上传
- 应用层:自主开发的微信小程序作为监控终端
这种架构的优势在于:
- 硬件成本控制在200元以内
- 部署简单,无需复杂布线
- 用户通过手机即可随时查看数据
2.2 硬件选型解析
主控芯片:
选择STM32F103C8T6(蓝色pill开发板)主要考虑:
- 72MHz主频足够处理传感器数据
- 64KB Flash满足程序存储需求
- 丰富的GPIO和ADC接口
- 成熟的生态和开发工具链
传感器配置:
| 传感器类型 | 型号 | 测量范围 | 精度 | 接口方式 |
|---|---|---|---|---|
| 温湿度 | DHT22 | -40~80℃/0~100%RH | ±0.5℃/±2%RH | 单总线 |
| 光照强度 | BH1750 | 1-65535 lux | ±20% | I2C |
| 土壤湿度 | 电容式 | 0-100% | ±3% | ADC |
| CO2浓度 | MH-Z19 | 0-5000ppm | ±50ppm | UART |
注意:DHT22在高温高湿环境下可能出现冷凝问题,建议安装在通风良好的位置,与植物保持30cm以上距离。
3. 硬件电路设计
3.1 电源方案
系统采用12V/2A直流电源输入,通过两级转换:
- LM2596降压至5V(给ESP8266供电)
- AMS1117-3.3V稳压(给STM32和传感器供电)
关键设计要点:
- 在每路电源入口添加100μF电解电容+0.1μF陶瓷电容滤波
- 数字和模拟部分电源用磁珠隔离
- 预留测试点方便检修
3.2 传感器接口电路
DHT22连接方案:
code复制VCC -- 3.3V
DATA -- PB12 + 4.7K上拉电阻
GND -- GND
BH1750配置:
- 地址引脚接地(I2C地址0x23)
- SCL接PB6,SDA接PB7
- 板载0.1μF去耦电容
ADC采样优化:
- 土壤湿度传感器信号经RC滤波(R=10K,C=0.1μF)
- 采用DMA方式采集,避免阻塞主程序
- 定期进行基准电压校准
4. 软件实现
4.1 嵌入式程序架构
采用前后台系统设计:
c复制void main() {
hardware_init();
wifi_connect();
while(1) {
read_sensors();
process_data();
send_to_server();
delay_ms(5000);
}
}
关键模块:
- 传感器驱动:封装各传感器的读写接口
- 数据缓存:环形缓冲区存储最近10组数据
- 异常检测:阈值判断+变化率监测
- 看门狗:独立看门狗+IWDG双重保护
4.2 通信协议设计
自定义轻量级JSON协议:
json复制{
"dev_id":"GH001",
"temp":25.6,
"humi":62,
"lux":4500,
"soil":38,
"co2":850,
"rssi":-65
}
传输优化策略:
- 数据压缩(将浮点数放大100倍转为整数)
- 异常数据立即上报,正常数据5分钟间隔
- 支持断网缓存(Flash存储最多100条记录)
5. 云端服务搭建
5.1 服务器选型
采用腾讯云基础配置:
- 1核2G云服务器(CentOS 7.6)
- MySQL 5.7数据库
- Node.js后端服务
数据库表设计:
sql复制CREATE TABLE sensor_data (
id INT AUTO_INCREMENT,
dev_id VARCHAR(16),
temp FLOAT,
humi FLOAT,
lux INT,
soil INT,
co2 INT,
rssi INT,
time DATETIME,
PRIMARY KEY(id)
);
5.2 API接口实现
主要接口:
/api/upload- 接收设备数据(POST)/api/query- 历史数据查询(GET)/api/alert- 异常告警推送(WebSocket)
安全措施:
- HTTPS加密传输
- 设备ID+动态token双重认证
- 请求频率限制(60次/分钟)
6. 微信小程序开发
6.1 前端界面设计
主要功能页:
- 实时监测页:仪表盘形式展示当前数据
- 历史曲线页:支持按小时/日/周查看趋势
- 告警记录页:分类显示各类异常事件
- 设置页:调整告警阈值和推送方式
技术要点:
- 使用ECharts绘制动态曲线
- WebSocket实现实时更新
- 本地缓存最近24小时数据
6.2 关键代码示例
数据解析函数:
javascript复制function parseData(raw) {
return {
temp: raw.temp / 100,
humi: raw.humi / 100,
lux: raw.lux,
soil: raw.soil,
co2: raw.co2,
time: new Date(raw.timestamp * 1000)
};
}
7. 系统部署与调试
7.1 现场安装要点
-
设备布局:
- 主控箱距地面1.2-1.5米
- 温湿度传感器避开阳光直射
- CO2传感器离作物顶端30cm
- 土壤探头插入深度5-8cm
-
网络配置:
- 确保WiFi信号强度≥-70dBm
- 设置静态IP避免DHCP变更
- 启用NTP时间同步
7.2 校准流程
-
温湿度传感器:
- 与标准水银温度计对比
- 使用饱和盐溶液校准湿度
-
土壤湿度:
- 完全干燥状态记录ADC最小值
- 浸水状态记录ADC最大值
- 线性插值计算百分比
8. 常见问题排查
8.1 典型故障处理
| 故障现象 | 可能原因 | 解决方案 |
|---|---|---|
| 数据上传失败 | WiFi断开 | 检查天线连接,增强信号 |
| 温度读数异常 | 传感器受潮 | 更换位置,加装防护罩 |
| 土壤数据波动 | 探头氧化 | 定期清洁,涂抹凡士林 |
| 系统频繁重启 | 电源不足 | 检查12V输入电流 |
8.2 调试技巧
-
使用串口打印运行日志:
c复制printf("[%s] temp=%.1f humi=%.1f\r\n", get_time(), temp, humi); -
利用LED指示灯:
- 常亮:系统正常
- 慢闪:网络连接中
- 快闪:数据发送中
-
在线模拟测试工具:
- 用Postman模拟设备上传
- MySQL Workbench直接查询数据
9. 系统优化方向
-
能耗优化:
- 增加太阳能供电
- 采用低功耗模式(STM32 STOP模式)
-
功能扩展:
- 增加摄像头监控
- 集成自动灌溉控制
- 添加病虫害预警模型
-
数据分析:
- 建立作物生长模型
- 预测产量和成熟期
- 优化环境参数组合
实际部署中发现,早晨揭帘前后温湿度变化剧烈,建议在这个时段将采样间隔缩短至1分钟,并设置更严格的异常阈值。另外,不同作物对环境的需求差异很大,需要根据具体品种调整参数设置方案。