单片机|物联网|毕设答辩|毕业设计项目|毕设设计|—STM32室内环境检测系统
本文介绍了一种基于STM32的室内环境检测系统设计方案。系统以STM32F103/F407为核心控制器,通过I2C/SPI接口连接温湿度、气压、光照等多种环境传感器。硬件设计包括传感器阵列、OLED显示模块和Wi-Fi/蓝牙通信单元,采用模块化PCB布局。软件采用HAL库开发,通过STM32CubeMX配置外设,实现数据采集、滤波处理和本地显示功能,并支持通过MQTT协议将JSON格式数据上传至云

标题:STM32室内环境检测系统
系统总体概述
该系统以STM32单片机为核心,连接多种环境传感器,采集数据并通过本地显示或无线方式上传,实现对温度、湿度、气压、光照、空气质量等关键室内环境参数的实时监控。
其核心架构如下图所示:
text
[传感器阵列] -> [STM32 MCU] -> [输出与通信单元] -> [用户/云平台] (数据采集) (核心处理与控制) (人机交互与上行) (数据消费端)
第一部分:硬件系统设计(下位机)
1. 核心控制器 (MCU)
-
推荐型号:STM32F103C8T6(蓝色战舰版,性价比之王,资源丰富)或 STM32F407VET6(性能更强,如需复杂算法或驱动更高级屏幕)。
-
核心职责:
-
初始化并读取所有传感器的数据。
-
进行数据滤波、校准、单位转换等预处理。
-
驱动本地显示模块(OLED/LCD)。
-
管理无线通信模块(如ESP8266/ESP01S)的通信逻辑。
-
处理用户输入(按键、旋钮)。
-
2. 传感器阵列 (感知层)
根据需求选择搭配,通信方式主要是 I2C 和 SPI,简化布线。
-
温湿度传感器:
-
DHT11:低成本,数字接口,但精度较低。
-
SHT30/SHT31:I2C接口,精度高,响应快,推荐使用。
-
-
大气压强传感器:
-
BMP280 / BME280:I2C/SPI接口,可测气压、温度。BME280额外集成了湿度测量。
-
-
环境光传感器:
-
BH1750:I2C接口,专用于光照强度测量,分辨率高。
-
-
空气质量传感器 (VOC/CO2):
-
SGP30:I2C接口,测量TVOC(总挥发性有机物)和eCO2(等效二氧化碳)。
-
CCS811:I2C接口,功能类似。
-
-
颗粒物传感器 (PM2.5/PM10):
-
攀藤PMS5003:UART串口通信,提供精确的颗粒物浓度数据。
-
3. 输出与通信单元 (交互与上行)
-
本地显示:
-
0.96寸OLED显示屏 (I2C):低功耗,显示效果好,适合显示多行数据。
-
LCD1602/LCD2004 (需转I2C模块):字符型液晶,简单易用。
-
-
无线通信 (可选,但建议具备):
-
Wi-Fi模块 (ESP8266/ESP01S):通过UART与STM32通信,使用AT指令将数据上传到云平台(如阿里云、ThingsBoard、Home Assistant)。
-
蓝牙模块 (HC-05/HC-08):通过UART连接,可将数据发送到手机APP,实现短距离监控。
-
-
报警提示:
-
LED灯:用不同颜色表示环境质量(如绿色优、红色差)。
-
蜂鸣器:当某项参数超标时,发出声音警报。
-
4. 电源与外围电路
-
供电:USB供电(5V)或外部电源适配器,经LDO稳压芯片(如AMS1117-3.3)转换为系统工作的3.3V。
-
用户输入:1-2个按键,用于切换显示页面、设置阈值等。
-
PCB:建议将核心板(STM32最小系统)与传感器板分开,通过排针连接,便于调试和扩展。
第二部分:软件系统设计(固件程序)
软件设计应采用模块化和分层的思想,保证程序结构清晰,易于维护和扩展。
1. 软件开发环境
-
IDE:STM32CubeIDE (免费,官方推荐,集成了STM32CubeMX和调试功能)。
-
开发方式:HAL库(简单易用,开发快)或 LL库(更接近寄存器,效率高)。
-
第一步:使用STM32CubeMX进行图形化配置:
-
选择MCU型号。
-
配置时钟树(SYSCLK到72MHz for F103)。
-
启用所需外设:I2C1、SPI1、UART1 (连接Wi-Fi模块)、UART2 (调试口)、ADC等。
-
生成初始化代码。
-
2. 程序主循环逻辑
c
// 1. 主函数初始化
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_I2C_Init();
MX_USART1_UART_Init(); // For WiFi
MX_USART2_UART_Init(); // For Debug
OLED_Init();
Sensors_Init(); // 初始化所有传感器
WiFi_Init(); // 初始化ESP8266
// 2. 主循环
while (1) {
// 2.1 读取传感器数据 (可加延时防读取过快)
Temperature = SHT30_ReadTemp();
Humidity = SHT30_ReadHumidity();
Pressure = BMP280_ReadPressure();
Light = BH1750_ReadLight();
// ... 读取其他传感器
// 2.2 数据预处理 (滤波,计算)
Filtered_Temp = LowPass_Filter(Temperature, Old_Temp);
// 2.3 本地显示更新
OLED_ShowString(0, 0, "Temp:");
OLED_ShowNum(40, 0, Filtered_Temp, 2, 16);
// 2.4 判断是否报警
if (Filtered_Temp > Temp_MAX_Threshold) {
LED_Red_On();
Buzzer_On();
}
// 2.5 无线发送数据 (例如每5秒发送一次)
if (HAL_GetTick() - sendTime > 5000) {
sendTime = HAL_GetTick();
WiFi_SendData(Temp, Humidity, ...); // 通过串口发送AT指令给ESP8266
}
// 2.6 处理用户按键
Key_Scan();
HAL_Delay(500); // 主循环延时
}
}
3. 关键驱动模块
-
sht30.c/.h:SHT30传感器的驱动函数。 -
bmp280.c/.h:BMP280传感器的驱动函数。 -
oled.c/.h:OLED显示屏的驱动函数。 -
esp8266.c/.h:封装AT指令,实现连接Wi-Fi、TCP连接、发送数据等功能。 -
filter.c/.h:实现软件滤波算法(如均值滤波、一阶低通滤波)。
第三部分:数据上行与展示(可选)
1. 通信协议
-
MQTT协议:是物联网首选协议,轻量级,发布/订阅模式。ESP8266连接到MQTT Broker(服务器),STM32将数据打包成JSON格式通过ESP8266发布到指定主题(Topic)。
-
示例JSON:
{"temp": 26.5, "humi": 45, "light": 300}
-
2. 云平台/上位机
-
本地部署:
-
Home Assistant:在树莓派或电脑上部署,通过MQTT集成接收数据,可制作非常美观的UI控制面板。
-
Node-RED:图形化编程工具,轻松实现数据流处理和简单UI展示。
-
-
公有云平台:
-
ThingsBoard:开源IoT平台,功能强大,支持设备管理、数据可视化和报警。
-
阿里云IoT平台 / 腾讯云IoT Explorer:提供一站式解决方案,稳定可靠。
-
系统设计要点
-
低功耗考虑:如果采用电池供电,需要让STM32和传感器在空闲时进入休眠模式(Stop或Standby),定时唤醒采集。
-
数据准确性:软件滤波算法对传感器数据的稳定性至关重要。
-
稳定性:
-
为Wi-Fi通信增加重连机制。
-
加入看门狗(IWDG/WWDG),防止程序跑飞。
-
-
扩展性:硬件设计留出多余的I2C、UART接口,软件采用模块化编程,便于未来增加新传感器(如二氧化碳、噪音传感器)。
代码实现:






































魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)