基于 STM32 与 FreeRTOS 的智能晾衣架控制系统设计

视频介绍:
摘要
针对传统晾衣架在突发降雨时响应滞后、功能单一的问题,本文设计并实现了一种基于 STM32F103C8T6 与 FreeRTOS 的智能晾衣架控制系统。系统集成温湿度(DHT11)、光照(BH1750)与雨滴传感器,通过事件总线架构实现传感器采集、业务决策与电机执行的解耦,并借助 ESP12F 模块接入 OneNET 云平台,支持远程控制与双芯片 OTA 固件升级。测试表明,系统在检测到降雨后能可靠触发回收动作,雨停后按可配置延迟自动晾出,运行稳定。
关键词:STM32;FreeRTOS;智能晾衣架;OTA;事件驱动
1 引言
升降式晾衣架已广泛进入家庭,但市面产品多停留在电动升降层面,缺乏对环境状态的感知与自主决策能力。本设计在成本受限(Cortex-M3、64KB Flash、20KB RAM)的嵌入式平台上,引入实时操作系统与分层软件架构,使晾衣架具备"雨来自动收、晴后延时晾"的自主行为,同时保留手动控制与远程升级能力,兼顾实用性与可维护性。
2 系统总体设计
系统硬件由 STM32F103C8T6 主控、DHT11/BH1750/雨滴三路传感器、电机驱动、OLED 显示、W25Q64 外部 Flash 及 ESP12F WiFi 模块构成。软件采用两层架构:Hardware 层负责读写外设并触发事件,Services 层负责业务决策与状态编排,两层之间通过中心事件总线(AppEvent)解耦:
传感器任务 ──事件──▶ EventBus ──分发──▶ ClotheslineService(决策)──▶ Motor(执行)
这一设计使传感器驱动与业务逻辑互不依赖,新增传感器或更换执行机构均不需改动决策层代码。
3 关键技术实现
3.1 雨滴检测与回收状态机
雨滴信号存在机械抖动,直接采用会产生误动作。系统在硬件层完成防抖后,由服务层以状态机方式处理"回收—延时—晾出"三个阶段:下雨立即回收;雨停后仅当自动模式且衣物处于收回状态时,才等待 rainStopDelayMs(默认 15 s)确认无反复降雨,再执行晾出,核心逻辑如下:
static void ProcessRainLogic(void)
{
if (isRaining) {
rainStopActive = 0;
TryStartRetract(); /* 下雨回收是最高优先级 */
return;
}
rainRetracting = 0; /* 不下雨了,清除回收标志 */
if (IsAutoMode() && clothesState == CLOTHES_IN) {
if (!rainStopActive) {
rainStopActive = 1;
rainStopStartTicks = xTaskGetTickCount();
} else if ((xTaskGetTickCount() - rainStopStartTicks)
>= pdMS_TO_TICKS(rainStopDelayMs)) {
rainStopActive = 0;
if (!Motor_IsRunning() && !isRaining) {
Motor_DryOutForAuto();
}
}
}
}
其中 rainStopActive 与 rainStopStartTicks 构成软件定时窗口,避免雨滴间歇抖动导致的"收了又晾、晾了又收"。
3.2 双芯片 OTA 升级
系统支持 STM32 与 ESP12F 两颗芯片的远程固件升级:ESP12F 侧采用 rBoot 双分区方案,保留不可变 recovery 分区实现升级失败自动回退;STM32 侧基于 IAP + YMODEM 串口协议,由 ESP12F 从服务器拉取固件流式转发,升级过程中 OLED 实时显示进度百分比,规避远程变砖风险。
4 测试与结果分析
对雨滴响应链路进行连续 48 小时挂机测试:模拟降雨后系统均在 1 个决策周期内启动回收,无漏触发;雨停后,间歇性滴水(间隔小于延时阈值)期间衣物保持收回状态,仅当持续无雨超过 15 s 才执行晾出,符合设计预期。温湿度与光照数据经 MQTT 上报 OneNET 平台,App 端可实时查看;两颗芯片各执行 10 次 OTA 升级均成功,人为注入断电故障后设备均能回退到可用固件。
5 结论
本文完成了基于 STM32 + FreeRTOS 的智能晾衣架系统设计,通过事件总线架构与状态机决策实现了可靠的雨天自动回收功能,并配套了完整的 OTA 升级与中文字库存储方案。系统验证了在资源受限的 MCU 上构建可维护、可远程演进的物联网产品的可行路径,后续可扩展光照联动晾晒策略与语音控制入口。