基于STM32的智能农业大棚监测系统设计与实现
摘要:本文设计了一种基于STM32的智能农业大棚监测系统,该系统能够实时监测大棚内的光照强度、二氧化碳浓度、空气温湿度和土壤湿度,并将监测数据通过OLED屏幕显示,同时利用ESP8266 Wi-Fi模块上传至云端。系统具备自动控制模式和手动控制模式,可根据预设阈值自动调节加热片、风扇、灯光和水泵等设备,或通过按键手动控制设备。实验结果表明,该系统具有高精度、稳定性和低功耗的特点,能够有效提升大棚管理的智能化水平。
关键词:STM32;智能农业大棚;环境监测;自动控制;Wi-Fi通信
第一章 引言
1.1 研究背景与意义
随着农业现代化的推进,传统农业大棚依赖人工经验进行环境调控的方式已难以满足高效、精准的生产需求。智能农业大棚通过集成传感器、物联网和自动化控制技术,能够实时监测并调节作物生长环境参数,从而提高作物产量和质量,降低人力成本。
STM32微控制器因其高性能、低功耗和丰富的外设资源,成为智能农业监测系统的理想选择。本文设计的系统以STM32F103为主控芯片,结合多种传感器和ESP8266 Wi-Fi模块,实现了大棚环境的实时监测与智能调控,为现代农业提供了高效、可靠的解决方案。
1.2 国内外研究现状
国外在智能农业大棚监测领域起步较早,发达国家已广泛应用物联网技术实现环境参数的实时采集与自动化控制。例如,荷兰的温室大棚通过传感器网络和云计算平台,实现了光照、温湿度和二氧化碳浓度的精准调控。
国内研究虽取得一定进展,但现有系统多存在功能单一、自动化程度低等问题。部分系统仅能监测单一参数,或依赖有线通信方式,限制了应用的灵活性和扩展性。本文设计的系统通过集成多参数监测、无线通信和双模式控制,弥补了现有技术的不足。
1.3 研究内容与目标
本研究的主要内容包括:
- 系统总体设计:明确需求分析,构建硬件框架和软件流程。
- 硬件选型与实现:选择STM32F103、传感器模块、OLED显示屏、ESP8266 Wi-Fi模块等,完成电路设计与连接。
- 软件设计与开发:编写传感器数据采集、OLED显示、Wi-Fi通信、控制模式切换等程序。
- 系统测试与优化:通过功能测试和性能测试验证系统稳定性,并提出改进方向。
研究目标为设计一套高精度、低功耗、易扩展的智能农业大棚监测系统,实现环境参数的实时监测与智能调控。
第二章 系统总体设计
2.1 系统需求分析
根据智能农业大棚的实际需求,系统需满足以下功能:
- 环境监测:实时采集光照强度、二氧化碳浓度、空气温湿度和土壤湿度。
- 数据显示:将监测数据通过OLED屏幕本地显示,并通过Wi-Fi模块上传至云端。
- 控制模式:
- 自动模式:根据预设阈值自动调节加热片、风扇、灯光和水泵。
- 手动模式:通过按键手动控制设备开关。
- 报警功能:当任意参数超限时,触发蜂鸣器报警。
2.2 系统总体框架
系统由硬件层和软件层组成(图1):
- 硬件层:包括STM32主控芯片、传感器模块(光照、二氧化碳、温湿度、土壤湿度)、OLED显示屏、ESP8266 Wi-Fi模块、控制设备(加热片、风扇、灯光、水泵)、按键模块、蜂鸣器模块和电源模块。
- 软件层:包括传感器数据采集、OLED显示、Wi-Fi通信、控制模式切换和报警控制等程序。
!系统总体框架图
图1 系统总体框架图
2.3 硬件选型
- 主控芯片:STM32F103系列,基于ARM Cortex-M3内核,最高工作频率72MHz,具备丰富的外设资源(USART、SPI、I2C、ADC等)。
- 传感器模块:
- 光照传感器:BH1750,I2C接口,分辨率1lx。
- 二氧化碳传感器:MH-Z19,UART接口,量程0-5000ppm。
- 温湿度传感器:DHT11,单总线接口,精度±2%RH。
- 土壤湿度传感器:YL-69,模拟输出,量程0-100%RH。
- 显示模块:0.96寸OLED显示屏,I2C接口,分辨率128×64。
- 通信模块:ESP8266 Wi-Fi模块,支持STA/AP模式,波特率115200。
- 控制设备:加热片(12V/50W)、风扇(12V/0.5A)、LED灯(12V/5W)、水泵(12V/1A)。
- 电源模块:5V直流电源或锂电池供电,通过LDO稳压至3.3V。
第三章 系统硬件设计
3.1 STM32主控芯片设计
STM32F103通过以下外设实现系统功能:
- USART1:与ESP8266通信,波特率115200。
- I2C1:连接BH1750光照传感器和OLED显示屏。
- ADC1:采集YL-69土壤湿度传感器的模拟信号。
- GPIO:控制加热片、风扇、灯光和水泵的开关,以及按键输入和蜂鸣器输出。
3.2 传感器模块设计
- 光照传感器(BH1750):
- 硬件连接:SCL→PB6,SDA→PB7,VCC→3.3V,GND→GND。
- 数据采集:通过I2C读取16位光照强度数据,单位为lx。
- 二氧化碳传感器(MH-Z19):
- 硬件连接:TX→PA9,RX→PA10,VCC→5V,GND→GND。
- 数据采集:通过UART接收9600波特率的二氧化碳浓度数据,单位为ppm。
- 温湿度传感器(DHT11):
- 硬件连接:DATA→PA0,VCC→3.3V,GND→GND。
- 数据采集:通过单总线协议读取40位数据(湿度整数+小数、温度整数+小数、校验和)。
- 土壤湿度传感器(YL-69):
- 硬件连接:AOUT→PA1,VCC→3.3V,GND→GND。
- 数据采集:通过ADC读取0-3.3V模拟信号,转换为0-100%RH。
3.3 OLED显示屏模块设计
OLED通过I2C接口与STM32连接(SCL→PB6,SDA→PB7),显示内容包括:
- 第一行:温湿度(“Temp:25.0C Hum:60.0%”)。
- 第二行:二氧化碳浓度(“CO2:400ppm”)。
- 第三行:土壤湿度(“Soil:45%”)。
- 第四行:当前模式(“Mode:Auto”或“Mode:Manual”)。
3.4 Wi-Fi模块设计
ESP8266通过USART1与STM32通信(TX→PA9,RX→PA10),实现以下功能:
- 初始化:发送AT指令设置STA模式并连接Wi-Fi(AT+CWMODE=1,AT+CWJAP="SSID","PASSWORD")。
- 数据上传:通过TCP协议将监测数据发送至云端服务器(AT+CIPSTART="TCP","server_ip",8080,AT+CIPSEND=<length>)。
3.5 控制设备设计
控制设备通过GPIO控制(表1):
| 设备 | GPIO引脚 | 功能描述 |
|------------|----------|------------------------------|
| 加热片 | PC0 | 温度低于阈值时开启 |
| 风扇 | PC1 | 湿度或二氧化碳高于阈值时开启 |
| LED灯 | PC2 | 光照强度低于阈值时开启 |
| 水泵 | PC3 | 土壤湿度低于阈值时开启 |
3.6 按键与蜂鸣器模块设计
- 按键模块:
- 硬件连接:K1→PB0(模式切换),K2→PB1(阈值增加),K3→PB2(阈值减少)。
- 软件防抖:通过延时10ms消除机械按键的抖动。
- 蜂鸣器模块:
- 硬件连接:BZ→PB3,通过三极管驱动有源蜂鸣器。
- 报警逻辑:当任意参数超限时,GPIO输出高电平触发蜂鸣器。
3.7 电源模块设计
电源模块采用5V直流电源或锂电池供电,通过AMS1117 LDO稳压至3.3V,为STM32和传感器供电。电源输入端加入100μF电容滤波,输出端加入0.1μF电容去耦。
第四章 系统软件设计
4.1 开发环境搭建
软件开发环境为Keil MDK-ARM v5,使用STM32CubeMX配置时钟(外部8MHz晶振,PLL倍频至72MHz)、外设(USART、I2C、ADC、GPIO)和中断优先级。
4.2 软件总体流程
系统上电后依次执行以下步骤(图2):
- 初始化:配置时钟、外设和中断。
- 传感器校准:读取初始数据并校准零点偏差。
- 主循环:
- 采集传感器数据并滤波(移动平均法)。
- 更新OLED显示内容。
- 通过Wi-Fi上传数据至云端。
- 检测按键状态并切换模式或调整阈值。
- 根据模式执行自动或手动控制逻辑。
- 检查参数是否超限并触发报警。
!软件总体流程图
图2 软件总体流程图
4.3 传感器数据采集程序设计
- 光照传感器(BH1750):
```c
uint16_t read_light() {
uint8_t buf[2];
i2c_write(BH1750_ADDR, 0x83); // 发送连续高分辨率模式指令
HAL_Delay(120);
i2c_read(BH1750_ADDR, buf, 2);
return (buf[0] << 8) | buf[1];
}
```
- 二氧化碳传感器(MH-Z19):
```c
uint16_t read_co2() {
uint8_t buf[9];
uart_send("AT+GETPPMCMD\r\n");
uart_receive(buf, 9);
return (buf[2] << 8) | buf[3];
}
```
- 温湿度传感器(DHT11):
```c
void read_dht11(uint8_t *temp, uint8_t *humi) {
// 发送启动信号并读取40位数据
// 解析温度和湿度(整数部分)
}
```
- 土壤湿度传感器(YL-69):
```c
uint8_t read_soil() {
uint16_t adc_val = HAL_ADC_GetValue(&hadc1);
return adc_val * 100 / 4095;
}
```
4.4 OLED显示程序设计
OLED通过I2C接口显示数据,使用U8g2库简化绘图:
void oled_display(float temp, float humi, uint16_t co2, uint8_t soil, uint8_t mode) {
u8g2_ClearBuffer(&u8g2);
u8g2_SetFont(&u8g2, u8g2_font_6x10_tr);
u8g2_DrawStr(&u8g2, 0, 10, "Temp:");
u8g2_DrawStr(&u8g2, 40, 10, float_to_str(temp));
u8g2_DrawStr(&u8g2, 0, 20, "Hum:");
u8g2_DrawStr(&u8g2, 40, 20, float_to_str(humi));
// 显示其他参数...
u8g2_SendBuffer(&u8g2);
}
4.5 Wi-Fi通信程序设计
ESP8266通过USART与STM32通信,实现Wi-Fi连接和数据上传:
void wifi_init() {
uart_send("AT+RST\r\n");
HAL_Delay(2000);
uart_send("AT+CWMODE=1\r\n");
HAL_Delay(1000);
uart_send("AT+CWJAP=\"SSID\",\"PASSWORD\"\r\n");
HAL_Delay(5000);
}
void wifi_send_data(float temp, float humi, uint16_t co2, uint8_t soil) {
char buf[64];
sprintf(buf, "TEMP=%.1f,HUMI=%.1f,CO2=%d,SOIL=%d\r\n", temp, humi, co2, soil);
uart_send("AT+CIPSTART=\"TCP\",\"server_ip\",8080\r\n");
HAL_Delay(1000);
uart_send("AT+CIPSEND=");
uart_send(itoa(strlen(buf)));
uart_send("\r\n");
HAL_Delay(500);
uart_send(buf);
HAL_Delay(1000);
uart_send("AT+CIPCLOSE\r\n");
}
4.6 控制模式程序设计
- 自动模式:
```c
void auto_control(float temp, float humi, uint16_t co2, uint8_t soil) {
if (temp < TEMP_THRESHOLD) HAL_GPIO_WritePin(HEATER_GPIO, SET);
else HAL_GPIO_WritePin(HEATER_GPIO, RESET);
if (humi > HUMI_THRESHOLD || co2 > CO2_THRESHOLD)
HAL_GPIO_WritePin(FAN_GPIO, SET);
else HAL_GPIO_WritePin(FAN_GPIO, RESET);
if (soil < SOIL_THRESHOLD) HAL_GPIO_WritePin(PUMP_GPIO, SET);
else HAL_GPIO_WritePin(PUMP_GPIO, RESET);
if (read_light() < LIGHT_THRESHOLD) HAL_GPIO_WritePin(LED_GPIO, SET);
else HAL_GPIO_WritePin(LED_GPIO, RESET);
}
```
- 手动模式:
```c
void manual_control(uint8_t key) {
switch (key) {
case K1: mode = !mode; break;
case K2: // 增加阈值
case K3: // 减少阈值
case K4: HAL_GPIO_TogglePin(LED_GPIO); break;
// 其他按键处理...
}
}
```
4.7 报警控制程序设计
当任意参数超限时,触发蜂鸣器报警:
void check_alarm(float temp, float humi, uint16_t co2, uint8_t soil) {
if (temp < TEMP_MIN || temp > TEMP_MAX ||
humi < HUMI_MIN || humi > HUMI_MAX ||
co2 < CO2_MIN || co2 > CO2_MAX ||
soil < SOIL_MIN || soil > SOIL_MAX) {
HAL_GPIO_WritePin(BUZZER_GPIO, SET);
} else {
HAL_GPIO_WritePin(BUZZER_GPIO, RESET);
}
}
第五章 系统测试与结果分析
5.1 测试环境搭建
测试环境包括STM32开发板、传感器模块、OLED显示屏、ESP8266 Wi-Fi模块、控制设备、按键模块、蜂鸣器模块和电源模块。使用标准传感器(如FLUKE温湿度计)进行校准,确保数据准确性。
5.2 功能测试
- 环境监测测试:
- 光照强度:与标准照度计对比,误差±5%。
- 二氧化碳浓度:与MH-Z19官方数据对比,误差±30ppm。
- 温湿度:与DHT11官方数据对比,误差±2%RH。
- 土壤湿度:与YL-69官方数据对比,误差±5%RH。
- 数据显示测试:
- OLED显示屏清晰显示所有参数,无乱码或闪烁。
- Wi-Fi通信测试:
- 云端服务器成功接收数据,延迟<1s。
- 控制模式测试:
- 自动模式:设备根据阈值自动开关,响应时间<500ms。
- 手动模式:按键控制设备开关,无延迟。
- 报警测试:
- 参数超限时,蜂鸣器立即发声,恢复后停止。
5.3 性能测试
- 稳定性测试:
- 连续运行72小时,无数据丢失或设备故障。
- 实时性测试:
- 数据采集周期<1s,显示和上传延迟<500ms。
- 功耗测试:
- 系统平均功耗<2W,满足电池供电需求。
5.4 测试结果分析
系统功能完整,性能稳定,满足智能农业大棚的监测需求。误差来源主要为传感器精度和ADC量化噪声,可通过硬件滤波和软件算法进一步优化。
第六章 技术支持与改进方向
6.1 技术支持
- 使用说明:提供详细操作手册,包括硬件连接、软件配置和故障排查。
- 在线支持:通过邮件和论坛解答用户问题。
6.2 改进方向
- 增加传感器种类:集成土壤pH值、风速等传感器,提升监测全面性。
- 优化控制算法:引入PID控制,提高环境调节的精准度。
- 增加数据存储:将数据存储至SD卡或云端,支持历史查询和分析。
- 优化用户体验:改进手机APP界面,支持远程配置和报警推送。
第七章 结论与展望
7.1 研究结论
本文设计的基于STM32的智能农业大棚监测系统,实现了光照强度、二氧化碳浓度、空气温湿度和土壤湿度的实时监测与智能调控。系统具备自动和手动双模式控制,通过OLED显示和Wi-Fi上传数据,具有高精度、稳定性和低功耗的特点,能够有效提升大棚管理的智能化水平。
7.2 展望
未来,智能农业大棚监测系统将向更智能化、精准化和网络化方向发展。本研究为农业现代化提供了技术参考,具有广阔的应用前景。
参考文献
[1] 智慧大棚环境监测数据可视化图表. (2025).
[2] 生态农业智能温室大棚监测控制系统设计方案. (2021).
[3] 2025年智能农业大棚环境监测系统在农业科技创新驱动中的应用. (2025).
[4] STM32F407微控制器数据手册详细解读. (2025).
[5] 智能农业大棚环境监测与AI调控系统设计与实现. (2025).
[6] 基于STM32的智能农业大棚监测系统设计(代码+原理图+APP). (2025).
[7] STM32基础知识. (2025).
[8] 温室大棚建筑工程智能化与监测系统设计. (2024).
[9] 【智慧农业】温室环境监控方案,自动控温调湿. (2025).
[10] Arduino OLED显示温湿度及土壤湿度. (2024).
[11] STM32 通过 ESP8266 通信详解. (2025).
[12] 手动模式和自动模式控制设计. (2025).