嵌入式系统课程设计报告
项目名称:基于STM32的智能环境监测系统
学 院: [你的学院,如:信息科学与工程学院] 专 业: [你的专业,如:电子信息工程/自动化/计算机科学与技术] 班 级: [你的班级] 姓 名: [你的姓名] 学 号: [你的学号] 指导教师: [指导教师姓名] 完成日期: [年 月 日]
摘要
本设计旨在开发一款基于STM32微控制器的智能环境监测系统,系统以高性能、低功耗的STM32F103系列单片机作为主控核心,集成DHT11温湿度传感器、BH1750光照强度传感器以及MQ-2空气质量传感器,实现对环境中的温度、湿度、光照和可燃气体浓度等关键参数的实时采集,采集到的数据通过OLED显示屏进行本地实时显示,并利用ESP8266 Wi-Fi模块将数据上传至云平台(如阿里云IoT平台或Blynk),用户可通过手机APP或网页远程查看环境数据,并在环境参数超过安全阈值时接收报警信息。

本设计采用了模块化的编程思想,结合C语言和HAL库进行开发,实现了数据采集、处理、本地显示和远程传输等功能,经过测试,系统运行稳定,数据采集准确,响应及时,达到了预期的设计目标,本系统成本低廉、功能实用,在智能家居、农业大棚、仓储管理等领域具有广阔的应用前景。
嵌入式系统;STM32;环境监测;物联网;传感器;ESP8266
目录
第一章 绪论 1.1 项目背景与意义 1.2 国内外研究现状 1.3 主要研究内容
第二章 系统总体方案设计 2.1 设计目标与要求 2.2 系统总体架构 2.3 核心控制器选型 2.4 传感器模块选型 2.5 通信模块选型 2.6 电源模块选型

第三章 硬件系统设计 3.1 硬件总体框图 3.2 主控模块电路设计 3.3 传感器模块电路设计 3.3.1 温湿度传感器(DHT11)电路 3.3.2 光照传感器(BH1750)电路 3.3.3 空气质量传感器(MQ-2)电路 3.4 通信模块电路设计 3.4.1 Wi-Fi模块(ESP8266)电路 3.4.2 OLED显示模块电路 3.5 电源模块电路设计 3.6 PCB设计与实物图
第四章 软件系统设计 4.1 软件开发环境 4.2 系统软件总体流程 4.3 各模块驱动程序设计 4.3.1 STM32 HAL库初始化 4.3.2 DHT11数据读取程序 4.3.3 BH1750数据读取程序 4.3.4 MQ-2数据读取程序 4.3.5 OLED显示驱动程序 4.3.6 ESP8266 AT指令通信程序 4.4 数据处理与逻辑控制 4.5 云平台数据上传协议设计
第五章 系统测试与结果分析 5.1 测试环境与工具 5.2 功能测试 5.2.1 本地显示功能测试 5.2.2 数据采集准确性测试 5.2.3 远程上传功能测试 5.3 性能测试 5.3.1 系统响应时间测试 5.3.2 功耗测试 5.4 测试结果分析与讨论
第六章 总结与展望 6.1 项目总结 6.2 遇到的问题与解决方案 6.3 未来工作展望

参考文献
致谢
示例
第一章 绪论
1 项目背景与意义
随着物联网和智能传感技术的飞速发展,嵌入式系统已渗透到社会生产和生活的方方面面,环境监测作为物联网应用的重要分支,在智慧农业、智能家居、工业生产、环境保护等领域扮演着至关重要的角色,传统的环境监测系统往往存在成本高、布线复杂、无法远程监控等缺点,而基于嵌入式系统和无线通信技术的智能环境监测系统,以其低成本、易部署、可移动、能远程访问等优势,正成为研究的热点。
本项目旨在设计并实现一个集成了多种传感器的智能环境监测系统,它能够实时、准确地监测环境参数,并通过无线网络进行数据共享,这不仅能够加深我们对嵌入式系统开发流程的理解,掌握STM32微控制器、各类传感器和无线通信模块的综合应用能力,而且所设计的系统原型具有很高的实用价值和推广潜力。
2 国内外研究现状
国外在环境监测领域起步较早,已形成成熟的商业产品和解决方案,如Philips的智能家居环境监测器、Nest的温控系统等,这些产品通常集成度高、用户体验好,但价格昂贵,核心技术不对外开放。 国内近年来在该领域发展迅速,涌现了大量基于Arduino、STM32等开源平台的开源项目和商业产品,研究主要集中在传感器数据融合、低功耗设计、边缘计算以及与云平台的无缝对接等方面,许多系统仍存在数据传输不稳定、功能单一、扩展性差等问题。
3 主要研究内容
本设计的主要研究内容包括:
- 系统方案论证: 确定以STM32F103为核心,结合多种传感器和Wi-Fi模块的系统架构。
- 硬件设计与实现: 绘制电路原理图,设计PCB,焊接硬件,搭建完整的物理系统。
- 软件设计与实现: 基于STM32CubeMX和Keil MDK开发环境,编写各模块的驱动程序和主控制逻辑,实现数据采集、处理、显示和上传功能。
- 系统集成与测试: 将软硬件结合,进行系统联调,并对系统的功能、性能和稳定性进行测试分析。
第二章 系统总体方案设计
1 设计目标与要求
- 实时监测: 能够实时采集并显示温度、湿度、光照强度、可燃气体浓度。
- 数据显示: 通过OLED液晶屏实时显示当前各项环境参数。
- 远程监控: 能够将采集的数据通过Wi-Fi上传至云平台,实现远程查看。
- 阈值报警: 当某项参数(如MQ-2浓度)超过预设安全阈值时,系统能发出声光报警或通过APP推送报警信息。
- 低功耗设计: 在满足功能的前提下,尽可能降低系统功耗,可采用休眠-唤醒机制。
- 成本可控: 硬件成本控制在合理范围内,便于推广。
2 系统总体架构
本系统采用分层式架构,从下至上分为:传感器层、处理层、通信层和应用层。
- 传感器层: 负责感知环境信息,包括DHT11、BH1750、MQ-2。
- 处理层: 以STM32F103为核心,负责数据读取、处理、逻辑判断和本地显示控制。
- 通信层: 以ESP8266模块为核心,负责处理层与云平台之间的数据传输。
- 应用层: 包括云平台、手机APP或网页,负责数据存储、展示和用户交互。
3 核心控制器选型
选用 STM32F103C8T6 芯片作为主控制器,理由如下:
- 高性能: ARM Cortex-M3内核,主频高达72MHz,计算能力强。
- 丰富外设: 集成USART、I2C、SPI等多种通信接口,方便连接各类传感器和模块。
- 资源充足: 拥有64KB Flash和20KB SRAM,足以存放程序和数据。
- 生态成熟: 拥有完善的HAL库、丰富的开发资料和社区支持,开发效率高。
4 传感器模块选型
- 温湿度传感器:DHT11,数字输出,单总线协议,编程简单,成本低,满足一般精度要求。
- 光照传感器:BH1750,I2C接口,数字输出,分辨率高,量程广,适合光照强度检测。
- 空气质量传感器:MQ-2,模拟输出,对可燃气体和烟雾敏感,灵敏度高,成本低,但需要ADC进行数据采集。
5 通信模块选型
选用 ESP8266 Wi-Fi模块,理由:
- 功能强大: 完整的TCP/IP协议栈,支持STA(客户端)和AP(接入点)模式。
- AT指令控制: 可通过串口AT指令与主控MCU通信,开发灵活。
- 成本低廉: 价格非常便宜,性价比高,是物联网项目的首选。
第三章 硬件系统设计
1 硬件总体框图
graph TD
subgraph "核心控制单元"
MCU[STM32F103C8T6]
end
subgraph "传感器单元"
DHT11[温湿度传感器 DHT11]
BH1750[光照传感器 BH1750]
MQ2[空气质量传感器 MQ-2]
end
subgraph "人机交互与通信单元"
OLED[OLED显示屏]
ESP8266[ESP8266 Wi-Fi模块]
end
subgraph "电源单元"
PWR[电源模块]
end
MCU -- I2C --> BH1750
MCU -- GPIO/USART1 --> DHT11
MCU -- ADC --> MQ2
MCU -- I2C/SPI --> OLED
MCU -- USART2/UART3 --> ESP8266
PWR --> MCU
PWR --> DHT11
PWR --> BH1750
PWR --> MQ2
PWR --> OLED
PWR --> ESP8266
2 主控模块电路设计
STM32F103C8T6最小系统电路,包括电源滤波、复位电路、时钟电路(外部8MHz晶振)等,此处可附上最小系统原理图。
3 传感器模块电路设计
3.1 DHT11电路 VCC接3.3V,GND接地,DATA引脚通过一个4.7KΩ上拉电阻连接到STM32的GPIO口(如PAx)。 3.2 BH1750电路 VCC接3.3V,GND接地,SCL和SDA引脚分别连接到STM32的I2C接口(如PB6, PB7)。 3.3 MQ-2电路 VCC接5V(注意:部分模块有3.3V转5V电路),GND接地,AO(模拟输出)引脚连接到STM32的ADC引脚(如PA0)。
4 通信模块电路设计
4.1 ESP8266电路 VCC接3.3V(注意:模块电流较大,需确保电源稳定),CH_PD/EN接3.3V,URXD和UTXD分别交叉连接到STM32的UART接口(如USART2的TX, RX)。 4.2 OLED电路 采用I2C接口,VCC接3.3V,GND接地,SCL和SDA连接到STM32的另一个I2C接口(如PB8, PB9)。
5 电源模块电路设计
系统可由USB 5V供电,通过AMS1117-3.3V LDO芯片将5V转换为3.3V,为STM32和大部分传感器模块供电,ESP8266在发射时电流较大,可增加滤波电容。
6 PCB设计与实物图
(此处应附上使用Altium Designer或KiCad等软件设计的PCB布局图,以及焊接完成后的系统实物照片。)
第四章 软件系统设计
1 软件开发环境
- IDE: Keil MDK 5
- MCU配置工具: STM32CubeMX
- 编程语言: C语言
- 库文件: STM32 HAL库
- 串口调试工具: XCOM / MobaXterm
2 系统软件总体流程
graph TD
Start[系统上电] --> Init[系统初始化]
Init --> While[进入主循环]
While --> ReadSensor[读取传感器数据]
ReadSensor --> Process[数据处理与判断]
Process --> Display[在OLED上显示]
Process --> CheckWiFi[检查Wi-Fi连接]
CheckWiFi -- 已连接 --> SendData[发送数据到云平台]
CheckWiFi -- 未连接 --> ConnectWiFi[尝试连接Wi-Fi]
SendData --> CheckAlarm[检查是否报警]
CheckAlarm -- 超阈值 --> Alarm[触发报警]
CheckAlarm -- 正常 --> Delay[延时1s]
Delay --> While
3 各模块驱动程序设计
3.1 STM32 HAL库初始化 使用STM32CubeMX生成初始化代码,配置:
- RCC:设置系统时钟为72MHz。
- GPIO:配置DHT11、MQ2的GPIO。
- ADC:配置MQ2使用的ADC通道,为单次转换模式。
- I2C1:配置为BH1750和OLED使用的I2C接口。
- USART1:配置为与DHT11通信(模拟单总线)。
- USART2:配置为与ESP8266通信。
3.2 DHT11数据读取程序 通过模拟单总线时序,向DHT11发送开始信号,然后读取40位数据(8位湿度整数+8位湿度小数+8位温度整数+8位温度小数+8位校验和),代码示例:
// DHT11读取函数,返回温度和湿度
uint8_t DHT11_Read_Data(float *temp, float *humi) {
// ... 实现单总线时序 ...
// 读取40位数据并校验
// ...
return 0; // 返回0表示成功
}
3.3 ESP8266 AT指令通信程序 封装发送AT指令并接收响应的函数,实现Wi-Fi连接、TCP连接、数据发送等功能。
// ESP8266发送AT指令并等待响应
void ESP8266_Send_AT_Command(char *cmd, char *expected_resp, uint32_t timeout) {
HAL_UART_Transmit(&huart2, (uint8_t*)cmd, strlen(cmd), 100);
// ... 等待并解析响应 ...
}
4 数据处理与逻辑控制
在主循环中,定时读取所有传感器数据,进行格式化(如将ADC原始值转换为浓度),判断是否超过阈值,并组织成JSON格式字符串准备上传。
5 云平台数据上传协议设计
采用JSON格式封装数据,通过HTTP POST请求或MQTT协议上传。
{
"device_id": "STM32_001",
"timestamp": "2025-10-27T10:00:00Z",
"temperature": 25.6,
"humidity": 60.2,
"light": 800,
"gas": 150
}
第五章 系统测试与结果分析
1 测试环境与工具
- 测试环境: 实验室环境,温度约25℃,湿度约60%。
- 测试工具: 万用表、示波器(可选)、另一台已知精度的温湿度计作为参照、手机。
2 功能测试
2.1 本地显示功能测试 系统上电后,OLED屏幕能正确显示“Env Monitor”字样,并每隔1秒刷新一次温湿度、光照和气体浓度数据。结果: 显示正常,数据刷新流畅。
2.2 数据采集准确性测试 将系统与标准温湿度计、光照计放置在一起,对比读数。 | 参数 | 系统读数 | 标准设备读数 | 误差 | | :--- | :--- | :--- | :--- | | 温度 | 25.3℃ | 25.0℃ | +0.3℃ | | 湿度 | 58% | 60% | -2% | | 光照 | 750 Lux | 800 Lux | -6.25% | 结果: 温湿度数据在可接受误差范围内,光照传感器误差稍大,但趋势一致,满足基本监测需求。
2.3 远程上传功能测试 配置好Wi-Fi和云平台信息后,系统能成功连接路由器并登录云平台,在云平台控制台能观察到数据以JSON格式定时上传。结果: 连接稳定,数据上传成功,无丢包现象。
3 性能测试
3.1 系统响应时间测试 从传感器数据采集完成到OLED显示更新,耗时约50ms,从数据采集完成到云平台上传成功,耗时约200-300ms(取决于网络状况)。结果: 系统响应迅速,满足实时性要求。
4 测试结果分析与讨论
经测试,系统各项功能均达到设计要求,运行稳定,DHT11和BH1750的驱动程序工作正常,数据采集准确,ESP8266与云平台的通信稳定可靠,不足之处在于MQ-2传感器的标定较为复杂,读数与实际气体浓度的对应关系需要进一步校准。
第六章 总结与展望
1 项目总结
本课程设计成功实现了一个基于STM32的智能环境监测系统,通过该项目,我系统地掌握了嵌入式系统从硬件设计、软件编程到系统集成的完整开发流程,特别是在STM32的外设配置、传感器驱动开发以及物联网通信协议方面获得了宝贵的实践经验。
2 遇到的问题与解决方案
- 问题: DHT11数据读取不稳定,经常校验失败。 解决方案: 检查硬件上拉电阻,并在软件中增加超时重试机制,提高数据读取的可靠性。
- 问题: ESP8266频繁复位,无法正常通信。 解决方案: 检查电源供应,发现是3.3V电源电流不足导致,更换了更大电流输出的LDO芯片,并增加了滤波电容后问题解决。
- 问题: I2C设备地址冲突(OLED和BH1750可能地址相同)。 解决方案: 通过查阅模块手册,确认两者地址不同,若地址相同,需通过硬件引脚进行地址选择,或在软件中分时复用总线。
3 未来工作展望
- 增加传感器种类: 集成PM2.5、甲醛、二氧化碳等传感器,实现更全面的环境监测。
- 优化低功耗: 引入STM32的低功耗模式,在无任务时让MCU进入睡眠状态,通过定时器或外部中断唤醒,以电池供电时能大大延长续航时间。
- 实现边缘计算: 在本地进行简单的数据分析(如计算24小时平均温度),只将异常数据或统计结果上传云端,减少网络流量和云平台压力。
- 开发配套APP: 开发一个功能更完善的手机APP,实现数据图表展示、历史数据查询、阈值自定义等功能。
参考文献
[1] STMicroelectronics. STM32F103xx Datasheet [Z]. 2025. [2] 张三. STM32嵌入式系统开发实战指南[M]. 北京: 电子工业出版社, 2025. [3] 李四. 基于物联网的智能家居环境监测系统设计[J]. 电子技术应用, 2025, 48(5): 12-15. [4] Adafruit Industries. DHT11/DHT22 Basic Tutorial[EB/OL]. https://learn.adafruit.com/dht, 2025.
致谢
我要衷心感谢我的指导教师[指导教师姓名]老师在课程设计期间给予我的悉心指导和无私帮助,从选题、方案论证到具体实现,老师都提出了许多宝贵的意见,感谢实验室的同学们在项目过程中给予的讨论和支持,感谢所有参考文献的作者,他们的工作为本次设计提供了坚实的基础。