學完本章你將能夠:
用一句話說明本專案要做什麼,以及它為什麼需要 RTOS 而不是超級迴圈。
畫出「語音進、設備動、雲端知」三條資料路徑。
列出 12 週課程對應的能力,並知道每週該跑哪個韌體專案。
依預算與算力選擇路徑 A(外部 ASR 模組)或路徑 B(板上 Edge AI)。
嵌入式課程最常見的失敗模式,是學員會閃燈、會讀 ADC,卻無法把多個週邊組成 一個「產品」。本課程反過來設計:先給你產品規格,再把規格拆成硬體、驅動、 RTOS、AI 與可靠度五層。每一層都有可執行的實驗,最後疊成同一套韌體。
產品規格:智慧居家語音控制器
目標裝置放在客廳或實驗室桌面,用口語控制燈光、風扇、門鎖(伺服馬達)與 一個插座繼電器,並能回報溫度與系統狀態。
| 面向 | 需求 | 驗收方式 |
|---|---|---|
| 喚醒 | 聽到喚醒詞後進入 5 秒聆聽窗 | 狀態 LED 由呼吸燈改為常亮 |
| 指令 | 至少 10 條中文/英文指令 | 對應設備在 300 ms 內動作 |
| 並發 | 語音、感測、通訊互不阻塞 | 關燈時風扇仍維持轉速 |
| 助理 | 可由 Siri/Alexa/Google 控制 | 手機 App 與裝置狀態雙向同步 |
| 安全 | 未知指令不動作;看門狗復位 | 人為卡死任務後 2 s 內重啟 |
| 功耗 | 閒置可進 Stop 模式 | 電流計顯示 mA 級下降 |
| 維運 | UART 可觸發韌體更新流程 | 模擬 OTA 後版本號加一 |
指令表(路徑 A/B/C 共用同一枚舉):
| 口語 | 內部命令 |
|---|---|
| 開燈/關燈/亮一點/暗一點 | CMD_LIGHT_* |
| 開風扇/關風扇/快一點/慢一點 | CMD_FAN_* |
| 開門/關門 | CMD_DOOR_* |
| 開插座/關插座 | CMD_RELAY_* |
| 報警/停止報警 | CMD_BUZZER_* |
| 現在幾度 | CMD_QUERY_TEMP |
| 全部關閉 | CMD_ALL_OFF |
| 睡覺 | CMD_ENTER_SLEEP |
| 離家 | CMD_HOME_LEAVE |
為什麼不能用超級迴圈
超級迴圈(super-loop)把所有工作塞進 |while(1)|:讀麥克風、跑推論、 掃感測器、送 UART。語音幀是硬即時的——16 kHz、16-bit、單聲道時,每 10 ms 就有 320 bytes 必須被取走,否則 DMA 緩衝會覆寫。若此時你正在等 DHT22 的 20 ms 時序,或阻塞在 MQTT 寫出,音訊就丟了。
FreeRTOS 的價值不是「比較潮」,而是把不同時間尺度的工作拆開:
硬即時:I2S DMA 完成、音訊搬運(高優先權)。
軟即時:喚醒/辨識、設備 PWM 更新(中優先權)。
盡力而為:感測器、遙測、日誌(低優先權)。
任務之間用 Queue 傳「結果」而不是共用全域變數;用 Semaphore 對齊 DMA 完成;用 Event Group 廣播「已喚醒/發生故障/準備 OTA」這類系統級旗標。
系統架構
圖 1.1 是全書的地圖。之後每一章只加深其中一塊,不會 另起爐灶。第 13 章會在 Comms 旁再加一個 Gateway 任務,讓 Siri、Alexa 與 Google 的指令也匯入同一條 Cmd Queue——入口變多,骨架不變。
十二週學習路徑
| 週 | 主題 | 你會做出來的東西 | 目錄 |
|---|---|---|---|
| 1 | 架構與環境 | CubeIDE 專案能下載、LED 閃 | lab01 |
| 2 | STM32 架構 | 看懂時鐘、記憶體、中斷向量 | — |
| 3 | GPIO 設備 | LED、蜂鳴器、繼電器可單獨控 | lab02 |
| 4 | PWM 與馬達 | 風扇轉速、伺服開門角度 | lab03 |
| 5 | FreeRTOS 任務 | 三個任務並行閃不同週期 | lab04 |
| 6 | Queue / Sem | 按鍵經佇列安全地切設備 | lab05 |
| 7 | Event / Timer | 喚醒窗、看門狗餵食、軟體定時 | lab06 |
| 8 | 音訊擷取 | I2S+DMA 或模組 UART 收幀 | lab07 |
| 9 | 語音辨識 | 喚醒詞 + 10 條指令 | lab08 |
| 10 | 狀態機 | 口令驅動完整設備邏輯 | lab09 |
| 11 | 通訊 | JSON 遙測、可選 MQTT | lab10 |
| 12 | 產品化 | WDT、低功耗、OTA 雛形 | lab11 + final |
| 13* | 智慧助理 | Siri/Alexa/Google 閘道整合 | lab12 |
每週建議節奏:90 分鐘講解 + 90 分鐘實驗。若辦成五日工作坊,第 1–2 日對應 週 1–5,第 3 日對應週 6–8,第 4 日對應週 9–10,第 5 日對應週 11–12 與成果展示。第 13 週(*)為選修:把裝置接上 Siri、Alexa 與 OK Google, 可併入成果週或作為課後專題。
硬體兩條路徑怎麼選
| 路徑 A:外部 ASR | 路徑 B:板上 Edge AI | |
|---|---|---|
| 開發板 | NUCLEO-F429ZI 或 F407 Discovery | STM32H747I-DISCO 或 F746-DISCO |
| 語音硬體 | CI-03T / ASRPRO / Gravity 模組 | MP34DT01 或 INMP441 + X-CUBE-AI |
| 優點 | 便宜、中文指令現成、除錯容易 | 真正理解特徵與推論、無額外模組 |
| 代價 | 辨識能力受模組限制 | 模型、記憶體、延遲都要自己扛 |
| 本課程預設 | 主線實驗 | 第 9 章進階+附錄 B |
無論選哪一條,請準備:USB 線、麵包板、LED\(\times\)3、主動蜂鳴器、5 V 繼電器 模組、N-MOSFET + 12 V 風扇(或先用 PWM LED 模擬)、SG90 伺服、DHT22 (可選)、邏輯分析儀或至少一個 USB 轉 UART。完整 BOM 見附錄 A。
本章沒有新的 C 檔。請先把倉庫的 firmware/ 目錄瀏覽一遍,確認 common/include/app_types.h 裡的命令列舉與你在紙上畫的規格一致。 下一章開始真正碰到矽晶片。