当前位置: 首页 > news >正文

基于STM32的智能宿舍管理系统设计与实现


一、项目概述

1.1 项目背景与目标

高校宿舍管理场景看起来简单,实际是一个典型的“多因素、强实时、低成本”系统。传统方式主要依赖人工巡查和经验判断,存在几个明显问题:

  • 宿舍温湿度、光照、烟雾等环境参数无法持续采集,异常情况发现滞后
  • 用电统计粗放,缺少实时功率、累计电量和超额预警能力
  • 学生离开宿舍后设备仍长时间运行,存在明显能源浪费
  • 管理数据零散,缺少历史记录与趋势分析,后续追溯困难

基于这些痛点,可以把宿舍管理系统拆成三类需求:

  • 环境监测:实时采集温湿度、烟雾、光照、人体在位状态
  • 能源管理:实时采集电压、电流、功率,并做电费估算与超额提醒
  • 远程可视化:通过无线链路把数据上传到上位机,做图形化展示和历史存储

本文整理一套适合毕业设计展示的完整方案:以STM32F103C8T6为核心控制器,集成DHT11、INA226、MQ-2、TEMT6000、PIR等传感器,使用ESP8266-01S搭建 AP 模式无线链路,最后由Python + PyQt5上位机完成实时界面展示、SQLite 入库与异常报警。

1.2 技术栈选型
技术领域具体选型选择理由
主控芯片STM32F103C8T6成本低、开发资料多、GPIO/ADC/I2C/UART 资源足够
温湿度检测DHT11接口简单、成本低,适合宿舍场景演示
电流功率检测INA226I2C 接口、精度高,可直接测电流/电压/功率
烟雾检测MQ-2成熟常见,适合做火灾隐患预警演示
光照检测TEMT6000模拟量输出,接 STM32 ADC 即可
人体检测PIR 红外人体模块低成本、逻辑清晰,适合联动节能控制
无线通信ESP8266-01S成本低、AT 指令成熟、WiFi 部署方便
网络模式AP + TCP本地直连上位机,便于宿舍场景演示和调试
上位机Python + PyQt5开发效率高,适合毕业设计可视化展示
数据存储SQLite轻量级、零部署,适合本地历史数据管理
1.3 系统功能
  • 实时采集温度、湿度、光照、烟雾浓度、人体检测状态
  • 实时采集电压、电流、功率并估算累计电费
  • OLED 本地显示关键参数,断网时仍可查看本地状态
  • ESP8266 建立热点并通过 TCP 向上位机周期性发送数据
  • 上位机实时刷新监测界面,支持历史数据存储与查询
  • 当功率超阈值、烟雾异常或环境异常时,触发本地和上位机双重报警
  • 基于人体在位状态做简单节能联动,为后续智能控制预留接口

二、系统架构设计

2.1 整体架构

系统采用“采集端 + 通信端 + 上位机”的三端协同结构,适合毕业设计答辩时讲清楚分层思路。

  • 感知层:STM32 负责采集宿舍环境与用电参数,并做本地阈值判断
  • 传输层:ESP8266 负责无线接入,建立 AP 热点和 TCP 服务器
  • 应用层:PyQt5 上位机负责数据接收、界面展示、日志记录、SQLite 存储

推荐在 CSDN 中插入系统架构图:

![系统架构图](architecture.png)

2.2 数据流向

本系统的数据链路比较直观,可以概括为:

控制思路也可以进一步扩展:

  • 上位机下发阈值参数
  • STM32 更新本地阈值
  • 后续可扩展风扇、继电器、照明等联动执行器

推荐在正文中插入数据流向图:

![数据流向图](dataflow.png)

2.3 设计指标

为了让毕业设计更像工程项目,建议在文章中加入量化指标:

指标项目标值说明
数据采集周期2s与上位机刷新周期保持一致
报警响应时间≤1s功率超限、烟雾异常时快速提示
WiFi 通信延迟<100ms宿舍内本地 AP 场景下可实现
连续稳定运行≥24h满足毕设演示和可靠性测试
硬件成本<100 元体现方案的低成本可落地性

三、硬件设计与连接

3.1 硬件清单
组件型号数量说明
MCU 主控STM32F103C8T6 最小系统板1系统核心控制器
温湿度传感器DHT111宿舍温湿度采集
电流功率模块INA2261电压、电流、功率测量
烟雾传感器MQ-21火灾隐患预警
光照传感器TEMT60001宿舍亮度采集
人体检测模块PIR1人体在位检测
WiFi 模块ESP8266-01S1本地热点与 TCP 传输
显示模块0.96 寸 OLED1本地数据显示
LED 指示灯红色 LED1超额预警/告警
电源模块5V/3.3V 稳压1给系统供电
3.2 引脚连接说明
模块STM32 引脚接口类型备注
DHT11 DATAPA7GPIO 单总线外接 4.7K 上拉
INA226 SCL/SDAPB6 / PB7I2C1监测电压电流功率
MQ-2 AOPA0ADC1_CH0模拟量采集
MQ-2 DOPB1GPIO 输入数字阈值告警
TEMT6000 AOPA1ADC1_CH1光照模拟量采集
PIR OUTPB12GPIO 输入检测人体活动
OLED SCL/SDAPB6 / PB7I2C1与 INA226 共总线
ESP8266 TX/RXPA10 / PA9USART1交叉连接
预警 LEDPB13GPIO 输出超额或异常告警
3.3 关键硬件注意事项

⚠️重要提醒:

  1. ESP8266-01S 必须使用稳定的 3.3V 供电,峰值电流可达 300mA,不能直接从 STM32 板载 3.3V 弱供电口硬拖。
  2. MQ-2 模拟输出可能接近 5V,进入 STM32 ADC 前必须做分压处理。
  3. DHT11 的采样周期不要太快,建议 1 秒以上,否则容易读到重复数据或校验失败。
  4. INA226 的分流电阻选型会直接影响测量精度,建议使用低阻值、高精度分流电阻。
  5. 如果后续接入继电器控制大功率负载,必须做好电源隔离和反灌保护。
3.4 软件开发环境
# STM32 端STM32CubeIDE / Keil MDK# 上位机端pipinstallPyQt5 pyqtgraph matplotlib

四、代码实现详解

4.1 主程序整体思路

STM32 端采用“前后台”结构最容易讲清楚:

  • 初始化 GPIO、ADC、I2C、USART、定时器
  • 初始化 DHT11、INA226、OLED、ESP8266
  • 主循环按顺序采集各类传感器
  • 将采集结果刷新到 OLED
  • 每 2 秒打包一帧文本数据,通过 ESP8266 发送给上位机
  • 根据阈值判断是否触发 LED 预警

核心主循环可以写成下面这种形式:

while(1){Read_DHT11(&temp,&humi);power=INA226_GetPower();smoke=MQ2_ReadValue();light=TEMT6000_ReadLux();motion=PIR_ReadState();OLED_ShowData(temp,humi,power,smoke,light,motion);if(send_flag){SendSensorData(temp,humi,power,smoke,light,motion);send_flag=0;}Alarm_Check(power,smoke);HAL_Delay(200);}
4.2 DHT11 温湿度采集

DHT11 适合毕业设计入门实现,成本低、逻辑简单,核心是单总线时序控制。

头文件示例:

// dht11.h#ifndef__DHT11_H#define__DHT11_H#include"stm32f1xx_hal.h"uint8_tDHT11_ReadData(uint8_t*temp,uint8_t*humi);#endif

实现示例:

// dht11.c#include"dht11.h"uint8_tDHT11_ReadData(uint8_t*temp,uint8_t*humi){uint8_tbuf[5]={0};// 这里省略详细时序,核心是启动信号、响应检测、40位数据读取和校验// 成功后返回温湿度整数部分*humi=buf[0];*temp=buf[2];if((uint8_t)(buf[0]+buf[1]+buf[2]+buf[3])==buf[4]){return0;}return1;}
4.3 INA226 电流/功率采集

INA226 是这个项目里比较加分的模块,因为它不仅能看电流,还能算功率和总线电压,更容易体现“能源管理”而不只是“环境监测”。

// ina226.h#ifndef__INA226_H#define__INA226_H#include"stm32f1xx_hal.h"floatINA226_GetVoltage(void);floatINA226_GetCurrent(void);floatINA226_GetPower(void);#endif
// ina226.c#include"ina226.h"externI2C_HandleTypeDef hi2c1;floatINA226_GetVoltage(void){uint16_traw=0;// 读取总线电压寄存器,换算为实际电压returnraw*1.25f/1000.0f;}floatINA226_GetCurrent(void){uint16_traw=0;// 读取分流电压寄存器并结合分流电阻换算电流returnraw*5.9f;}floatINA226_GetPower(void){returnINA226_GetVoltage()*INA226_GetCurrent();}
4.4 MQ-2 与 TEMT6000 模拟量采集

这两个模块都可以直接走 ADC,代码思路很清晰:采样、滤波、换算。

uint16_tADC_ReadChannel(uint32_tchannel){ADC_ChannelConfTypeDef sConfig={0};sConfig.Channel=channel;sConfig.Rank=ADC_REGULAR_RANK_1;sConfig.SamplingTime=ADC_SAMPLETIME_55CYCLES_5;HAL_ADC_ConfigChannel(&hadc1,&sConfig);HAL_ADC_Start(&hadc1);HAL_ADC_PollForConversion(&hadc1,10);returnHAL_ADC_GetValue(&hadc1);}floatTEMT6000_ReadLux(void){uint16_tadc=ADC_ReadChannel(ADC_CHANNEL_1);returnadc*0.5f;}floatMQ2_ReadValue(void){uint16_tadc=ADC_ReadChannel(ADC_CHANNEL_0);return(adc/4095.0f)*100.0f;}
4.5 PIR 人体检测与节能联动

PIR 模块输出的是数字量,非常适合做简单联动。比如:

  • 检测到长时间无人时,标记宿舍为空闲状态
  • 后续扩展控制照明、风扇、插座继电器
  • 结合功率数据,做“有人/无人”用电行为分析
uint8_tPIR_ReadState(void){returnHAL_GPIO_ReadPin(GPIOB,GPIO_PIN_12)==GPIO_PIN_SET?1:0;}
4.6 ESP8266 AP 模式通信

这个系统没有强依赖外网,最适合毕业设计现场演示的方式就是让 ESP8266 直接开热点,上位机连它的热点,然后走 TCP 收数。

初始化流程:

  1. AT测试模块是否在线
  2. 设置工作模式为 AP
  3. 配置 SSID 和密码
  4. 开启多连接
  5. 建立 TCP Server
// esp8266.cvoidESP8266_Init(void){ESP_SendCmd("AT\r\n","OK",1000);ESP_SendCmd("AT+CWMODE=2\r\n","OK",1000);ESP_SendCmd("AT+CWSAP=\"SmartDorm\",\"12345678\",5,3\r\n","OK",3000);ESP_SendCmd("AT+CIPMUX=1\r\n","OK",1000);ESP_SendCmd("AT+CIPSERVER=1,8080\r\n","OK",1000);}

数据发送建议使用文本协议,调试最方便:

voidSendSensorData(floattemp,floathumi,floatpower,floatsmoke,floatlight,uint8_tmotion){chartx_buf[128];sprintf(tx_buf,"Temp:%.1fC,Humi:%.1f%%,Power:%.2fmW,GasConc:%.2f,Light:%.2f,Motion:%s\r\n",temp,humi,power,smoke,light,motion?"YES":"NO");ESP8266_SendData(tx_buf);}
4.7 PyQt5 上位机接收与可视化

上位机建议采用多线程:

  • 主线程负责界面
  • 网络线程负责 TCP 接收
  • 定时器负责界面刷新和数据库写入

TCP 接收核心示例:

importsocketfromPyQt5.QtCoreimportQThread,pyqtSignalclassDataReceiver(QThread):data_received=pyqtSignal(dict)defrun(self):sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)sock.connect(("192.168.4.1",8080))whileTrue:raw=sock.recv(1024).decode("utf-8").strip()ifraw:data=self.parse_data(raw)self.data_received.emit(data)defparse_data(self,raw):result={}foriteminraw.split(","):if":"initem:k,v=item.split(":",1)result[k]=vreturnresult

UI 层可以做以下几个区域:

  • 温湿度卡片
  • 功率/电费卡片
  • 烟雾和人体状态卡片
  • 系统日志窗口
  • 历史数据查询窗口

如果追求展示效果,可以再加一块实时曲线区域,用pyqtgraph刷功率或温度变化趋势。

4.8 SQLite 历史数据存储

SQLite 足够支撑毕设演示,而且实现简单。

importsqlite3 conn=sqlite3.connect("sensor_data.db")cur=conn.cursor()cur.execute(""" CREATE TABLE IF NOT EXISTS sensor_data ( id INTEGER PRIMARY KEY AUTOINCREMENT, ts TEXT, temp REAL, humi REAL, power REAL, smoke REAL, light REAL, motion INTEGER ) """)conn.commit()

建议每 60 秒存一次,或者每接收一帧就写一次。前者更轻,后者数据更完整。

五、调试与优化

5.1 常见问题排查
  1. ESP8266 无法稳定连接

    • 先确认供电是否稳定
    • 再确认串口波特率和 AT 固件版本
    • 最后用串口助手单独测试 AT 指令是否正常
  2. DHT11 偶发读取失败

    • 检查上拉电阻
    • 降低采样频率
    • 避免中断或串口发送打断关键时序
  3. MQ-2 数据波动大

    • 预热时间不足
    • 模拟量受电源噪声影响
    • 建议增加多次采样平均滤波
  4. 上位机界面卡顿

    • 不要在 UI 主线程里直接做阻塞式recv
    • 把网络接收和界面刷新拆开
5.2 工程优化建议
  • 传感器数据增加滑动平均滤波,减少抖动
  • 通信协议增加帧头和校验字段,提高容错性
  • 上位机增加断线重连机制,提升演示稳定性
  • 阈值参数做成可配置项,而不是写死在代码里
  • 把 AP 模式升级为 STA + MQTT,可以进一步接入云平台

六、项目总结与扩展

6.1 项目成果

这套系统的价值不在于“模块多”,而在于把环境监测、能源管理、安全预警、上位机可视化这四块真正串起来了。对毕业设计来说,它有几个明显优势:

  • 软硬件链路完整,容易形成“系统设计与实现”的叙事
  • 既有嵌入式采集,也有上位机界面,展示效果好
  • 场景贴近校园宿舍,选题容易被老师理解
  • 成本可控,硬件容易采购,调试门槛不高
6.2 可扩展方向
  • 增加继电器,做照明/插座的节能联动控制
  • 接入 CO2、甲醛等空气质量传感器,提升环境监测维度
  • 将 AP + TCP 升级为 MQTT 云平台架构
  • 引入语音模块,实现语音播报和语音查询
  • 基于历史数据做异常检测或用电行为分析
6.3 写在最后

如果你现在正准备 STM32 相关毕业设计,这类“宿舍管理/环境监测/用电预警”方向是比较稳的选题:硬件复杂度适中、工程链路完整、可视化效果强,答辩时也比较容易讲清楚。

如果这篇文章对您有帮助,请点赞支持!如有问题或建议,欢迎在评论区交流。

http://www.jsqmd.com/news/767717/

相关文章:

  • VPS 遭遇 CC 攻击怎么配置 Cloudflare 防护
  • 现代GraphQL服务开发:从Apollo Server到TypeORM的完整工程实践
  • 从零开始理解RISC-V:RV32I/RV64I基础指令集到底在做什么?
  • GitHub终极汉化方案:5分钟让英文GitHub秒变中文的高效插件
  • skene-cookbook:700+AI技能库,一键部署Claude/Cursor提示词工程自动化
  • 专业级GPU显存稳定性检测:5分钟掌握memtest_vulkan硬件测试完整指南
  • Arm Cortex-R82处理器架构与关键系统寄存器解析
  • 告别大模型!用DTTNet这个轻量级框架,在普通显卡上也能玩转音源分离
  • 彻底告别开机烦恼:TranslucentTB任务栏透明工具自启动完全指南
  • 从DFMEA到PPAP:手把手拆解APQP核心工具链,让质量策划不再是纸上谈兵
  • 通过审计日志功能追踪和管理团队的 API Key 使用情况
  • 魔兽争霸III终极优化指南:5分钟解决所有游戏兼容性问题
  • BetaFlight调参进阶:用CLI的set命令微调你的飞行手感(附常用参数清单)
  • 告别SAP RFC调用迷茫:用C# .NET Core 6封装一个自己的SAPHelper(附完整源码)
  • YOLOv5改进损失函数后,在工业缺陷检测上真能涨点吗?我用NEU-DET数据集实测了EIoU、Focal-EIoU
  • 鲟龙科技冲刺港股:靠卖鱼子酱年营收7.7亿 王斌控制35%股权
  • Arm Cortex-R82分支预测机制与实时系统优化
  • 使用 Taotoken 后如何通过用量看板清晰掌握 API 成本
  • 人机协同新范式:基于MCP协议的Human-in-the-loop AI工具调用实践
  • 2025最权威的十大降重复率网站横评
  • 一键把杂乱文档变成结构化知识图谱!开源 Hyper-Extract:LLM驱动的超强知识提取神器,Hypergraph + 时空图全支持
  • 必看!江苏鹰衡电子汽车衡地磅测评,精准稳定但功能有短板
  • 数组和二叉树
  • 从Word到LaTeX再回来:我的跨格式论文润色流水线(Pandoc+ChatGPT实战)
  • AI Agent观测性实践:AgentPulse框架解析与多智能体系统监控
  • 智慧医疗眼底图像视网膜病变检测数据集VOC+YOLO格式2183张9类别有增强
  • AI驱动嵌入式开发-Harness-Engineering实践指南
  • Unity AI场景生成:基于提示词的程序化世界构建实践
  • 2026 年免费在线音频转文字软件推荐:从基础工具到微信小程序的完整选择
  • 别再瞎调了!STM32F4时钟配置保姆级教程:从HAL库函数到180MHz超频实战