基於 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 上建構可維護、可遠端演進的物聯網產品的可行路徑,後續可擴充光照連動晾曬策略與語音控制入口。