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,用戶可實時掌握環境情況,并通過按鍵設定報警閾值。硬件電路設計注重穩定性與擴展性,程序設計遵循模塊化與可維護性原則。該系統不僅可用于家庭環境質量監測,也可拓展至學校、辦公室等公共場所,具有廣泛的應用前景。