基于Rust的ESP32环境搭建

安装 Rust

参考Rust 安装 / 更新 / 打包

切换 Rust 到 nightly

Copy
rustup install nightly
rustup default nightly

安装 ESP32 工具

Rust 开发 ESP32 有两种方式

使用std库进行开发

使用core库（no_std）进行裸机开发

ldproxy

使用 Rust 标准库 std 进行构建应用时，必须安装的

Copy
cargo install ldproxy

espflash

用于 ESP 设备烧录的工具

Copy
# cargo-espflash用于交叉编译和烧录
cargo install cargo-espflash
cargo install espflash

espmonitor

esp32 和 esp8266 串行监控

Copy
# cargo-espmonitor用于esp32和esp8266串行监控
cargo install cargo-espmonitor
cargo install espmonitor

仅针对 RISC-V 目标

要为基于RISC-V架构的乐鑫芯片构建 Rust 应用时，请执行以下步骤：

安装nightly工具链和rust-src组件

Copy
rustup toolchain install nightly --component rust-src
rustup default nightly

设置目标

对于no_std裸机应用，运行

Copy
# 针对ESP32-C2和ESP32-C3
rustup target add riscv32imc-unknown-none-elf
# 针对ESP32-C6和ESP32-M2
rustup target add riscv32imac-unknown-none-elf

创建新项目

安装 cargo-generate：

Copy
cargo install cargo-generate

安装了上面的工具就可以使用对应的模板生成项目了，其中有两个模板：

esp-template裸机no_std项目模板

esp-idf-template支持std的模板

可以先把两个模板 clone 到本地，以后创建模板就不用去 github 下载了：

Copy
mkdir ~/.espressif
cd ~/.espressif
git clone https://github.com/esp-rs/esp-template
git clone https://github.com/esp-rs/esp-idf-template.git

然后根据模板创建项目，比如使用esp-idf-template模板创建一个项目：

Copy
cargo generate ~/.espressif/esp-idf-template/

配置项目

打开.cargo/config.toml并添加下面几行到[env]section 的底部。保持其他内容不变。

Copy
cd xxx
vi .cargo/config.toml

Copy
[env]
ESP_IDF_TOOLS_INSTALL_DIR = { value = "global" }

运行项目

Copy
# 交叉编译项目
cargo build --release
# 交叉编译并运行项目
cargo run --release

检查硬件

如果运行出问题参考检查硬件

模拟仿真

官网

https://wokwi.com/，wokwi 是一个在线模拟仿真的网页端。

要想本地写代码，网页模拟可以先安装：

Copy
cargo install wokwi-server

创建新项目

记下网页 URL 的 id，

然后本地输入

Copy
# 编译
cargo build --release
# 运行
wokwi-server -c esp32c3 -i 网页端的id target/riscv32imac-esp-espidf/release/espidf-demo

教程

https://dev.to/apollolabsbin/embassy-on-esp-getting-started-27fi

https://dev.to/apollolabsbin/embassy-on-esp-gpio-5594

参考

https://esp-rs.github.io/book/introduction.html

https://narukara.github.io/std-training-zh-cn/

ESP32-C6-DevKitM-1开发板文档

ESP32-C3-DevKitC-02开发板文档

macOS 编译 ESP32C6 的 openocd-JTAG 调试