1 基于STM32单片机温湿度PM2.5粉尘甲醛环境质量WiFi手机APP监测系统
本系统旨在实现对环境中温度、湿度、PM2.5粉尘浓度以及甲醛浓度的实时监测,并通过WiFi技术将数据传输至手机APP端,实现移动化与可视化的环境质量检测。系统在硬件上主要依赖STM32单片机作为核心处理器,配合温湿度传感器、粉尘传感器、甲醛传感器、液晶显示模块、WiFi模块、按键电路和报警LED电路;在软件上通过驱动程序实现传感器采集、数据处理、阈值判断、显示控制与网络通信等功能。系统不仅具备实时性强、精度高的优点,同时兼顾便携性与人机交互功能,适合在家庭、办公室和公共场所应用。
2 系统功能介绍
-
环境数据采集功能
系统通过多种传感器对周边环境进行全面检测,获取温度、湿度、PM2.5浓度及甲醛浓度。STM32单片机作为主控器,能够实时采集并处理各类模拟与数字信号,保证检测数据的准确性和及时性。 -
数据显示与交互功能
所有环境数据通过液晶显示屏进行直观显示,用户可以在屏幕上实时查看温湿度、PM2.5浓度和甲醛浓度。同时系统设置了按键,用户可通过按键修改环境阈值参数,实现个性化报警设置。 -
阈值报警功能
当检测到的数据超过预设阈值时,系统会触发LED报警指示,提醒用户当前环境存在潜在健康风险。这种即时预警机制在空气质量恶化时尤为重要。 -
无线通信功能
系统通过ESP8266或ESP32等WiFi模块将检测数据实时上传至手机APP端,用户可在手机上远程查看当前环境数据,实现数据的可视化和移动化管理。 -
数据可扩展与分析功能
除了实时查看,系统还可以将环境数据进行存储与上传,为后续的长期趋势分析、环境变化规律研究提供数据支持。
3 系统电路设计
系统电路设计主要由STM32最小系统电路、传感器接口电路、显示电路、WiFi通信电路、按键电路、报警电路和电源电路组成。以下逐一介绍各个模块。
3.1 STM32最小系统电路
STM32单片机是整个系统的核心控制器,负责数据采集、运算处理、逻辑判断与控制执行。最小系统电路主要包括:电源电路(3.3V稳压电路)、时钟电路(晶振及相关电容)、复位电路以及SWD调试接口。这部分电路保证了STM32的稳定运行和程序下载。
3.2 温湿度传感器电路
温湿度传感器可以选用DHT11、DHT22或SHT30等型号。以SHT30为例,其通信接口为I2C,接入STM32的I2C总线,能够以高精度和较快速度返回温湿度数据。该模块在电路设计中需加入上拉电阻,以确保I2C总线稳定工作。
3.3 PM2.5粉尘传感器电路
粉尘浓度检测一般使用GP2Y1010AU0F或DSM501A等光学粉尘传感器。此类传感器通过光学原理检测空气中的粉尘浓度,输出模拟电压信号。该信号输入STM32的ADC通道,经A/D转换后得到数字信号,供程序进行计算处理。
3.4 甲醛传感器电路
甲醛传感器常采用电化学或半导体气体传感器,例如MQ-135模块。该模块同样输出模拟信号,需要经过STM32的ADC采样。为了保证精度,电路中应加适当的滤波电容,并注意采样时间的选择。
3.5 液晶显示电路
显示部分采用OLED屏或TFT液晶屏。OLED屏因其功耗低、对比度高、驱动简单而常用。显示模块一般使用I2C或SPI接口与STM32通信,电路连接中应考虑电平兼容性,并合理分配引脚资源。
3.6 WiFi通信电路
WiFi模块常选用ESP8266或ESP32。ESP8266通过UART与STM32进行通信,电路中需要考虑电平匹配(STM32为3.3V逻辑电平,需直接连接或使用电平转换器)。电路设计时还需为WiFi模块提供稳定电源和必要的去耦电容,以保证无线通信的稳定性。
3.7 按键电路
按键用于设置环境参数的报警阈值。电路上采用独立按键,配合上拉电阻构成输入电路,按下时将逻辑状态传递至STM32。程序中通过消抖处理保证按键响应的可靠性。
3.8 报警LED电路
当检测数值超过设定阈值时,STM32通过GPIO口控制LED点亮,实现报警提示。若需要更直观的效果,可以扩展为多色LED或蜂鸣器。
3.9 电源电路
系统供电一般采用5V输入,经过AMS1117-3.3V等稳压芯片转为3.3V供给STM32和WiFi模块。为了确保稳定性,电路中需增加电解电容与瓷片电容,起到滤波与稳压作用。
4 程序设计
程序设计部分是实现功能的核心。系统采用C语言进行开发,编译环境为Keil MDK,基于STM32 HAL库或标准库。程序结构主要包括初始化部分、传感器驱动程序、显示驱动程序、WiFi通信程序、按键与阈值设置程序、报警程序和主循环逻辑。
4.1 系统初始化
在主函数中,首先进行时钟配置、外设初始化、I2C与UART配置等。该部分保证硬件模块能够正确工作。
int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_I2C1_Init();MX_USART1_UART_Init();MX_ADC1_Init();OLED_Init();WiFi_Init();while (1){Main_Task();}
}
4.2 温湿度传感器程序
以SHT30为例,通过I2C通信获取温湿度数据,经过数据处理后传递给显示与判断模块。
void SHT30_ReadData(float *temperature, float *humidity)
{uint8_t data[6];I2C_ReadData(SHT30_ADDR, READ_CMD, data, 6);uint16_t temp_raw = (data[0] << 8) | data[1];uint16_t hum_raw = (data[3] << 8) | data[4];*temperature = -45 + 175 * ((float)temp_raw / 65535.0);*humidity = 100 * ((float)hum_raw / 65535.0);
}
4.3 PM2.5粉尘传感器程序
粉尘传感器输出模拟信号,通过ADC采样并转换为浓度值。
uint16_t Read_PM25(void)
{uint16_t adc_value = HAL_ADC_GetValue(&hadc1);float voltage = (adc_value / 4096.0) * 3.3;uint16_t pm25 = voltage * 1000; // 简化换算公式return pm25;
}
4.4 甲醛传感器程序
甲醛传感器同样输出模拟信号,通过ADC采集并换算浓度。
uint16_t Read_HCHO(void)
{uint16_t adc_value = HAL_ADC_GetValue(&hadc1);float voltage = (adc_value / 4096.0) * 3.3;uint16_t hcho = voltage * 10; // 依据传感器特性换算return hcho;
}
4.5 液晶显示程序
OLED显示模块通过I2C通信,将采集到的数据动态显示在屏幕上。
void Display_Data(float temp, float hum, uint16_t pm25, uint16_t hcho)
{OLED_Clear();OLED_ShowString(0, 0, "Temp: ");OLED_ShowNum(50, 0, temp, 2, 16);OLED_ShowString(0, 16, "Humi: ");OLED_ShowNum(50, 16, hum, 2, 16);OLED_ShowString(0, 32, "PM2.5:");OLED_ShowNum(50, 32, pm25, 4, 16);OLED_ShowString(0, 48, "HCHO: ");OLED_ShowNum(50, 48, hcho, 3, 16);
}
4.6 WiFi通信程序
通过ESP8266模块与手机APP通信,采用UART方式发送数据。
void WiFi_SendData(float temp, float hum, uint16_t pm25, uint16_t hcho)
{char buffer[100];sprintf(buffer, "T:%.2f,H:%.2f,P:%d,HCHO:%d\r\n", temp, hum, pm25, hcho);HAL_UART_Transmit(&huart1, (uint8_t*)buffer, strlen(buffer), 100);
}
4.7 按键与阈值设置程序
用户通过按键修改温湿度、PM2.5和甲醛的报警阈值。
void Key_Scan(void)
{if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET){Threshold_Temp += 1;}if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == GPIO_PIN_RESET){Threshold_PM25 += 10;}
}
4.8 报警程序
当数据超过阈值时点亮LED,实现报警功能。
void Alarm_Check(float temp, uint16_t pm25, uint16_t hcho)
{if(temp > Threshold_Temp || pm25 > Threshold_PM25 || hcho > Threshold_HCHO){HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);}else{HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);}
}
5 总结
本系统实现了温湿度、PM2.5粉尘、甲醛浓度的综合监测,数据通过液晶屏显示和WiFi无线传输至手机APP,用户可实时掌握环境情况,并通过按键设定报警阈值。硬件电路设计注重稳定性与扩展性,程序设计遵循模块化与可维护性原则。该系统不仅可用于家庭环境质量监测,也可拓展至学校、办公室等公共场所,具有广泛的应用前景。