Jak vytvořit, sestavit, flashovat a simulovat “Hello World” Rust Bare Metal aplikaci pro ESP32-S3

Rust je skvělý programovací jazyk pro vývoj vestavěných zařízení, jako jsou MCU, které mají omezené zdroje. Zvláště Bare Metal (a.k.a. no_std) přináší mnoho výhod a umožňuje vytvořit celé aplikace čistě v Rustu.

Následující kroky popisují, jak vytvořit, sestavit, flashovat a simulovat aplikaci pro ESP32-S3, která je součástí mnoha DevKitů, jako jsou ESP32-S3-BOX-3 nebo M5Stack CoreS3.

Je potřeba nainstalovat několik nástrojů.

Nejprve musíme nainstalovat samotný Rust. Použijeme rustup.

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

Budeme potřebovat několik dalších nástrojů. Můžeme použít `cargo install` k provedení instalace ze zdrojového kódu. Rychlejší metodou je použití cargo-binstall, který instaluje binární soubory nástrojů a tím šetří čas ve srovnání s instalací ze zdrojového kódu.

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

Nyní můžeme nainstalovat další nástroje:

  • espup – Nástroj pro instalaci a údržbu Espressif Rust ekosystému.
  • cargo-generate – Nástroj pro vytváření Rust projektů z šablon.
  • espflash – Seriový flashovací nástroj pro Espressif SoC a moduly. Rust náhrada za Python založený esptool.py
cargo binstall espup cargo-generate espflash

Protože cílíme na ESP32-S3, který je založen na Xtensa architektuře, budeme potřebovat Rust Xtensa toolchain, který je potřeba nainstalovat samostatně. Poznámka: Pro čipy uvedené po ESP32-S3, jako je ESP32-C3, které jsou založeny na RISC-V architektuře, tato závislost není potřebná.

espup install
source ~/export-esp.sh

Nyní můžeme vygenerovat projekt pomocí Bare Metal šablony z esp-rs/esp-template pomocí cargo-generate. Nástroj se bude ptát na několik otázek. Zde je doporučené nastavení:

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

Projekt `embedded-rust` by měl být vytvořen a nyní jsme připraveni ho sestavit a flashovat.

Doporučuje se sestavit projekt v Release profilu kvůli výkonu, zejména pokud plánujete použít WiFi, které vyžaduje hodně zdrojů, a debug profil je příliš pomalý.

Připojte ESP32-S3-BOX-3 k počítači pomocí USB kabelu a zadejte následující příkaz, který vyvolá build a espflash příkaz s monitorovací volbou pro flashování a monitorování hardwaru.

cd embedded-rust
cargo run --release

Pokud nemáte k dispozici ESP32-S3-BOX-3, můžete použít Wokwi Simulator. Otevřete VS Code:

code .

Nainstalujte Wokwi VS Code Extension (Ctrl+Shift+P), vyberte “Install extension”, vyhledejte Wokwi a klikněte na “install”.

Aktivujte bezplatnou Wokwi licenci (Ctrl+Shift+P), vyberte “Wokwi: Request a new license” a následujte aktivační proces ve webovém prohlížeči.

Pokud byl projekt vytvořen v Release profilu, musíme změnit cestu k binárnímu souboru v souboru `wokwi.toml`:

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

Spusťte simulaci (Ctrl+Shift+P), vyberte “Wokwi: Start Simulator”.

Simulovaný čip by se měl objevit a měli byste získat následující výsledek:

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!

Gratulujeme! Dokončili jste svůj první Rust Bare Metal projekt pro ESP32-S3-BOX-3.

Tip: Můžete nechat okno Wokwi se simulátorem otevřené během vývoje aplikace. Jakmile aplikaci sestavíte pomocí `cargo run –release`, simulátor provede změnu a zobrazí vám simulaci, i když čekáte na dokončení flashovacího procesu. To může výrazně ušetřit čas, protože umožňuje okamžitě vidět výsledky změny kódu.