Raspberry Pi Pico 2 W: 使用 Rust 构建 Matter Wi-Fi 灯泡

现在可以使用 Raspberry Pi Pico 2 W (RP2350) 并利用 Rust 来创建完全符合 Matter 标准的智能家居设备。通过使用 rs-matter 技术栈和 Embassy async 框架,开发者可以构建仅限本地运行的智能家居硬件,直接与 Apple Home、Google Home 和 Home Assistant 集成,而无需云端账户。

在 RP2350 上实现 Matter

该实现的核心是一个兼容 Matter 的 Wi-Fi 灯泡,它使用蓝牙低功耗 (BLE) 进行初始配网阶段,并使用 Wi-Fi 进行网络连接。该设备通过暴露一个标准的 Matter On/Off cluster 来切换连接到 GPIO 引脚上的物理 LED。

技术架构

  • 裸机执行 (Bare Metal Execution): 该项目完全在裸机上使用 embassy-rpno_std 模式运行。
  • Async 框架: 使用 Embassy async 框架来管理状态机逻辑,与传统的基于 C 的嵌入式开发相比,这简化了实现过程。
  • 无线电共存 (CoEx): 一个关键的技术挑战涉及管理 CYW43439 无线芯片。为了防止在无线电饱和时发生总线损坏,必须调整 PIO SPI 时钟分频器,以适应 RP2350 更快的 150MHz 核心时钟。
  • 多路复用 (Multiplexing): 该项目包含一个 async CoEx runner 设置,以便在蓝牙和 Wi-Fi 技术栈之间安全地并发进行无线电多路复用。

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 进行配置

该设备旨在无缝集成到智能家居生态系统中。配置过程遵循以下步骤:

  1. 广播 (Advertising): Pico 2 W 在启动时开始通过 BLE 进行广播。
  2. 集成 (Integration): 在 Home Assistant 伴侣应用中,用户导航至 Settings $\rightarrow$ Devices & Services $\rightarrow$ Add Integration $\rightarrow$ Add Matter device
  3. 身份验证 (Authentication): 用户输入默认设置代码 3497-0112-332 或扫描提供的 QR code。
  4. 连接 (Connectivity): Home Assistant 通过 BLE 传输 Wi-Fi 凭据,随后设备连接到网络,并作为一个标准的灯泡显示出来。

其他 RP2350 Rust 示例

除了 Matter 实现之外,rust-rpico2-embassy-examples 仓库还为 Raspberry Pi Pico n 上的各种外设和传感器提供了系列示例:

I2C 传感器集成

  • HS3003: 一款具有 14-bit 分辨率的高性能温湿度传感器。
  • ADXL345: 一款具有 13-bit 分辨率的三轴加速度计,支持高达 $\pm 16$ g 的测量。

SPI 显示器与图形

  • Zermatt Example: 在 Adafruit 2.2" TFT LCD 上渲染 320x240 图像。
  • Zermatt Snow: 一个高级示例,利用了物理引擎和离屏 lcd-async framebuffer。它通过 DMA 发送数据以避免阻塞 CPU。

1-Wire 协议实现

  • DS18B20: 一款防水温度探头。该实现使用自定义的、周期精确的 PreciseDelay 来在 Cortex-M33 核心上实现 1-Wire 协议所需的亚微秒级定时。
  • DHT11: 一款低成本温湿度传感器。由于位读取阶段对时序敏感,该示例必须在 release 模式下运行以确保准确性。

社区见解与观点

围绕该项目的技术讨论突显了向更易于使用的嵌入式 Rust 的转变:

"Rust 在嵌入式领域的应用随着 Embassy 和 Pico SDK 的普及变得越来越容易上手... async runtime 使状态机逻辑比 C 语言版本更加简洁。"

然而,一些开发者指出,虽然项目展示了“极低”功耗,但关于特定电池供电运行以及硬币电池是否适用于 Wi-Fi 模块,仍需进一步的文档说明。

其他贡献者强调了 Matter 的基于 IP 的特性,这使得 DIY 爱好者可以“在没有官方 C++ Matter SDK 复杂性的情况下,动手搭建出这样的东西”。

Sources