跳转到内容

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-sysRust 标准库运行在 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 作为 runner

Xtensa 架构的芯片(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 等)的项目。

参考资料 ​

ESP32 非官方中文调查手册,与乐鑫科技(Espressif Systems)无隶属关系。