Raspberry Pi Pico 2 W: 使用 Rust 建構 Matter Wi-Fi 燈泡
Raspberry Pi Pico 2 W (RP2350) 現在可以使用 Rust 來建立完全符合 Matter 標準的智慧家庭裝置。透過利用 rs-matter stack 與 Embassy async framework,開發者可以建構僅限本地運行的智慧家庭硬體,直接與 Apple Home、Google Home 和 Home Assistant 整合,而無需雲端帳號。
在 RP2350 上實作 Matter
此實作的核心是一個符合 Matter 標準的 Wi-Fi 燈泡,它使用 Bluetooth Low Energy (BLE) 進行初始配備階段,並使用 Wi-Fi 進行網路連線。該裝置會公開一個標準的 Matter On/Off cluster 以切換連接到 GPIO pins 的實體 LED。
技術架構
- Bare Metal Execution: 專案在 bare metal 上完全以
no_std模式運行,使用embassy-rp。 - Async Framework: 使用 Embassy async framework 來管理狀態機邏輯,與傳統基於 C 的嵌入式開發相比,這簡化了實作過程。
- Radio Coexistence (CoEx): 一個關鍵的技術挑戰在於管理 CYW43439 無線晶片。為了防止無線電在飽和時造成匯流排損壞,必須調整 PIO SPI clock divider 以應對 RP2350 更快的 150MHz core clock。
- Multiplexing: 專案包含一個 async CoEx runner 設定,以便在 Bluetooth 和 Wi-Fi stacks 之間安全地進行併發無線電多工處理。
Matter 燈泡的硬體與接線
為了複製 Matter 燈泡範例,Raspberry Pi Pico 2 W 會透過一個限流電阻連接到外部 LED。
接線圖解:
- GP15 (Pin 20) $\rightarrow$ 220-330 Ohm Resistor $\rightarrow$ LED Anode (+)
- GND (Pin 18) $\rightarrow$ LED Cathode (-)
使用 Home Assistant 進行配備
該裝置旨在無縫整合至智慧家庭生態系統。配備流程如下:
- Advertising: Pico 2 W 在啟動時會透過 BLE 開始廣播。
- Integration: 在 Home Assistant companion app 中,使用者可以導航至 Settings $\rightarrow$ Devices & Services $\rightarrow$ Add Integration $\rightarrow$ Add Matter device。
- Authentication: 使用者輸入預設的設定代碼
3497-0112-332或掃描提供的 QR code。 - Connectivity: Home Assistant 會透過 BLE 傳輸 Wi-Fi 憑證,接著裝置會連線至網路,並顯示為一個標準的燈泡。
其他 RP2350 Rust 範例
除了 Matter 實作之外,rust-rpico2-embassy-examples repository 也提供了各種 Raspberry Pi Pico 2 周邊設備與感測器的範例套件:
I2C Sensor Integration
- HS3003: 一款具有 14-bit 解析度的、高效能的溫濕度感測器。
- ADXL345: 一款具有 13-bit 解析度的三軸加速度計,支援高達 $\pm 16$ g 的測量。
SPI Display and Graphics
- Zermatt Example: 在 Adafruit 2.2" TFT LCD 上渲染 320x240 影像。
- Zermatt Snow: 一個進階範例,利用了物理引擎與離屏
lcd-asyncframebuffer。它透過 DMA 派遣數據,以避免阻塞 CPU。
1-Wire Protocol Implementation
- DS18B20: 一款防水溫度探針。此實作使用了自定義且時序精確的
PreciseDelay,以在 Cortex-M33 core 上達成 1-Wire 協定所要求的次微秒級時序。 - DHT11: 一款低成本的溫濕度感測器。由於位元讀取階段的時序敏感性,此範例必須在 release 模式下運行,以確保準確性。
社群洞察與觀點
圍繞此專案的技術討論突顯了向更易於上手的使用型嵌入式 Rust 的轉向:
"Rust 在嵌入式領域變得越來越容易上手,透過 Embassy 和 Pico SDK... async runtime 讓狀態機邏輯比 C 的對應版本更加乾淨俐落。"
然而,有些開發者指出,雖然專案展示了「極低」功耗,但關於特定電池供電運作與鈕電池適用性的文件仍需進一步完善。
其他貢獻者強調了 Matter 的 IP-based nature,這讓 DIY 愛好者能夠「在沒有官方 C++ Matter SDK 的複雜性下,自行拼湊出類似這樣的東西」。