在Raspberry Pi Pico 2 W上用Rust编写的Matter Wi-Fi灯泡
摘要
针对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 中配网:
- 在 Pico 2 W 上运行该示例,它将开始通过蓝牙广播。
- 打开智能手机上的 Home Assistant 配套应用。
- 进入 设置 -> 设备与服务 -> 添加集成 -> 添加 Matter 设备。
- 当提示输入设置代码时,输入默认的
3497-0112-332(或扫描终端日志中打印的二维码链接)。 - Home Assistant 将通过 BLE 连接 Pico 2 W,询问 Wi-Fi 凭据,并安全地将其传输给设备。
- Pico 2 W 将连接 Wi-Fi 网络,并立即显示为一个标准灯泡。你可以使用 Home Assistant 界面开关灯!
- 连接到 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 示例的接线相同。
相似文章
Raspberry Pi Pico W 作为 USB Wi-Fi 适配器
一个将 Raspberry Pi Pico W 转变为 USB Wi-Fi 适配器的项目,提供了一种通过 USB 为设备添加无线连接的简单方法。
Pico W固件创建无驱动USB WiFi桥接器(Layer-2)
一个针对树莓派Pico W的开源固件项目,通过透明的Layer-2桥接将其转换为无驱动USB WiFi适配器,支持WPA2/3协议并附带管理控制台,但受限于USB 1.1的传输速率。
The Rust on ESP Book
《The Rust on ESP Book》是一本全面的指南,用于在 Espressif 产品上进行嵌入式 Rust 开发,涵盖项目生成、工具链和软件栈结构。
Show HN:Pokémon Emerald 移植到 Raspberry Pi Pico 2
一位开发者将 Pokémon Emerald 移植到 Raspberry Pi Pico 2 (RP2350) 微控制器上原生运行,通过将 GBA 游戏重新编译为 Cortex-M33,并在第二个核心上重新实现 PPU,实现了 60 fps 的 HDMI 输出。
我的毕业帽运行 Rust
作者使用 ATtiny85 微控制器和 WS2812B LED 制作了一款由 Rust 驱动的发光毕业帽,用于检测流苏的移动。该项目展示了在定制硬件项目中使用 avr-hal 等嵌入式 Rust 库的应用。