在Raspberry Pi Pico 2 W上用Rust编写的Matter Wi-Fi灯泡

Hacker News Top 工具

摘要

针对Raspberry Pi Pico 2的Rust Embassy示例,涵盖I2C、SPI和1-Wire通信。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/06/08 03:14

melastmohican/rust-rpico2-embassy-examples

来源:https://github.com/melastmohican/rust-rpico2-embassy-examples

Raspberry Pi Pico 2 的 Rust Embassy 示例

本仓库包含 Raspberry Pi Pico 2 (RP2350) 开发板的示例代码,使用 Rust 编写,并采用 Embassy (https://embassy.dev/) 异步框架。

项目生成

cargo generate --git https://github.com/ImplFerris/pico2-template.git --name rust-rpico2-embassy-examples

硬件

开发板: Raspberry Pi Pico 2

  • MCU: RP2350(双核 Arm Cortex-M33 和 RISC-V 核心)
  • 板载外设:
    • GPIO25 上的 LED

引脚图

Raspberry Pi Pico 2 引脚图

常用引脚分配

  • I2C 引脚:
    • I2C0 SDA: GPIO4
    • I2C0 SCL: GPIO5
    • I2C1 SDA: GPIO2
    • I2C1 SCL: GPIO3
  • UART 引脚:
    • UART0 TX: GPIO0,UART0 RX: GPIO1
    • UART1 TX: GPIO8,UART1 RX: GPIO9

示例

I2C 示例

hs3003_i2c

使用 Embassy 异步框架从 HS3003 传感器读取温度和湿度。

cargo run --example hs3003_i2c

接线(Arduino Modulino Thermo):

Modulino -> RPi Pico 2
----------  --------------
GND (黑) -> GND
VCC (红) -> 3.3V
SCL (黄) -> GPIO5 (Pin 7) (I2C0 SCL)
SDA (蓝) -> GPIO4 (Pin 6) (I2C0 SDA)

关于 HS3003:
Renesas HS3003 是一款高性能温湿度传感器:

  • 温度范围:-40°C 至 +125°C(±0.2°C 精度)
  • 湿度范围:0% 至 100% RH(±1.5% 精度)
  • 两种测量均为 14 位分辨率
  • 超低功耗

adxl345_i2c

通过 I2C0 使用 Embassy 从 ADXL345 传感器读取加速度计数据。

cargo run --example adxl345_i2c

接线:

ADXL345 -> RPi Pico 2
---------  --------------
GND (黑) -> GND
VCC (红) -> 3.3V
SCL (黄) -> GPIO5 (Pin 7) (I2C0 SCL)
SDA (蓝) -> GPIO4 (Pin 6) (I2C0 SDA)

关于 ADXL345:
ADXL345 是一款小巧、轻薄、低功耗的三轴加速度计,具有高达 ±16 g 的高分辨率(13 位)测量能力。数字输出数据格式为 16 位二进制补码,可通过 SPI(3 线或 4 线)或 I2C 数字接口访问。

SPI 显示示例

zermatt

在 Adafruit 2.2“ TFT LCD 显示屏上以横向模式显示一张 320x240 的采尔马特(Zermatt)图片。

cargo run --example zermatt

接线(Eye-SPI Breakout):

Raspberry Pi Pico 2    Eye-SPI Breakout
+-----------------------+  +---------------------------+
|                       |  |                           |
| 3V3 (Pin 36) --------+------+-> VIN (红色线)        |
| GND (Pin 38) --------+------+-> GND (黑色线)        |
| GPIO18 (Pin 24) -----+------+-> SCK (蓝色线)        |
| GPIO19 (Pin 25) -----+------+-> MOSI (绿色线)       |
| GPIO16 (Pin 21) -----+------+-> MISO (黄色线)       |
| GPIO20 (Pin 26) -----+------+-> DC (白色线)         |
| GPIO21 (Pin 27) -----+------+-> RST (橙色线)        |
| GPIO17 (Pin 22) -----+------+-> TCS (蓝色线)        |
|                       |  |                           |
+-----------------------+  +---------------------------+

zermatt_snow

在 Adafruit 2.2“ TFT LCD 显示屏上显示一张采尔马特图片,并带有飘落的雪花动画。利用物理引擎和 Embassy 异步框架,将画面绘制到离屏 lcd-async 帧缓冲中,并通过 DMA 传输,不阻塞 CPU。

cargo run --example zermatt_snow

接线与 zermatt 示例相同。

1-Wire 示例

ds18b20

使用 Embassy 通过 1-Wire 总线从 DS18B20 防水温度传感器探头读取温度。该示例采用自定义的周期精确 PreciseDelay 实现,在 RP2350 的 Cortex-M33 核心上实现无抖动的亚微秒级时序,满足 1-Wire 协议要求。

cargo run --example ds18b20

接线原理图:

Raspberry Pi Pico 2
+-----------------------+
|                       |
| [ ] 1     40 [ ] USB  |
| [ ] 2     39 [ ]      |
| [ ] 3     38 [G]ND --+-------+ (黑色)
| [ ] 4     37 [ ]      |       |
| [ ] 5     36 [3]V3 --+---+   |
| ... ...              |   |   |
| [ ] 20    21 [ ] ----+---+---+---+ (白色, GPIO16)
+-----------------------+   |   |   |
                            |   |   |
                            |   |   |
                            +-----------------------------+
                            |                             |
                            | DS18B20 传感器 / 探头       |
                            |                             |
                            | (底部/平面侧)                |
                            |                             |
                            | [GND] [DAT] [VCC]           |
                            +-------|-------|-------|-----+
                                    |       |       |
                                    |       +-------+--[5.1K]----+ (上拉电阻
                                    |               (上拉电阻)    |  位于 DAT 与 VCC 之间)
                                    +---------------+           |
                                    (红色) +-------|-----------------------+
                                    (黑色) |       +-----------------------+
                                    (白色) +---------------------------+

面包板布局:
DS18B20 面包板接线布局

关于 DS18B20:
DS18B20 是一款 1-Wire 数字温度计,可提供 9 位至 12 位的摄氏温度测量。它通过 1-Wire 总线通信,只需一根数据线(和地线)即可与微控制器连接。温度范围为 -55°C 至 +125°C,在 -10°C 至 +85°C 范围内精度为 ±0.5°C。

dht11

使用 Embassy 异步框架从 DHT11 传感器读取温度和湿度。该示例使用 dht-sensor crate 的异步 API,并结合了我们的周期精确 PreciseDelay 实现。

cargo run --example dht11 --release

注意:由于 DHT11 协议在位读取阶段对时序敏感,必须使用 release 模式运行此示例。

接线原理图:

Raspberry Pi Pico 2    DHT11 模块
+---------------------+  +---------------------+
|                     |  |                     |
| GND (Pin 38) -------+----->| GND               |
| 3V3 (Pin 36) -------+----->| VCC               |
| GPIO16 (Pin 21) ----+----->| DAT (数据)        |
|                     |  |                     |
+---------------------+  +---------------------+

上拉电阻:

  • 如果使用 DHT11 模块板: 它可能已内置上拉电阻,无需额外元件。
  • 如果使用裸 4 针 DHT11 传感器: 必须在 DAT(数据)与 VCC 之间外接一个 4.7kΩ 至 10kΩ 的上拉电阻。

关于 DHT11:
DHT11 是一款基础型、超低成本的数字温湿度传感器。它使用电容式湿度传感器和热敏电阻测量周围空气,并通过数据引脚输出数字信号(无需模拟输入引脚)。温度范围为 0°C 至 50°C(±2°C 精度),湿度范围为 20% 至 90% RH(±5% 精度)。

Wi-Fi 与 Matter 示例

matter_wifi_light

使用 rs-matter 栈实现一个兼容 Matter 的 Wi-Fi 灯泡。它利用 BLE 进行配网,Wi-Fi 进行网络连接,可直接将 Pico 2 W 添加到 Apple Home、Google Home 或 Home Assistant 中!当从智能家居应用切换开关时,它会控制外部 LED 的亮灭。

cargo run --example matter_wifi_light --release

在 Home Assistant 中配网:

  1. 在 Pico 2 W 上运行该示例,它将开始通过蓝牙广播。
  2. 打开智能手机上的 Home Assistant 配套应用。
  3. 进入 设置 -> 设备与服务 -> 添加集成 -> 添加 Matter 设备
  4. 当提示输入设置代码时,输入默认的 3497-0112-332(或扫描终端日志中打印的二维码链接)。
  5. Home Assistant 将通过 BLE 连接 Pico 2 W,询问 Wi-Fi 凭据,并安全地将其传输给设备。
  6. Pico 2 W 将连接 Wi-Fi 网络,并立即显示为一个标准灯泡。你可以使用 Home Assistant 界面开关灯!
  7. 连接到 Pico 2 W 的外部 LED 将立即同步状态!

Matter Wi-Fi 灯泡电路

接线原理图:

Raspberry Pi Pico 2 W  外部元件
+------------------------+
|                        |
| GP15 (Pin 20) |---------[ 220-330 欧姆电阻 ]-----+
|                        |                           |
| GND (Pin 18) |------------------[ LED - ] <------+
|                        |     (阴极 / 短脚)         |
|                        |                           |
+------------------------+     [ LED + ] -+---------+
                               (阳极 / 长脚)

基础 GPIO 示例

blinky

使连接到 GPIO15 的外部 LED 闪烁。该示例对于 Raspberry Pi Pico 2 W 等开发板很有用,因为这些板子上的板载 LED 连接到无线芯片而非标准微控制器 GPIO。

cargo run --example blinky

接线:matter_wifi_light 示例的接线相同。

相似文章

The Rust on ESP Book

Hacker News Top

《The Rust on ESP Book》是一本全面的指南,用于在 Espressif 产品上进行嵌入式 Rust 开发,涵盖项目生成、工具链和软件栈结构。

Show HN:Pokémon Emerald 移植到 Raspberry Pi Pico 2

Hacker News Top

一位开发者将 Pokémon Emerald 移植到 Raspberry Pi Pico 2 (RP2350) 微控制器上原生运行,通过将 GBA 游戏重新编译为 Cortex-M33,并在第二个核心上重新实现 PPU,实现了 60 fps 的 HDMI 输出。

我的毕业帽运行 Rust

Hacker News Top

作者使用 ATtiny85 微控制器和 WS2812B LED 制作了一款由 Rust 驱动的发光毕业帽,用于检测流苏的移动。该项目展示了在定制硬件项目中使用 avr-hal 等嵌入式 Rust 库的应用。