外观
Rust 开发
乐鑫官方支持并投入资源维护 Rust 生态,社区组织叫 esp-rs。你可以用 Rust 写 ESP32 固件,得到内存安全和现代工具链,但需要接受 API 还在快速演进、部分外设与协议栈还不如 C 完整的现实。
概览
Rust 路线分两条,没有谁取代谁,选哪条取决于你要不要 ESP-IDF 的全套能力。
| 路线 | 核心项目 | 运行方式 | 特点 |
|---|---|---|---|
| no_std(裸机) | esp-hal、esp-radio 等 | 不依赖 libc 与 ESP-IDF,直接用 Rust 驱动外设 | 体积小,启动快,纯 Rust;生态成熟度逐步提高 |
| std(基于 ESP-IDF) | esp-idf-svc、esp-idf-hal、esp-idf-sys | Rust 标准库运行在 ESP-IDF 之上 | 可用 Wi-Fi、BLE、TLS 等 IDF 全部能力;需 C 工具链 |
esp-rs 的仓库在 github.com/esp-rs,官方文档在 docs.espressif.com/projects/rust/。
esp-hal 在 2025 年 10 月底发布 1.0.0(发布页显示 10 月 30 日,该页面关联的博客链接路径为 2025/10,所以年份可确认为 2025)。1.0 的意义是稳定部分 API,承诺在 1.x 内不做破坏性改动。此后:
- v1.1.0 在 4 月发布,v1.2.0 在 9 月初发布(年份推断为 2026)。1.2.0 说明里写明本次没有新增稳定 API,并加入对 ESP32-P4(修订版 3.0 及以上)与 ESP32-S31 的支持。
- 稳定用户升级无需迁移,使用
unstable特性的用户在次要版本升级时可能被破坏,推荐用~锁定版本。 - 无线能力在独立的 esp-radio crate 中,2026-09 发布页显示其仍是 1.0.0-beta.1,也就是还没到稳定。
- README 列出的支持芯片:ESP32、C2、C3、C5、C6、C61、H2、P4、S2、S3,另有 esp-lp-hal 面向 C6、S2、S3 的低功耗协处理器。
具体哪些 API 在 1.0 时稳定,请看官方文档,我没有逐项核对。
关键信息
安装工具
在本地电脑执行:
bash
# RISC-V 芯片(C 系列、H 系列、P4):安装 Rust 与目标
rustup target add riscv32imc-unknown-none-elf # C2/C3 的 target 示例,不同芯片 target 不同
# 项目生成器,按向导选芯片与功能
cargo install esp-generate
esp-generate --chip esp32c6 my-project
# 烧录与监视
cargo install espflash
cargo run --release # 生成项目里通常已配置 espflash 作为 runnerXtensa 架构的芯片(ESP32、S2、S3)需要乐鑫的 Rust 分支,通过 espup 安装:
bash
cargo install espup
espup install
source ~/export-esp.sh # 激活环境各芯片对应的 target 名称请看官方文档的 "Installation" 一节。调试可以使用 probe-rs,S3、C3、C6 的 USB-Serial-JTAG 可直接配合。
一个 no_std 点灯示例的形状
esp-hal 的 API 在版本之间会调整,下面的代码仅示意结构,不保证在你的版本上直接编译,请以 esp-generate 生成的模板为准:
rust
// 运行于 ESP32-C6,使用 esp-hal(no_std)
#![no_std]
#![no_main]
use esp_hal::{delay::Delay, gpio::{Level, Output, OutputConfig}, main};
use esp_backtrace as _;
#[main]
fn main() -> ! {
let p = esp_hal::init(esp_hal::Config::default());
let mut led = Output::new(p.GPIO8, Level::Low, OutputConfig::default());
let delay = Delay::new();
loop {
led.toggle();
delay.delay_millis(500);
}
}官方态度
乐鑫有专职团队维护 esp-hal 等项目,并在官方博客与文档站点推广。乐鑫仍以 C 的 ESP-IDF 为主力产品线,Rust 是官方支持但不是所有官方解决方案都提供 Rust 版本。例如 Matter、RainMaker 等没有等价的 Rust 实现,需要用 std 路线调用 C 组件,或自行绑定。
代价
- 编译慢,学习曲线陡,尤其是异步(embassy)与所有权模型下的外设借用。
- 第三方驱动 crate 质量参差,常需自己绑定或补全。
- 无线协议栈功能与 C 版有差距,需要查阅各 crate 的功能清单。
适合谁 / 不适合谁
适合已熟悉 Rust、重视内存安全的开发者,或愿意为长期维护投入学习成本的项目。不适合追求立即出成果的新手,以及依赖大量 IDF 官方解决方案(语音、Matter 等)的项目。
参考资料
- Rust on ESP Book:https://docs.espressif.com/projects/rust/book/
- esp-hal 仓库:https://github.com/esp-rs/esp-hal
- esp-hal 发布页:https://github.com/esp-rs/esp-hal/releases
- esp-idf-svc:https://github.com/esp-rs/esp-idf-svc
- esp-rs 组织:https://github.com/esp-rs