前沿资讯/我的第一个开源项目|集成语音感知与云平台的多任务智能楼宇控制系统
我的第一个开源项目|集成语音感知与云平台的多任务智能楼宇控制系统
我的第一个开源项目|集成语音感知与云平台的多任务智能楼宇控制系统

2025-07-24发布

大家好,我是小程同学>o<,我以为我研究生生活不会碰嵌入式,但没想到我与嵌入式还是很有缘分。我选择嵌入式,是因为它与计算机视觉不一样,它是看得见摸得着的。对我来说,项目实现比软件算法更为开心。接下来,我要分享一下我在做智能楼宇控制系统的经历。

缘起|从嵌入式小白到智能楼宇探索者

从在开发这个智能楼宇控制系统时,我常常想起本科和朋友一起在江财软件与物联网工程学院做嵌入式项目的日子。

那时用 51 单片机做心率血氧监测,为了让 OLED 稳定显示波形,对着 datasheet 逐行调时序;用Arduine UNO R3开发板做智能垃圾桶;后来和实验室团队冲互联网 +,用ESP32单片机做姿态捕捉系统,全国银奖的奖牌背后,是无数个调试 WiFi 连接的深夜。这些经历让我对嵌入式有了特殊的执念——哪怕后来读研转向计算机视觉,不知不觉又转向了嵌入式方向。

选择智能楼宇这个课题,像是命中注定的重逢。看到企业对楼宇智能化的需求爆发,又发现现有方案要么重云端轻本地,要么语音控制依赖网络,便想做个 “离线语音 + 智慧云端”的混合架构。更巧的是,带本科毕设时学生总对多任务调度犯难,索性把项目做成可教学的开源框架。

技术架构|多任务协同的智能中枢

我开发的是一款基于STM32F103作为主控,搭载华为云平台及语音交互模块的多任务智能楼宇控制系统。系统集成温湿度、烟雾、光照等环境传感器模块,采用FreeRTOS实现多任务调度,结合OLED显示、WiFi通信及SU-03T语音模块,形成数据采集、阈值报警、交互控制及云端互联的综合解决方案。

硬件架构

根据对整个楼宇环境监测系统的功能需求,智能楼宇控制系统主要包括:

  • 电源模块: 负责整个控制系统的供电,包括主控制器、各个传感器所需的5V、3.3V
  • 语音模块: SU-03T语音模块提供与用户的语音交互功能,支持语音识别与指令执行,通过语音控制实现楼宇设备的开关控制
  • 烟雾模块: MQ-2烟雾模块用于监测楼宇内的烟雾浓度,当浓度超过设定的阈值时,系统语音模块会发出报警信号,提示楼宇管理人员进行处理
  • 温湿度模块: DHT11温湿度模块实时监控环境的温度和湿度,当环境参数异常时,系统会自动调节或报警
  • 光照模块: 用于感知楼宇内部的光照强度,系统根据光照数据自动调节照明灯模块的亮度
  • OLED模块: 用于显示楼宇当前的环境数据,包括温湿度、烟雾浓度等信息,提供直观的界面供用户查看
  • WiFi模块: 支持与华为云平台的连接,实现远程控制与数据上传,方便楼宇管理人员随时获取楼宇环境数据,并进行远程操作
  • 电机驱动模块: 控制风扇等设备的启动与停止,依据温湿度和空气质量数据,自动调节空气流通
  • 风扇模块: 通过电机驱动,为楼宇提供良好的通风效果,保持室内空气清新

image.png

‍ 在具体的设计过程中,结合FreeRTOS操作系统,各个模块硬件以及软件部分任务相互独立,为后续的功能扩展和系统升级创造条件。

image.png

软件编写

系统软件开发则主要基于STM32CubeMX和KeilUVision5两款工具完成。

首先在上电启动阶段进行系统初始化,包括对主控芯片的时钟、GPIO、中断、串口、I2C等基础外设进行配置,同时初始化DHT11温湿度传感器、MQ-2烟雾传感器、光敏电阻模块、OLED显示屏、ESP8266通信模块及SU-03T语音识别模块等功能组件,随后创建FreeRTOS下的各个任务并启动调度器,进入多任务并发运行阶段。

运行期间,系统通过定时任务持续采集各类环境数据,并将处理结果分别用于OLED显示更新、本地设备控制、语音指令响应以及与华为云平台的数据同步与远程控制交互。各任务之间通过队列或信号量等机制实现协调调度与数据共享,确保系统具备良好的实时性与响应速度,从而构建起一个稳定、高效且具备人机交互能力的智能楼宇控制系统。

image.png

实物测试

实物测试中,系统功能完整且稳定。OLED界面可实时显示环境参数并与用户交互。通信模块稳定连接华为云平台,实现远程监控和数据上报。语音模块能够准确识别唤醒命令并支持离线指令控制和状态播报。

开发历程|那些痛并快乐着的日子

从 Arduino 转向 STM32+FreeRTOS 的那两周,每周996对着代码修改与烧写,调试,有时候周天也来调试程序,直到第一次实现任务抢占调度及程序在所有界面切换不卡顿时,才懂什么叫 "痛并快乐着"。

最磨人的是那个藏在 Keil 编译器盲区的 bug:每当频繁快速操作按键时,系统总会突然死机,却看不到任何报错信息。当时课题组没有示波器,手边只有一块万用表,排查过程只能像摸着石头过河。

我试着从代码层面一点点排查:先是调整 FreeRTOS 的任务优先级,把按键响应任务提到最高;又在关键代码段加上临界区保护,防止并发冲突;甚至逐个关闭非必要功能模块,测试是否存在资源竞争。就这样反复修改、烧录、测试,折腾了好久,才终于定位到问题核心 —— 原来 PWM 信号生成任务在启动后就始终处于运行状态,没有设置有效的关闭机制,导致高频按键触发的中断请求被持续占用的 PWM 定时器阻塞,最终造成系统锁死。

这个藏在软硬件夹缝里的问题,让我彻底明白嵌入式开发从来不是非软即硬的割裂战场:有时候没有精密仪器,一块简单的万用表加上对代码逻辑的极致推敲,反而能比高端调试器更快找到症结。这种 "以简驭繁" 的经历,也成了我后来处理复杂系统问题时的重要心法。

解决问题的过程也是补课的过程:为了 SU-03T 语音模块的双向通信,自学固件定制和参数的配置;为了华为云 MQTT 的稳定性,研究 TCP 通信及心跳机制和扩展UDP通信。这些碎片化的知识,在项目里慢慢织成了体系,就像 PCB 板上那些飞线,最终通过布局优化变得井然有序。 ‍

📺 完整项目视频:https://www.bilibili.com/video/BV1XjuyzQEUF

开源与展望|让微光汇成火炬

目前这个项目已完整开源,希望能帮助更多嵌入式爱好者。

从计算机视觉到嵌入式开发,看似跨界的选择里,藏着对技术本质的追求 —— 用合适的工具解决真实的问题。这个智能楼宇系统就像个微缩的世界,闪烁的 LED 是万家灯火,流动的数据包是城市脉搏。而开源社区,正是让这些微光汇聚成火炬的地方。

📮项目地址:https://gitcode.com/xiaocheng/Project_v1.0_FreeRTOS