基于STM32大棚检测控制物联网系统(全部资料+APP)
功能详解基于STM32大棚检测控制物联网系统。
功能如下:
1) 检测功能: 系统检测周围环境温度数据、土壤温湿度数据、光照强度Lux。
2) 显示功能: 将检测到的环境数据显示在oled屏幕上。
3) 控制功能: 当光照强度低于设定值时,开启灯光;温度高于设定值,开启风扇;土壤湿度低于设定值,开启水泵。
4)无线通信:通过WiFi模块与手机APP可实时检测环境。
5)分为自动模式和手动模式。
全部资料如下:
基于STM32的大棚检测控制物联网系统设计与实现
摘要
随着农业现代化的推进,大棚种植作为一种高效的农业生产方式,受到了广泛关注。为了提高大棚种植的管理效率和作物产量,本文设计并实现了一种基于STM32的大棚检测控制物联网系统。该系统集成了多种传感器,用于实时检测大棚内的环境参数,包括温度、土壤湿度、光照强度等,并通过OLED屏幕显示检测结果。同时,系统具备智能控制功能,可根据环境参数自动调整灯光、风扇和水泵等设备的工作状态。此外,系统还支持通过WiFi模块与手机APP进行无线通信,实现远程监控。本系统分为自动模式和手动模式,用户可根据实际需求进行灵活切换。实验结果表明,该系统稳定可靠,能够有效提高大棚种植的管理效率和作物产量。
关键词
STM32;大棚检测;物联网;智能控制;WiFi通信
Abstract
With the advancement of agricultural modernization, greenhouse cultivation, as an efficient agricultural production method, has received widespread attention. In order to improve the management efficiency and crop yield of greenhouse cultivation, this paper designs and implements an IoT system for greenhouse detection and control based on STM32. This system integrates various sensors to detect environmental parameters in the greenhouse in real-time, including temperature, soil humidity, light intensity, etc., and displays the detection results on an OLED screen. At the same time, the system has intelligent control functions and can automatically adjust the working status of equipment such as lights, fans, and water pumps based on environmental parameters. In addition, the system supports wireless communication with mobile apps through a WiFi module for remote monitoring. The system is divided into automatic and manual modes, allowing users to switch flexibly according to actual needs. Experimental results show that the system is stable and reliable, and can effectively improve the management efficiency and crop yield of greenhouse cultivation.
Keywords
STM32; Greenhouse Detection; IoT; Intelligent Control; WiFi Communication
一、引言
大棚种植作为一种高效的农业生产方式,具有环境可控、产量稳定等优点,在现代农业中得到了广泛应用。然而,传统的大棚管理方式存在诸多不足,如人工监测环境参数耗时费力、设备控制不智能等,这些问题限制了大棚种植效率的进一步提升。随着物联网技术的快速发展,将物联网技术应用于大棚种植管理,实现环境参数的实时监测和设备的智能控制,已成为提高大棚种植效率的重要手段。
STM32系列微控制器作为一款高性能、低功耗的嵌入式系统核心,具有丰富的外设资源和强大的处理能力,非常适合用于物联网系统的开发。因此,本文设计并实现了一种基于STM32的大棚检测控制物联网系统,旨在提高大棚种植的管理效率和作物产量。
二、系统总体设计
2.1 系统架构
本系统主要由STM32微控制器、传感器模块、显示模块、控制模块、WiFi模块和手机APP等部分组成。系统架构如图1所示。
图1 系统架构图
- STM32微控制器:作为系统的核心控制单元,负责数据采集、处理和控制指令的发送。
- 传感器模块:包括温度传感器、土壤湿度传感器和光照强度传感器,用于实时检测大棚内的环境参数。
- 显示模块:采用OLED屏幕,用于显示检测到的环境参数。
- 控制模块:包括灯光、风扇和水泵等设备,用于根据环境参数调整大棚内的环境条件。
- WiFi模块:用于实现系统与手机APP之间的无线通信。
- 手机APP:用户可通过手机APP实时查看大棚内的环境参数,并远程控制设备的工作状态。
2.2 功能模块设计
本系统具备以下主要功能:
- 检测功能:系统通过传感器模块实时检测大棚内的环境温度、土壤湿度和光照强度等参数。
- 显示功能:将检测到的环境参数显示在OLED屏幕上,方便用户直观了解大棚内的环境条件。
- 控制功能:根据检测到的环境参数,系统可自动调整灯光、风扇和水泵等设备的工作状态,以优化大棚内的环境条件。同时,系统还支持手动控制功能,用户可根据实际需求灵活调整设备的工作状态。
- 无线通信功能:通过WiFi模块,系统可与手机APP进行无线通信,实现远程监控和控制。用户可通过手机APP实时查看大棚内的环境参数,并远程控制设备的工作状态。
三、硬件设计与实现
3.1 STM32微控制器选型
本系统选用STM32F103C8T6微控制器作为核心控制单元。该微控制器具有丰富的外设资源,包括ADC、GPIO、USART、SPI、I2C等,可满足系统数据采集、处理和控制指令发送的需求。同时,该微控制器具有低功耗、高性能等优点,适合用于物联网系统的开发。
3.2 传感器模块设计与实现
- 温度传感器:采用DS18B20温度传感器,该传感器具有精度高、体积小、功耗低等优点。通过单总线协议与STM32微控制器通信,可实时检测大棚内的环境温度。
- 土壤湿度传感器:采用YL-69土壤湿度传感器,该传感器通过测量土壤的导电性来检测土壤湿度。通过模拟输入接口与STM32微控制器连接,可实时检测大棚内的土壤湿度。
- 光照强度传感器:采用TMD2645光照强度传感器,该传感器具有高精度、低功耗等优点。通过I2C接口与STM32微控制器通信,可实时检测大棚内的光照强度。
3.3 显示模块设计与实现
本系统采用0.96寸OLED屏幕作为显示模块,用于显示检测到的环境参数。OLED屏幕具有功耗低、亮度高、色彩鲜艳等优点。通过SPI接口与STM32微控制器连接,可实现数据的实时显示。
3.4 控制模块设计与实现
- 灯光控制:采用继电器模块控制灯光的开启和关闭。通过GPIO接口与STM32微控制器连接,可根据光照强度自动调整灯光的工作状态。
- 风扇控制:同样采用继电器模块控制风扇的开启和关闭。通过GPIO接口与STM32微控制器连接,可根据温度自动调整风扇的工作状态。
- 水泵控制:采用H桥电机驱动模块控制水泵的开启、关闭和转速。通过PWM接口与STM32微控制器连接,可根据土壤湿度自动调整水泵的工作状态。
3.5 WiFi模块设计与实现
本系统采用ESP8266 WiFi模块,用于实现与手机APP之间的无线通信。ESP8266是一款低功耗、高性能的WiFi芯片,支持TCP/IP协议栈和UART接口。通过UART接口与STM32微控制器连接,可实现数据的实时传输和远程控制。
四、软件设计与实现
4.1 软件架构
本系统软件部分采用模块化设计,主要包括数据采集模块、数据处理模块、控制指令发送模块、通信模块和显示模块等部分。软件架构如图2所示。
图2 软件架构图
- 数据采集模块:负责通过传感器模块实时采集大棚内的环境参数。
- 数据处理模块:对采集到的数据进行处理和分析,根据预设的阈值判断是否需要调整设备的工作状态。
- 控制指令发送模块:根据数据处理模块的结果,向控制模块发送相应的控制指令。
- 通信模块:负责通过WiFi模块与手机APP进行无线通信,实现数据的实时传输和远程控制。
- 显示模块:将检测到的环境参数显示在OLED屏幕上。
4.2 数据采集与处理
系统启动后,首先初始化STM32微控制器和各个外设模块。然后,数据采集模块开始通过传感器模块实时采集大棚内的环境参数。采集到的数据通过ADC、I2C或SPI接口传输到STM32微控制器进行处理和分析。数据处理模块根据预设的阈值判断是否需要调整设备的工作状态,并将结果发送到控制指令发送模块。
4.3 控制指令发送与设备控制
控制指令发送模块根据数据处理模块的结果,向控制模块发送相应的控制指令。控制模块接收到指令后,通过GPIO或PWM接口控制灯光、风扇和水泵等设备的工作状态。同时,系统还支持手动控制功能,用户可通过按键或手机APP手动调整设备的工作状态。
4.4 无线通信与远程监控
通信模块负责通过WiFi模块与手机APP进行无线通信。系统启动后,WiFi模块自动连接到预设的WiFi网络,并与手机APP建立TCP连接。然后,通信模块开始实时传输检测到的环境参数到手机APP,并接收手机APP发送的控制指令。用户可通过手机APP实时查看大棚内的环境参数,并远程控制设备的工作状态。
4.5 显示模块设计与实现
显示模块采用OLED屏幕显示检测到的环境参数。系统启动后,显示模块开始初始化OLED屏幕,并设置显示参数。然后,根据数据采集模块实时采集到的数据,显示模块将环境参数显示在OLED屏幕上。同时,显示模块还支持手动切换显示内容,用户可根据实际需求灵活选择显示的环境参数。
五、系统测试与优化
5.1 系统测试
在系统开发完成后,进行了全面的测试工作。测试内容包括功能测试、性能测试和稳定性测试等部分。
- 功能测试:测试系统各个功能模块是否正常工作。包括数据采集模块、数据处理模块、控制指令发送模块、通信模块和显示模块等部分的测试。通过对比实际检测结果与预设阈值,验证系统是否具备正确的控制功能。
- 性能测试:测试系统的实时性和准确性。通过模拟大棚内的环境条件,测试系统数据采集、处理和控制的响应时间,以及显示模块的刷新频率。同时,通过对比实际检测结果与标准值,验证系统的准确性
/************************************************************************************************** ========================================Include Head=============================================== ***************************************************************************************************/ #include "DHT11.h" /************************************************************************************************** ========================================Program Start=============================================== ***************************************************************************************************/ #define DHT_SetBit() GPIO_SetBits(DHT_GPIO, DHT_GPIO_PIN) #define DHT_ResetBit() GPIO_ResetBits(DHT_GPIO, DHT_GPIO_PIN) #define DHT_ReadBit() GPIO_ReadInputDataBit(DHT_GPIO, DHT_GPIO_PIN) static void DHT_Set_Output(void); //设置为输出模式 static void DHT_Set_Input(void); //设置为输入模式 DHT11_TypeDef DHT11; //全局变量 /************************************************************************************************** ========================================DHT11 START=============================================== ***************************************************************************************************/ /******************************************************************************* * Function Name : DHT11_Init * Description : 湿度传感器IO初始化 * Input : None * Output : None * Return : None *******************************************************************************/ void DHT_Set_Output(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = DHT_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(DHT_GPIO, &GPIO_InitStructure); } void DHT_Set_Input(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = DHT_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(DHT_GPIO, &GPIO_InitStructure); } void DHT11_Init(void) { //GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(DHT_RCC, ENABLE); //使能端口时钟 DHT_Set_Output(); DHT11.Tem_H = 0; DHT11.Tem_L = 0; DHT11.Hum_H = 0; DHT11.Hum_L = 0; //DHT_W_DATA=1; } /******************************************************************************* * Function Name : DHT11_Byte * Description : 读取温湿度一个字节 * Input : None * Output : None * Return : None *******************************************************************************/ int DH21_ReadByte(void) { int data=0; char i; char cout; for(i=0; i<8; i++) { //读取50us的低电平 cout=1; while(!DHT_ReadBit() && cout++); //延时30us之后读取IO口的状态 delay_us(24); //先把上次的数据移位,再保存本次的数据位 data = data << 1; if(DHT_ReadBit() == Bit_SET) { data |= 1; } //等待输入的是低电平,进入下一位数据接收 cout=1; while(DHT_ReadBit() && cout++); } return data; } /******************************************************************************* * Function Name : DHT11_Read * Description : 读取温湿度 * Input : None * Output : None * Return : None *******************************************************************************/ int DHT11_ReadData(void) { unsigned int cout = 1; unsigned int T_H, T_L, H_H, H_L, Check; //设置为IO口输出模式 DHT_Set_Output(); DHT_W_DATA=1; //1、MCU开始起始信号 DHT_ResetBit(); delay_ms(18); //拉低至少18ms DHT_SetBit(); //delay_us(20); //拉高20~40us //设置为IO口输入模式 DHT_Set_Input(); //2、读取DH21响应 if(DHT_ReadBit() == Bit_RESET) { //等待80us的高电平 cout = 1; while(DHT_ReadBit() && cout++); //等待80us的低电平 cout = 1; while(!DHT_ReadBit() && cout++); delay_us(54); //读取8bit的湿度整数数据 H_H = DH21_ReadByte(); //读取8bit的湿度小数数据 H_L = DH21_ReadByte(); //读取8bit的温度整数数据 T_H = DH21_ReadByte(); //读取8bit的温度小数数据 T_L = DH21_ReadByte(); //读取8bit的校验和 Check = DH21_ReadByte(); if(Check == (H_H + H_L + T_H + T_L)) { DHT11.Hum_H = H_H; DHT11.Hum_L = H_L; DHT11.Tem_H = T_H; DHT11.Tem_L = T_L; return 1; } else { return 0; } } return 0; } /** * @brief 获取温度 * @param none. * @retval Temp, 温度值 */ int DHT11_GetTem(void) { return (DHT11.Tem_H << 8 | DHT11.Tem_L); } /** * @brief 获取湿度 * @param none. * @retval Hum,湿度值 */ int DHT11_GetHum(void) { return (DHT11.Hum_H << 8 | DHT11.Hum_L); } /************************************************************************************************** ========================================DHT11 END=============================================== ***************************************************************************************************/ /******************* (C)***Program End************文件结束*****************************************/
作者:科创工作室li