1. 项目背景与核心需求
在农业现代化进程中,温室大棚的环境监测一直是精细化管理的关键环节。传统的人工巡检方式不仅效率低下,而且难以实现24小时不间断监控。基于STM32的多路温室监测系统,正是为解决这一痛点而设计的实用方案。
这个项目的核心价值在于:
- 采用高性价比的STM32微控制器作为主控
- 同时采集4路温湿度数据(可扩展至更多路)
- 通过OLED屏实现数据本地可视化
- 系统结构简单,适合电子爱好者复现
我曾在多个农业科技项目中实际应用过类似方案,实测证明这种架构在中小型温室中完全够用,成本可以控制在百元以内,比商业传感器网络便宜一个数量级。
2. 硬件选型与电路设计
2.1 主控芯片选择
STM32F103C8T6是最佳选择,原因有三:
- 内置12位ADC,满足温湿度精度要求
- 多达37个GPIO,轻松扩展4路传感器
- 市场价格约10-15元,性价比极高
注意:购买时认准"正品丝印",市面上存在打磨翻新片,可能导致ADC读数不稳定。
2.2 传感器方案对比
推荐以下两种方案:
-
DHT22单总线方案:
- 优点:集成温湿度测量,接线简单(仅需3线)
- 缺点:刷新速度较慢(2秒/次)
-
SHT30+I2C方案:
- 优点:精度更高(±2%RH),响应快(0.5秒)
- 缺点:需接上拉电阻,布线稍复杂
实测数据对比表:
| 型号 | 测量范围 | 精度 | 采样周期 | 单价 |
|---|---|---|---|---|
| DHT22 | -40~80℃,0~100% | ±0.5℃,±2% | 2s | 15元 |
| SHT30 | -40~125℃,0~100% | ±0.3℃,±2% | 0.5s | 25元 |
2.3 OLED显示模块
建议使用0.96寸SSD1306模块:
- 分辨率128x64,足够显示4路数据
- 支持I2C/SPI接口(推荐I2C节省IO)
- 功耗仅0.08W,适合长期运行
接线示意图:
code复制VCC -- 3.3V
GND -- GND
SCL -- PB6
SDA -- PB7
3. 软件架构设计
3.1 程序流程图
c复制[主循环]
初始化硬件 → 传感器校准 →
┌───────────────┐
│ 读取传感器1 │
│ 读取传感器2 │
│ 读取传感器3 │
│ 读取传感器4 │
└───────────────┘
→ 数据处理 → OLED刷新 → 延时1秒
3.2 关键代码实现
传感器数据读取(以DHT22为例)
c复制#define DHT22_PORT GPIOA
#define DHT22_PIN GPIO_PIN_0
void DHT22_Start(void) {
GPIO_InitTypeDef gpio = {0};
gpio.Pin = DHT22_PIN;
gpio.Mode = GPIO_MODE_OUTPUT_PP;
HAL_GPIO_Init(DHT22_PORT, &gpio);
HAL_GPIO_WritePin(DHT22_PORT, DHT22_PIN, GPIO_PIN_RESET);
delay_ms(18); // 必须大于18ms
HAL_GPIO_WritePin(DHT22_PORT, DHT22_PIN, GPIO_PIN_SET);
delay_us(30);
gpio.Mode = GPIO_MODE_INPUT;
HAL_GPIO_Init(DHT22_PORT, &gpio);
}
OLED显示布局设计
c复制void Show_Data(float temp[], float humi[]) {
OLED_Clear();
OLED_ShowString(0, 0, "GreenHouse Monitor");
for(uint8_t i=0; i<4; i++) {
OLED_ShowString(0, (i+1)*16, "CH");
OLED_ShowNum(24, (i+1)*16, i+1, 1);
OLED_ShowString(36, (i+1)*16, ":");
OLED_ShowNum(42, (i+1)*16, (int)temp[i], 2);
OLED_ShowString(66, (i+1)*16, "C");
OLED_ShowNum(90, (i+1)*16, (int)humi[i], 2);
OLED_ShowString(114, (i+1)*16, "%");
}
}
4. 系统优化与实测心得
4.1 电源稳定性处理
在田间测试时发现的问题:
- 锂电池供电时,电机启动会导致电压跌落
- 传感器出现偶发数据异常
解决方案:
- 在STM32的VDD引脚加装100μF电解电容
- 每个传感器VCC引脚添加0.1μF去耦电容
- 软件增加数据校验机制:
c复制if(temp > 60 || temp < -20 || humi > 100) {
// 丢弃异常数据并重试
}
4.2 防潮处理技巧
大棚内湿度长期>90%,导致:
- 杜邦线接头氧化
- PCB出现凝露
改进措施:
- 所有接点涂抹硅脂
- 主控板用防水盒封装
- 传感器用热缩管包裹,仅露出感应窗口
4.3 数据刷新策略优化
初期直接1秒刷新所有传感器,发现:
- 屏幕闪烁明显
- 偶尔出现数据不同步
最终方案:
- 采用分时采样(每250ms读1路)
- 屏幕每2秒刷新一次
- 增加过渡动画效果
5. 扩展应用方向
本系统可进一步升级为:
- 无线传输版:加装ESP8266模块,数据上传云端
- 自动控制版:连接继电器控制通风/灌溉
- 太阳能供电:搭配18650电池+5W太阳能板
实测在3m×6m的番茄大棚中,使用本系统后:
- 温度波动范围从±5℃降低到±2℃
- 人力巡检频次减少70%
- 异常情况发现及时率提升90%
