如何创建、构建、烧录和模拟ESP32-S3的“Hello World”Rust裸机应用程序

Rust 是一种非常适合开发资源有限的MCU等嵌入式设备的编程语言。尤其是Bare Metal(也称为no_std)带来了许多优势,可以完全用Rust创建整个应用程序。

以下步骤描述了如何为ESP32-S3创建、构建、烧录和模拟应用程序,该芯片包含在许多开发套件中,例如ESP32-S3-BOX-3M5Stack CoreS3

需要安装几种工具。

首先,我们需要安装Rust本身。我们将使用rustup

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

我们还需要几个额外的工具。我们可以使用`cargo install`从源代码进行安装。更快的方法是使用cargo-binstall,它部署工具的二进制文件,节省了从源代码安装的时间。

curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash

现在我们可以安装其他工具:

  • espup – 用于安装和维护Espressif Rust生态系统的工具。
  • cargo-generate – 用于从模板创建Rust项目的工具。
  • espflash – 用于Espressif SoC和模块的串行烧录工具。Rust替代Python基础的esptool.py。
cargo binstall espup cargo-generate espflash

由于我们目标是基于Xtensa架构的ESP32-S3,我们需要单独安装Rust Xtensa工具链。注意:对于ESP32-S3之后推出的基于RISC-V架构的芯片(如ESP32-C3),不需要这个依赖项。

espup install
source ~/export-esp.sh

现在我们可以使用cargo-generate从esp-rs/esp-template生成Bare Metal模板项目。该工具将提出几个问题。推荐设置如下:

cargo generate esp-rs/esp-template
   Project Name: embedded-rust
   Destination: /home/georgik/projects/embedded-rust ...
   project-name: embedded-rust ...
   Generating template ...
✔    Which MCU to target? · esp32s3
✔    Configure advanced template options? · true
✔    Enable allocations via the esp-alloc crate? · true
✔    Enable WiFi/Bluetooth/ESP-NOW via the esp-wifi crate? · false
✔    Configure project to use Dev Containers (VS Code and GitHub Codespaces)? · true
✔    Configure project to support Wokwi simulation with Wokwi VS Code extension? · true
✔    Add CI files for GitHub Action? · true
✔    The template is requesting to run the following command. Do you agree?
cargo fmt · yes
   Moving generated files into: `/home/georgik/projects/embedded-rust`...
   Initializing a fresh Git repository
✨   Done! New project created /home/georgik/projects/embedded-rust

项目`embedded-rust`应该已经创建,现在我们准备构建和烧录它。

建议在Release配置文件中构建项目,考虑到性能,尤其是如果你计划使用需要大量资源的WiFi,调试配置文件会太慢。

使用USB电缆将ESP32-S3-BOX-3连接到电脑,然后输入以下命令,这将调用构建和espflash命令,并带有监视选项来烧录和监视硬件。

cd embedded-rust
cargo run --release

如果你没有ESP32-S3-BOX-3,你可以使用Wokwi模拟器。打开VS Code:

code .

安装Wokwi VS Code扩展(Ctrl+Shift+P),选择“Install extension”,搜索Wokwi并点击安装。

激活免费的Wokwi许可证(Ctrl+Shift+P),选择“Wokwi: Request a new license”,并按照网页浏览器中的激活过程进行操作。

如果项目是以Release配置文件创建的,我们需要在`wokwi.toml`文件中更改二进制文件的路径:

[wokwi]
version = 1
elf = "target/xtensa-esp32s3-none-elf/release/embedded-rust"
firmware = "target/xtensa-esp32s3-none-elf/release/embedded-rust"

运行模拟(Ctrl+Shift+P),选择“Wokwi: Start Simulator”。

模拟芯片应出现,你应该会得到以下结果:

ESP-ROM:esp32s3-20210327
Build:Mar 27 2021
rst:0x1 (POWERON),boot:0x8 (SPI_FAST_FLASH_BOOT)
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fce3808,len:0x370
load:0x403c9700,len:0x900
load:0x403cc700,len:0x2364
entry 0x403c98ac
INFO - Hello world!

恭喜!你已经完成了第一个针对ESP32-S3-BOX-3的Rust Bare Metal项目。

生产力提示:在开发应用程序时,你可以保持Wokwi窗口和模拟器打开。使用`cargo run –release`构建应用程序后,模拟器会检测到更改并显示模拟结果,即使你在等待烧录过程完成时也是如此。这可以大大节省时间,让你立即看到代码更改的结果。