基于STM32F103C8T6的智能家居环境监测系统(多传感器+WiFi+OLED)
2026/8/3 10:38:35 网站建设 项目流程

基于STM32F103C8T6的智能家居环境监测系统(多传感器+WiFi+OLED)


前言

随着人们对居住环境健康与安全的关注度日益提升,实时监测室内温湿度、气压、空气质量等参数变得越来越重要。市面上的环境监测设备功能单一或价格偏高,于是萌生了用STM32自己搭建一套多功能环境监测系统的想法。

本项目以STM32F103C8T6为主控,集成了6种环境传感器(温湿度、气压、烟雾、一氧化碳、空气质量、光照),通过OLED分页显示各项数据,4按键菜单导航交互操作,并利用ESP8266-01S将数据通过WiFi实时推送到手机,超标时还有声光报警。整个系统成本低、扩展性强,非常适合嵌入式学习和DIY。

项目亮点速览:

  • 7项环境参数同时采集(温/湿/压/光/烟/CO/空气)
  • OLED 8页分页显示 + 菜单导航状态机
  • WiFi双模自动切换(STA优先,AP兜底)
  • 手机TCP实时接收数据
  • 超标声光报警

一、系统总体设计

1.1 系统架构

系统采用“主控-传感器-显示-通信”四层架构,STM32F103C8T6作为核心,通过不同接口与各模块连接:

层级模块接口STM32引脚
传感器层DHT11温湿度单总线(GPIO)PB4
传感器层BMP280气压软件I2CPB10/PB11
传感器层MQ-2烟雾ADCPA7
传感器层MQ-7一氧化碳ADCPA6
传感器层MQ-135空气质量ADCPA5
传感器层光敏传感器ADCPA4
显示交互层0.96寸OLED软件I2CPB6/PB7
显示交互层4个独立按键GPIOPB12~PB15
显示交互层LED+蜂鸣器GPIOPA0/PA1
通信层ESP8266-01SUSART2PA2/PA3

设计要点:BMP280和OLED都用I2C,但本项目采用两组独立的软件I2C(BMP280接PB10/PB11,OLED接PB6/PB7),避免地址冲突,也降低了时序耦合风险。

1.2 功能概览

功能模块具体描述
多参数采集同时采集温度、湿度、气压、光照、烟雾、CO、空气质量共7项参数
本地显示OLED实时分页显示,8个数据页 + 菜单页
交互控制4按键实现上移/下移/确定/返回菜单导航
无线传输ESP8266建立TCP服务器,手机APP实时接收数据
超限报警烟雾/CO/空气质量超标时LED闪烁+蜂鸣器鸣响
双模WiFiSTA优先连接路由器,失败自动切换AP热点

二、元器件清单

完整的元器件清单如下,供大家参考采购。

2.1 主控核心

元件型号规格数量用途
STM32核心板STM32F103C8T6(Cortex-M3, 72MHz, 64KB Flash, 20KB SRAM)1系统主控
ST-Link调试器ST-Link V2(SWD/JTAG)1程序下载与调试

2.2 环境传感器

元件型号规格数量用途
温湿度传感器DHT11(0-50℃,±2℃;20-90%RH,±5%RH)1检测温湿度
气压传感器BMP280(I2C地址0x76,300~1100hPa)1检测大气压强
烟雾传感器MQ-2(模拟输出,5V供电)1烟雾/LPG/甲烷检测
一氧化碳传感器MQ-7(模拟输出,5V供电)1CO浓度检测
空气质量传感器MQ-135(模拟输出,5V供电)1NH3/NOx/CO2等有害气体
光敏传感器光敏电阻模块(AO+DO双输出)1环境光照检测

2.3 人机交互 & 通信

元件型号规格数量用途
OLED显示屏0.96寸 I2C SSD1306 128×641数据显示与菜单导航
独立按键12×12mm轻触开关4菜单导航(上移/下移/确定/返回)
LED3mm红色 + 150Ω限流电阻1报警指示
蜂鸣器有源蜂鸣器 5V1报警提示音
WiFi模块ESP8266-01S(AT指令,3.3V)1WiFi数据传输

2.4 外围电路

元件规格数量用途
杜邦线母对母/公对母/公对公 各10根1套模块连线
面包板830孔1块电路搭建
电阻10kΩ×4, 150Ω×1, 1kΩ若干若干上拉/限流/分压

避坑提醒

  1. ESP8266-01S严禁接5V,峰值电流可达200mA+
  2. MQ系列传感器需要预热几分钟才能稳定输出

三、硬件设计

3.1 引脚分配总览

STM32F103C8T6共48个引脚,本项目使用了17个GPIO:

引脚功能模式连接模块
PA0LED推挽输出报警指示灯(低电平亮)
PA1蜂鸣器推挽输出有源蜂鸣器(低电平响)
PA2USART2_TX复用推挽ESP8266 RXD
PA3USART2_RX浮空输入ESP8266 TXD
PA4ADC1_IN4模拟输入光敏传感器
PA5ADC1_IN5模拟输入MQ-135
PA6ADC1_IN6模拟输入MQ-7
PA7ADC1_IN7模拟输入MQ-2
PB4GPIO开漏/输入DHT11 DATA
PB6I2C_SCL(软件)开漏输出OLED SCL
PB7I2C_SDA(软件)开漏输出OLED SDA
PB10I2C_SCL(软件)开漏输出BMP280 SCL
PB11I2C_SDA(软件)开漏输出BMP280 SDA
PB12KEY1上拉输入按键1-上移
PB13KEY2上拉输入按键2-下移
PB14KEY3上拉输入按键3-确定
PB15KEY4上拉输入按键4-返回

引脚资源利用率约46%,还有充足空间扩展更多传感器。

3.2 关键硬件连接说明

ESP8266-01S接线(最易出错,重点注意):

ESP8266-01SSTM32说明
VCC3.3V严禁接5V
GNDGND共地
TXDPA3 (USART2_RX)模块发送→MCU接收
RXDPA2 (USART2_TX)MCU发送→模块接收
EN/CH_PD3.3V使能引脚,高电平有效

四、软件设计

4.1 软件架构

main.c ├── 系统初始化层 │ ├──OLED_Init()// OLED初始化│ ├──LED_Init()// LED+蜂鸣器GPIO初始化│ ├──AD_Init()// ADC1初始化(4通道轮询)│ ├──DHT11_Init()// DHT11初始化│ ├──ESP8266_Init()// USART2+中断初始化│ ├──BMP280_Init()// BMP280软件I2C初始化│ └──Key_Init()// 按键GPIO初始化│ ├── 主循环逻辑 │ ├── 按键扫描与菜单状态机处理 │ ├── ESP8266客户端连接检测 │ ├── DHT11数据采集 │ ├── ADC四通道轮询采集 │ ├── 报警阈值判断与声光报警 │ ├── BMP280气压温度读取 │ ├── OLED显示刷新 │ └── WiFi数据推送(TCP,每2秒) │ └── 中断服务层 └── USART2_IRQHandler// ESP8266串口数据接收中断

4.2 OLED分页显示

OLED采用8个数据页 + 1个菜单页的设计,每页固定4行布局:

页面标题显示内容数据来源
0Temperature温度(℃)BMP280/DHT11
1Humidity湿度(%)DHT11
2Barometer气压(hPa)BMP280
3Light光照(%)光敏ADC
4Smoke烟雾(ppm)MQ-2
5COCO(ppm)MQ-7
6Air Quality空气质量(ppm)MQ-135
7WiFi Info模式/IP/端口ESP8266

每页布局:第1行=标题栏,第2行=实时数值,第4行=传感器来源

4.3 菜单导航——按键交互

4个按键的映射关系:

按键引脚菜单模式功能数据模式功能
按键1PB12上移 / 翻上一页切换上一个传感器页
按键2PB13下移 / 翻下一页切换下一个传感器页
按键3PB14确定(进入数据页)
按键4PB15返回(回到菜单)

菜单状态机逻辑:

菜单模式 (g_in_menu=1) │ │ 按键3(确定) ▼ 数据显示模式 (g_in_menu=0) │ │ 按键4(返回) ▼ 回到菜单模式

菜单共8项,每页显示3项,分3页显示。关键变量:

  • g_menu_page:当前菜单页码(0~2)
  • g_menu_cursor:页内光标位置(0~2)
  • g_sensor_page = g_menu_page * 3 + g_menu_cursor:选中项索引(0~7)
// 菜单项数组staticconstchar*menu_items[]={"Temperature","Humidity","Pressure","Light","Smoke","CO","Air Quality","WiFi Info"};

4.4 WiFi数据传输方案

连接策略(STA/AP自动回退)
上电初始化 │ ▼ 尝试STA模式连接路由器 │ ├── 成功 → 获取STA_IP → 启动TCP Server(端口8080) │ └── 失败 → 自动切换AP模式 │ ▼ 创建热点"STM32-Env"(密码12345678) │ ▼ 固定IP: 192.168.4.1 │ ▼ 启动TCP Server(端口8080)
数据推送协议

推送周期约2秒,数据格式为纯文本:

T:28,H:65,P:1013,L:45 G2:120,G7:30,GA:60
字段含义示例
T温度(℃)T:28
H湿度(%)H:65
P气压(hPa)P:1013
L光照(%)L:45
G2烟雾(ppm)G2:120
G7CO(ppm)G7:30
GA空气质量(ppm)GA:60
手机连接方式
  1. STA模式:手机和STM32连同一个WiFi,用TCP调试助手连接路由器分配的IP:8080
  2. AP模式:手机直接连"STM32-Env"热点,访问192.168.4.1:8080
  3. 推荐使用「网络调试助手」或「SocketTool」等TCP工具接收数据

五、报警功能

当环境参数超标时,系统自动触发声光报警:

参数报警阈值触发动作
烟雾(MQ-2)≥ 240 ppmLED闪烁 + 蜂鸣器鸣响
一氧化碳(MQ-7)≥ 50 ppmLED闪烁 + 蜂鸣器鸣响
空气质量(MQ-135)≥ 80 ppmLED闪烁 + 蜂鸣器鸣响

测试方法:用打火机在MQ-7附近释放少量气体,即可触发CO报警。


六、使用说明

6.1 硬件连接

  1. STM32核心板插入面包板中央
  2. 按引脚分配表连接各传感器(ESP8266接3.3V,MQ系列接5V)
  3. 4个按键一端接PB12~PB15,另一端接GND
  4. LED接PA0→150Ω→GND,蜂鸣器接PA1→GND
  5. USB供电(5V,建议≥1A)

6.2 软件烧录

  1. ST-Link连接SWD接口(VCC/GND/SWCLK/SWDIO)
  2. 打开Keil工程Project.uvprojx
  3. 编译(F7)确保0 Error
  4. 下载(F8)烧录到STM32
  5. 按复位键,OLED显示启动画面

6.3 首次运行流程

  1. 上电自检:OLED显示--- STM32 Env ---
  2. WiFi连接:优先STA模式,失败自动开AP热点
  3. 传感器初始化:检测BMP280芯片ID(0x58)
  4. 进入菜单:按键1/2上下移动,按键3进入详情页
  5. 查看数据:数据页按1/2切换,按4返回菜单
  6. 手机连接:TCP调试助手连接 IP:8080

七、项目文件结构

代码/ ├── Hardware/ // 硬件驱动层 │ ├── AD.c/h // ADC1多通道采集驱动 │ ├── BMP280.c/h // BMP280气压传感器驱动 │ ├── DHT11.c/h // DHT11温湿度驱动 │ ├── ESP8266.c/h // ESP8266 WiFi AT指令驱动 │ ├── Key.c/h // 4按键扫描驱动 │ ├── LED.c/h // LED+蜂鸣器驱动 │ ├── OLED.c/h // SSD1306 OLED驱动 │ └── OLED_Font.h // 8×16 ASCII字模表 ├── Library/ // STM32标准外设库 ├── Start/ // 启动文件 ├── System/ // 系统公共函数 ├── User/ │ └── main.c // 主程序(状态机+主循环) └── Project.uvprojx // Keil工程文件

八、总结与展望

项目成果

本项目实现了一套基于STM32的智能家居环境监测系统,具备多参数采集、OLED分页显示、菜单导航、WiFi数据传输、超标报警等完整功能。系统采用模块化设计,各传感器驱动独立封装,便于扩展。

不足与改进方向

  1. MQ传感器精度:MQ系列为半导体气敏传感器,精度有限,未来可换用电化学传感器(如ME2-CO)
  2. 数据存储:目前数据只在手机端实时显示,可增加SD卡或云端存储历史数据
  3. MQTT协议:ESP8266目前用TCP透传,后续可升级为MQTT协议对接物联网平台(如阿里云IoT、OneNET)
  4. 手机APP:目前用TCP调试助手接收数据,后续可开发专用APP,支持图表展示和报警推送
  5. 低功耗:增加电池供电方案和休眠唤醒机制

资源下载

完整项目资源包已上传,包含:

资源说明
完整工程代码Keil MDK工程,含所有驱动源码
项目文档(Word)系统架构、引脚分配、软件设计、使用说明
项目展示PPT10页,可用于答辩或项目展示
硬件设计电路图和PCB制版文件

资源链接:https://download.csdn.net/download/2501_91784214/93217936


如果这篇文章对你有帮助,欢迎点赞收藏关注,也欢迎在评论区交流讨论!👇


开发环境:Keil MDK-ARM v5.38 + STM32标准外设库v3.5.0 + ST-Link V2

适用场景:嵌入式课程设计、物联网DIY项目

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询