Comment créer, construire, flasher et simuler une application “Hello World” Rust Bare Metal pour ESP32-S3

Rust est un excellent langage de programmation pour le développement de dispositifs embarqués comme les MCU, qui ont des ressources limitées. En particulier, Bare Metal (également connu sous le nom de no_std) apporte de nombreux avantages et permet de créer des applications complètes entièrement en Rust.

Les étapes suivantes décrivent comment créer, construire, flasher et simuler une application pour ESP32-S3, qui est incluse dans de nombreux DevKits comme le ESP32-S3-BOX-3 ou le M5Stack CoreS3.

Plusieurs outils doivent être installés.

Tout d’abord, nous devons installer Rust lui-même. Nous utiliserons rustup.

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

Nous aurons besoin de plusieurs outils supplémentaires. Nous pouvons utiliser `cargo install` pour effectuer l’installation à partir du code source. La méthode la plus rapide est d’utiliser cargo-binstall, qui déploie les binaires des outils, ce qui permet de gagner du temps par rapport à l’installation à partir du code source.

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

Nous pouvons maintenant installer des outils supplémentaires :

  • espup – Outil pour installer et maintenir l’écosystème Rust d’Espressif.
  • cargo-generate – Outil pour créer des projets Rust à partir de modèles.
  • espflash – Utilitaire de flash série pour les SoCs et modules Espressif. Remplacement Rust pour esptool.py basé sur Python.
cargo binstall espup cargo-generate espflash

Comme nous visons l’ESP32-S3, qui est basé sur l’architecture Xtensa, nous aurons besoin de la chaîne d’outils Xtensa de Rust, qui doit être installée séparément. Note : Pour les puces introduites après l’ESP32-S3, comme l’ESP32-C3, qui sont basées sur l’architecture RISC-V, cette dépendance n’est pas nécessaire.

espup install
source ~/export-esp.sh

Nous pouvons maintenant générer un projet en utilisant le modèle Bare Metal de esp-rs/esp-template avec cargo-generate. L’outil posera plusieurs questions. Voici la configuration recommandée :

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

Le projet `embedded-rust` devrait être créé, et nous sommes maintenant prêts à le construire et à le flasher.

Il est recommandé de construire le projet en profil Release, en raison des considérations de performance, surtout si vous prévoyez d’utiliser le WiFi, qui nécessite beaucoup de ressources, et le profil de débogage est trop lent.

Connectez l’ESP32-S3-BOX-3 à votre ordinateur en utilisant un câble USB et tapez la commande suivante, qui invoquera une commande de construction et espflash avec l’option de moniteur pour flasher et surveiller le matériel.

cd embedded-rust
cargo run --release

Si vous n’avez pas l’ESP32-S3-BOX-3 avec vous, il est possible d’utiliser le simulateur Wokwi. Ouvrez VS Code :

code .

Installez l’extension Wokwi pour VS Code (Ctrl+Shift+P), sélectionnez “Install extension”, recherchez Wokwi et cliquez sur “install”.

Activez la licence gratuite Wokwi (Ctrl+Shift+P), sélectionnez “Wokwi: Request a new license” et suivez le processus d’activation dans le navigateur web.

Si le projet a été créé en profil Release, nous devons changer le chemin vers le binaire dans le fichier `wokwi.toml` :

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

Exécutez la simulation (Ctrl+Shift+P), sélectionnez “Wokwi: Start Simulator”.

La puce simulée devrait apparaître et vous devriez obtenir le résultat suivant :

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!

Félicitations ! Vous avez complété votre premier projet Rust Bare Metal pour ESP32-S3-BOX-3.

Astuce de productivité : Vous pouvez garder la fenêtre Wokwi avec le simulateur ouverte pendant le développement de l’application. Une fois que vous avez construit l’application en utilisant `cargo run –release`, le simulateur prendra en compte le changement et vous montrera la simulation, même pendant que vous attendez que la procédure de flashage soit terminée. Cela peut vous faire gagner beaucoup de temps en vous permettant de voir immédiatement les résultats d’un changement de code.