基于STM32的智能农业大棚监测系统设计
摘要:本文设计了一种基于STM32的智能农业大棚监测系统,该系统能够实时监测大棚内的光照强度、空气温湿度、土壤湿度以及二氧化碳浓度,并将监测数据通过OLED屏幕显示,同时利用Wi-Fi模块上传至手机APP。系统具备自动控制模式和手动控制模式,可根据预设阈值自动调节加热片、风扇、灯光和水泵等设备,确保大棚环境适宜作物生长。手动控制模式则允许用户通过手机APP或板子上的按键主动控制设备。该系统提高了温室大棚管理的智能化水平,对推动现代农业发展具有重要意义。
关键词:STM32;智能农业大棚;监测系统;Wi-Fi控制;自动控制模式
一、引言
随着农业现代化进程的加快,温室大棚在农业生产中扮演着越来越重要的角色。然而,传统的温室大棚管理方式往往依赖人工经验,存在效率低下、难以精准控制环境参数等问题。为了提升温室大棚环境管理的智能化水平,本文设计了一种基于STM32的智能农业大棚监测系统。该系统能够实时监测大棚内的多种环境参数,并根据预设阈值自动调节设备,为作物生长提供最佳条件。
二、系统总体设计
2.1 系统功能需求
本系统主要实现以下功能:
- 监测功能:系统能够实时监测大棚内的光照强度、空气温湿度、土壤湿度以及二氧化碳浓度。
- 显示功能:将监测到的环境数据显示在OLED屏幕上,方便用户直观了解大棚内的环境状况。
- 控制功能:系统具备自动控制模式和手动控制模式。在自动控制模式下,系统根据预设的阈值自动调节加热片、风扇、灯光和水泵等设备;在手动控制模式下,用户可以通过手机APP或板子上的按键主动控制设备的开关。
- 无线通信:通过Wi-Fi模块将监测数据上传至手机APP,实现远程监测和控制。
- 报警功能:当任意环境参数超出预设阈值时,蜂鸣器发出报警信号,提醒用户及时采取措施。
2.2 系统硬件组成
系统硬件部分主要包括STM32微控制器、各类传感器、OLED显示屏、Wi-Fi模块、控制设备(如加热片、风扇、灯光、水泵等)以及蜂鸣器等。
-
STM32微控制器:作为系统的核心,负责处理各模块采集的数据、执行控制逻辑以及与其他模块进行通信。本设计选用STM32F103系列微控制器,该系列微控制器具有高性能、低功耗、丰富的外设接口等优点,广泛应用于各种嵌入式系统中。
-
传感器模块:
- 光照强度传感器:用于检测大棚内的光照强度,本设计选用BH1750光照强度传感器,该传感器能够精确测量光照强度,输出数字信号,通过I2C总线与STM32通信。
- 温湿度传感器:用于检测大棚内的空气温度和湿度,本设计选用DHT11温湿度传感器,该传感器具有低成本、低功耗和易于使用的特性,通过单总线协议与STM32通信。
- 土壤湿度传感器:用于检测大棚内土壤的水分含量,本设计选用专用的土壤湿度传感器,该传感器输出模拟信号,通过STM32的ADC(模数转换器)将模拟信号转换为数字信号。
- 二氧化碳传感器:用于检测大棚内的二氧化碳浓度,本设计选用专用的二氧化碳检测模块,该模块采用NDIR(非色散红外)技术,能够准确测量空气中的CO2浓度,通过数字接口与STM32通信。
-
OLED显示屏:用于显示监测到的环境数据和控制状态,本设计选用0.96寸OLED显示屏,该显示屏具有自发光、对比度高、视角广等优点。
-
Wi-Fi模块:用于实现系统与手机APP之间的无线通信,本设计选用ESP8266 Wi-Fi模块,该模块具有低功耗、高性能、支持多种通信协议等优点。
-
控制设备:包括加热片、风扇、灯光和水泵等,用于根据环境数据调节大棚内的环境条件。这些设备通过继电器与STM32连接,STM32通过输出高低电平控制继电器的吸合和断开,从而实现对设备的控制。
-
蜂鸣器:用于在环境参数超出预设阈值时发出报警信号。
2.3 系统软件设计
系统软件设计主要包括传感器数据采集程序、数据显示程序、控制逻辑程序、无线通信程序以及模式切换程序等部分。
- 传感器数据采集程序:负责定期采集各类传感器的数据,并对数据进行滤波处理,以提高数据的准确性和稳定性。
- 数据显示程序:将采集到的环境数据按照一定的格式显示在OLED屏幕上,显示内容包括光照强度、空气温湿度、土壤湿度以及二氧化碳浓度等参数。
- 控制逻辑程序:根据采集到的环境数据和系统模式,执行相应的控制逻辑。在自动控制模式下,当环境参数超出预设阈值时,自动启动相应的控制设备;在手动控制模式下,根据用户的指令控制设备的开关。
- 无线通信程序:通过Wi-Fi模块与手机APP进行通信,将采集到的环境数据发送给手机APP,同时接收手机APP发送的控制指令。
- 模式切换程序:检测模式切换按钮的状态,当检测到按钮按下时,切换系统的模式。在切换模式时,需要保存当前的环境数据和设备状态,以确保系统在新的模式下能够正常运行。
三、系统硬件设计
3.1 STM32最小系统设计
STM32最小系统包括电源电路、时钟电路、复位电路等部分。
- 电源电路:为STM32提供稳定的工作电压,确保系统正常运行。本设计采用LDO(低压差线性稳压器)将5V输入电压转换为3.3V输出电压,为STM32供电。同时,在电源输入端和输出端加入去耦电容,以滤除电源中的高频噪声和纹波。
- 时钟电路:采用合适的晶振为STM32提供精确的时钟信号,保证系统的时序准确性。本设计选用8MHz的外部晶振,通过STM32内部的PLL(锁相环)倍频后得到系统所需的时钟频率。
- 复位电路:采用按键复位方式,当系统出现异常时,用户可以通过按下复位按键使系统重新初始化。
3.2 传感器电路设计
- 光照强度传感器电路:BH1750光照强度传感器通过I2C总线与STM32通信。在硬件连接上,将BH1750的SCL和SDA引脚分别连接到STM32的I2C总线的SCL和SDA引脚上,同时连接电源和地线。在软件编程上,需要初始化I2C总线,并按照BH1750的通信协议读取光照强度数据。
- 温湿度传感器电路:DHT11温湿度传感器通过单总线协议与STM32通信。在硬件连接上,将DHT11的DATA引脚连接到STM32的一个GPIO引脚上,同时连接电源和地线。在软件编程上,需要按照DHT11的数据传输时序发送启动信号并接收返回的数据包,然后解析出温度和湿度的数据。
- 土壤湿度传感器电路:土壤湿度传感器输出模拟信号,通过STM32的ADC将模拟信号转换为数字信号。在硬件连接上,将土壤湿度传感器的输出引脚连接到STM32的ADC输入引脚上,同时连接电源和地线。在软件编程上,需要初始化ADC模块,并配置相应的通道和采样时间等参数,然后读取ADC的转换结果并转换为实际的土壤湿度值。
- 二氧化碳传感器电路:二氧化碳检测模块通过数字接口与STM32通信。在硬件连接上,将二氧化碳检测模块的TX和RX引脚分别连接到STM32的USART总线的TX和RX引脚上,同时连接电源和地线。在软件编程上,需要初始化USART模块,并按照二氧化碳检测模块的通信协议读取二氧化碳浓度数据。
3.3 OLED显示屏电路
OLED显示屏通过SPI或I2C接口与STM32通信。本设计选用SPI接口进行通信。在硬件连接上,将OLED显示屏的SCLK、SDIN、DC、RES和VCC引脚分别连接到STM32的SPI总线的SCLK、MOSI、DC、RES和3.3V引脚上,同时连接地线。在软件编程上,需要初始化SPI模块,并按照OLED显示屏的通信协议发送显示数据。
3.4 Wi-Fi模块电路
ESP8266 Wi-Fi模块通过串口与STM32通信。在硬件连接上,将ESP8266的TX和RX引脚分别连接到STM32的USART总线的RX和TX引脚上,同时连接电源和地线。在软件编程上,需要初始化USART模块,并按照ESP8266的通信协议进行网络配置和数据传输。
3.5 控制设备电路
控制设备(如加热片、风扇、灯光和水泵等)通过继电器与STM32连接。在硬件连接上,将继电器的控制引脚连接到STM32的GPIO引脚上,同时连接电源和地线。在软件编程上,需要初始化GPIO模块,并通过输出高低电平控制继电器的吸合和断开,从而实现对控制设备的开关控制。
3.6 蜂鸣器电路
蜂鸣器通过GPIO引脚与STM32连接。在硬件连接上,将蜂鸣器的正极连接到STM32的一个GPIO引脚上,负极连接地线。在软件编程上,需要初始化GPIO模块,并通过输出高低电平控制蜂鸣器的发声和停止。
四、系统软件设计
4.1 传感器数据采集程序
传感器数据采集程序负责定期采集各类传感器的数据,并对数据进行滤波处理。以下是光照强度传感器数据采集程序的示例代码:
c复制代码
#include "stm32f1xx_hal.h" | |
#include "bh1750.h" | |
extern I2C_HandleTypeDef hi2c1; | |
uint16_t GetLightIntensity(void) | |
{ | |
uint16_t lightIntensity = 0; | |
BH1750_Init(&hi2c1); // 初始化BH1750传感器 | |
BH1750_Start(&hi2c1); // 启动BH1750传感器进行测量 | |
HAL_Delay(180); // 等待测量完成(根据BH1750的测量时间设置) | |
lightIntensity = BH1750_ReadLightIntensity(&hi2c1); // 读取光照强度数据 | |
return lightIntensity; | |
} |
4.2 数据显示程序
数据显示程序将采集到的环境数据按照一定的格式显示在OLED屏幕上。以下是OLED显示屏初始化和数据显示程序的示例代码:
c复制代码
#include "stm32f1xx_hal.h" | |
#include "oled.h" | |
void OLED_Init(void) | |
{ | |
// OLED显示屏初始化代码(根据具体的OLED显示屏型号编写) | |
} | |
void DisplayEnvironmentData(uint16_t lightIntensity, float temperature, float humidity, float soilMoisture, float co2Concentration) | |
{ | |
OLED_Clear(); // 清屏 | |
OLED_ShowString(0, 0, "Light:", 12); | |
OLED_ShowNum(48, 0, lightIntensity, 5, 12); | |
OLED_ShowString(0, 16, "Temp:", 12); | |
OLED_ShowFloatNum(48, 16, temperature, 2, 12); | |
OLED_ShowString(0, 32, "Humidity:", 12); | |
OLED_ShowFloatNum(72, 32, humidity, 2, 12); | |
OLED_ShowString(0, 48, "Soil M:", 12); | |
OLED_ShowFloatNum(72, 48, soilMoisture, 2, 12); | |
OLED_ShowString(0, 64, "CO2:", 12); | |
OLED_ShowFloatNum(48, 64, co2Concentration, 2, 12); | |
OLED_Refresh_Gram(); // 刷新显示屏 | |
} |
4.3 控制逻辑程序
控制逻辑程序根据采集到的环境数据和系统模式,执行相应的控制逻辑。以下是自动控制模式下的控制逻辑程序示例代码:
c复制代码
#include "stm32f1xx_hal.h" | |
extern GPIO_HandleTypeDef hgpio; | |
void AutomaticControl(uint16_t lightIntensity, float temperature, float humidity, float soilMoisture) | |
{ | |
// 读取预设阈值(这里假设阈值已经通过其他方式设置并存储在全局变量中) | |
float tempThreshold = 25.0; // 温度阈值 | |
float humidityThreshold = 60.0; // 湿度阈值 | |
uint16_t lightThreshold = 500; // 光照强度阈值 | |
float soilMoistureThreshold = 30.0; // 土壤湿度阈值 | |
if (temperature < tempThreshold) | |
{ | |
HAL_GPIO_WritePin(hgpio, GPIO_PIN_HEATER, GPIO_PIN_SET); // 开启加热片 | |
} | |
else | |
{ | |
HAL_GPIO_WritePin(hgpio, GPIO_PIN_HEATER, GPIO_PIN_RESET); // 关闭加热片 | |
} | |
if (humidity > humidityThreshold) | |
{ | |
HAL_GPIO_WritePin(hgpio, GPIO_PIN_FAN, GPIO_PIN_SET); // 开启风扇 | |
} | |
else | |
{ | |
HAL_GPIO_WritePin(hgpio, GPIO_PIN_FAN, GPIO_PIN_RESET); // 关闭风扇 | |
} | |
if (lightIntensity < lightThreshold) | |
{ | |
HAL_GPIO_WritePin(hgpio, GPIO_PIN_LIGHT, GPIO_PIN_SET); // 开启灯光 | |
} | |
else | |
{ | |
HAL_GPIO_WritePin(hgpio, GPIO_PIN_LIGHT, GPIO_PIN_RESET); // 关闭灯光 | |
} | |
if (soilMoisture < soilMoistureThreshold) | |
{ | |
HAL_GPIO_WritePin(hgpio, GPIO_PIN_PUMP, GPIO_PIN_SET); // 开启水泵 | |
} | |
else | |
{ | |
HAL_GPIO_WritePin(hgpio, GPIO_PIN_PUMP, GPIO_PIN_RESET); // 关闭水泵 | |
} | |
} |
4.4 无线通信程序
无线通信程序通过Wi-Fi模块与手机APP进行通信。以下是ESP8266 Wi-Fi模块初始化和数据传输程序的示例代码:
c复制代码
#include "stm32f1xx_hal.h" | |
#include "esp8266.h" | |
extern UART_HandleTypeDef huart1; | |
void ESP8266_Init(void) | |
{ | |
// ESP8266初始化代码(根据具体的ESP8266模块型号编写) | |
} | |
void SendDataToApp(uint16_t lightIntensity, float temperature, float humidity, float soilMoisture, float co2Concentration) | |
{ | |
char data[100]; | |
sprintf(data, "Light=%d,Temp=%.2f,Humidity=%.2f,SoilM=%.2f,CO2=%.2f\r\n", lightIntensity, temperature, humidity, soilMoisture, co2Concentration); | |
HAL_UART_Transmit(&huart1, (uint8_t*)data, strlen(data), HAL_MAX_DELAY); // 通过串口发送数据到ESP8266模块 | |
} |
4.5 模式切换程序
模式切换程序检测模式切换按钮的状态,并切换系统的模式。以下是模式切换程序的示例代码:
c复制代码
#include "stm32f1xx_hal.h" | |
extern GPIO_HandleTypeDef hgpio; | |
void ModeSwitch(void) | |
{ | |
if (HAL_GPIO_ReadPin(hgpio, GPIO_PIN_MODE_SWITCH) == GPIO_PIN_SET) // 检测模式切换按钮是否按下 | |
{ | |
HAL_Delay(20); // 消抖 | |
if (HAL_GPIO_ReadPin(hgpio, GPIO_PIN_MODE_SWITCH) == GPIO_PIN_SET) | |
{ | |
// 切换系统模式(这里假设系统模式存储在一个全局变量中) | |
if (systemMode == AUTOMATIC_MODE) | |
{ | |
systemMode = MANUAL_MODE; | |
} | |
else | |
{ | |
systemMode = AUTOMATIC_MODE; | |
} | |
} | |
} | |
} |
五、系统测试
5.1 硬件测试
- 电源测试:检查电源电路的输出电压是否稳定,确保各模块能够正常工作。
- 传感器测试:分别测试各类传感器的数据采集功能,检查采集到的数据是否准确。例如,将光照强度传感器置于不同光照环境下,检查采集到的光照强度数据是否与实际值相符;将温湿度传感器置于恒温恒湿箱中,检查采集到的温湿度数据是否准确等。
- 显示屏测试:检查OLED显示屏是否能够正常显示数据,显示内容是否清晰、完整。
- 控制设备测试:分别测试加热片、风扇、灯光和水泵等控制设备是否能够正常响应控制指令。例如,通过手动控制或自动控制模式开启和关闭加热片、风扇等设备,检查设备是否能够正常工作。
- 无线通信测试:检查Wi-Fi模块是否能够正常连接网络,并与手机APP进行通信。例如,通过手机APP发送控制指令,检查系统是否能够正确接收并执行指令;将系统采集到的环境数据上传至手机APP,检查数据是否能够正确显示。
5.2 软件测试
- 功能测试:分别测试系统的各项功能是否能够正常实现。例如,测试自动控制模式下系统是否能够根据预设阈值自动调节设备;测试手动控制模式下用户是否能够通过手机APP或板子上的按键主动控制设备;测试报警功能是否能够在环境参数超出预设阈值时正常发出报警信号等。
- 性能测试:测试系统的稳定性和响应速度。例如,通过长时间运行系统,观察系统是否出现死机、显示错误等问题;测试系统对环境数据变化的响应速度,确保系统能够及时准确地执行控制逻辑。
- 兼容性测试:测试系统在不同环境下的兼容性。例如,测试系统在不同温度、湿度和光照强度等环境下的工作性能;测试系统在不同手机型号和操作系统版本下的兼容性等。
六、结论
本文设计了一种基于STM32的智能农业大棚监测系统,该系统能够实时监测大棚内的光照强度、空气温湿度、土壤湿度以及二氧化碳浓度,并将监测数据通过OLED屏幕显示,同时利用Wi-Fi模块上传至手机APP。系统具备自动控制模式和手动控制模式,可根据预设阈值自动调节设备,为作物生长提供最佳条件。经过硬件测试和软件测试,该系统性能稳定、功能完善,能够有效提高温室大棚管理的智能化水平,对推动现代农业发展具有重要意义。
七、展望
未来,可以进一步优化系统的硬件和软件设计,提高系统的精度和稳定性。例如,可以选用更高精度的传感器,提高数据采集的准确性;可以优化控制算法,提高系统的自动调节能力;可以增加更多的监测参数和控制设备,满足不同作物生长的需求等。此外,还可以将系统与云平台连接,实现更高级的数据分析和远程监控功能,为农业生产提供更加智能化的解决方案。