Come creare, costruire, flashare e simulare un’applicazione “Hello World” Rust Bare Metal per ESP32-S3

Rust è un ottimo linguaggio di programmazione per lo sviluppo di dispositivi embedded come gli MCU, che hanno risorse limitate. In particolare, Bare Metal (anche noto come no_std) offre molti vantaggi e consente di creare applicazioni complete interamente in Rust.

I seguenti passaggi descrivono come creare, costruire, flashare e simulare un’applicazione per ESP32-S3, che è inclusa in molti DevKit come l’ESP32-S3-BOX-3 o l’M5Stack CoreS3.

Sono necessari diversi strumenti da installare.

Innanzitutto, dobbiamo installare Rust stesso. Utilizzeremo rustup.

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

Avremo bisogno di diversi strumenti aggiuntivi. Possiamo utilizzare `cargo install` per eseguire l’installazione dal codice sorgente. Il metodo più veloce è utilizzare cargo-binstall, che distribuisce i binari degli strumenti, risparmiando tempo rispetto all’installazione dal codice sorgente.

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

Ora possiamo installare strumenti aggiuntivi:

  • espup – Strumento per installare e mantenere l’ecosistema Rust di Espressif.
  • cargo-generate – Strumento per creare progetti Rust a partire da modelli.
  • espflash – Utilità di flash seriale per SoC e moduli Espressif. Sostituzione in Rust per esptool.py basato su Python.
cargo binstall espup cargo-generate espflash

Poiché stiamo puntando all’ESP32-S3, che si basa sull’architettura Xtensa, avremo bisogno della toolchain Rust Xtensa, che deve essere installata separatamente. Nota: Per i chip introdotti dopo l’ESP32-S3, come l’ESP32-C3, che si basano sull’architettura RISC-V, questa dipendenza non è necessaria.

espup install
source ~/export-esp.sh

Ora possiamo generare un progetto utilizzando il modello Bare Metal di esp-rs/esp-template utilizzando cargo-generate. Lo strumento farà diverse domande. Ecco la configurazione consigliata:

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

Il progetto `embedded-rust` dovrebbe essere creato e ora siamo pronti per costruirlo e flasharlo.

È consigliato costruire il progetto in profilo Release, per considerazioni di performance, specialmente se si prevede di usare WiFi, che richiede molte risorse, e il profilo di debug è troppo lento.

Collegare l’ESP32-S3-BOX-3 al computer usando un cavo USB e digitare il seguente comando, che invocherà un comando di build e espflash con l’opzione monitor per flashare e monitorare l’hardware.

cd embedded-rust
cargo run --release

Se non si dispone dell’ESP32-S3-BOX-3, è possibile utilizzare il simulatore Wokwi. Aprire VS Code:

code .

Installare l’estensione Wokwi per VS Code (Ctrl+Shift+P), selezionare “Install extension”, cercare Wokwi e cliccare su “install”.

Attivare la licenza gratuita di Wokwi (Ctrl+Shift+P), selezionare “Wokwi: Request a new license” e seguire il processo di attivazione nel browser web.

Se il progetto è stato creato in profilo Release, è necessario modificare il percorso del binario nel file `wokwi.toml`:

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

Eseguire la simulazione (Ctrl+Shift+P), selezionare “Wokwi: Start Simulator”.

Il chip simulato dovrebbe apparire e si dovrebbe ottenere il seguente risultato:

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!

Congratulazioni! Hai completato il tuo primo progetto Rust Bare Metal per ESP32-S3-BOX-3.

Suggerimento per la produttività: Puoi mantenere aperta la finestra di Wokwi con il simulatore mentre sviluppi l’applicazione. Una volta costruita l’applicazione usando `cargo run –release`, il simulatore rileverà la modifica e ti mostrerà la simulazione anche mentre aspetti che la procedura di flash sia completata. Questo può farti risparmiare molto tempo permettendoti di vedere immediatamente i risultati di una modifica del codice.