低預算嵌入式 Rust:打造智慧畢業帽
畢業典禮充滿了傳統,從流蘇的移動到強制租借學位帽與禮袍。對大多數人來說,這是學術反思的一天;但對開發者而言,這是一個進行硬體駭客行為的機會。
在 Eric Park 最近的一個專案中,傳統的畢業帽被轉化為一件穿戴式科技產品。目標既簡單又具野心:打造一頂能偵測流蘇移動(畢業的象徵性動作)並在帽簷下方觸發視覺燈光秀的帽子。雖然這個專案源於想要一個吸引人的部落格文章標題,但它也為在高度受限的嵌入式環境中使用 Rust 提供了實際的觀察視角。
硬體堆疊
打造穿戴式裝置需要在功能性與外型尺寸之間取得平衡。為了保持低調的外型並避免全尺寸微控制器帶來的笨重感,Park 選擇了極簡的硬體配置:
- 微控制器: Digispark ATtiny85。選擇這款小型、低成本的開發板而非 ESP32 等更強大的替代方案,是為了確保它能穩固地附著在帽子上。
- 照明: 48 顆 WS2812B LEDs,提供視覺效果所需的程式化 RGB 功能。
- 感測: 一個磁簧開關與磁鐵。這種組合讓系統能夠偵測流蘇遠離感測器的物理移動,進而觸發 LED 序列。
- 電源: 一個 USB-C Power Delivery (PD) 觸發板搭配行動電源,確保 LEDs 有足夠的電流運作,而不會耗盡微小的板載電池。
- 佈線: 使用從廢棄 Apple USB-C 線材中剝出的電線。
在 ATtiny85 上實作 Rust
雖然 Arduino 生態系統是 ATtiny 開發板的標準,但 Park 選擇使用 Rust 來實作邏輯。這個決定帶來了顯著的技術障礙,因為 avr-hal 與 ws2812-avr crates 並不原生支援 ATtiny85。
為了讓專案可行,開發過程需要:
- Fork 與修補: 開發者必須 fork 現有的 HAL (Hardware Abstraction Layer) 與
ws2812-avr函式庫,以增加對 ATtiny85 特定架構的支援。 - 時鐘頻率配置: 一個關鍵的調整涉及手動將預設時鐘頻率設定為 16 MHz,以確保對時序敏感的 WS2812B LEDs 能正常運作。
正如 Park 所提到的,軟體開發大約花了兩小時,但硬體整合卻花了超過三小時。這突顯了嵌入式專案中一個常見的主題:電路的物理組裝與除錯往往比撰寫邏輯所需的時間還要長。
社群觀點與反論點
該專案在 Hacker News 上引起了各種反應,從對「純粹美學」技術選擇的讚賞,到對所使用的語言必要性的質疑。
「為什麼要用 Rust?」的辯論
一些評論者質疑使用 Rust 來處理如此簡單的任務是否有其效用,一位使用者指出硬體最終運行的都是機器碼,無論來源語言為何。另一位使用者則開玩笑說 Hacker News 上 Rust 相關的貼文已趨於飽和,建議使用 Chrome 擴充功能來過濾它們。然而,其他人則認為,「為了配合部落格文章標題的想法」這個理由非常新鮮且誠實,展現了愛好者工程開發的真實動機。
畢業典禮的實用性
除了技術規格之外,討論也觸及了畢業典禮產業的荒謬性,特別是租借禮袍的高昂成本。一位使用者建議,對於就讀大型大學的學生來說,有一個「天才般的舉動」:讓在不同時段畢業的學生共同分擔單頂學位帽與禮袍的租借費用。
結論
最終,這個專案作為將 Rust 推向 AVR 生態系統中最微小角落的證明概念 (proof of concept)。雖然作者決定最終產品太過「俗氣」而無法在典禮上實際配戴——將其比作「電競 PC」的美學——但這次練習展示了 avr-hal 生態系統的實用性,以及在填補不支援硬體與自定義修補程式之間的差距時所需的毅力。