Wie man eine “Hello World” Rust Bare Metal Anwendung für ESP32-S3 erstellt, baut, flasht und simuliert

Rust ist eine großartige Programmiersprache für die Entwicklung von eingebetteten Geräten wie MCUs, die begrenzte Ressourcen haben. Besonders Bare Metal (a.k.a. no_std) bringt viele Vorteile und ermöglicht die Erstellung kompletter Anwendungen rein in Rust.

Die folgenden Schritte beschreiben, wie man eine Anwendung für ESP32-S3 erstellt, baut, flasht und simuliert, die in vielen DevKits wie dem ESP32-S3-BOX-3 oder M5Stack CoreS3 enthalten ist.

Es gibt mehrere Werkzeuge, die installiert werden müssen.

Zunächst müssen wir Rust selbst installieren. Wir verwenden dazu rustup.

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

Wir benötigen mehrere zusätzliche Werkzeuge. Wir können `cargo install` verwenden, um die Installation aus dem Quellcode durchzuführen. Die schnellere Methode ist die Verwendung von cargo-binstall, das Binärdateien von Werkzeugen bereitstellt und so im Vergleich zur Installation aus dem Quellcode Zeit spart.

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

Nun können wir zusätzliche Werkzeuge installieren:

  • espup – Werkzeug zur Installation und Wartung des Espressif Rust-Ökosystems.
  • cargo-generate – Werkzeug zur Erstellung von Rust-Projekten aus Vorlagen.
  • espflash – Serielles Flash-Werkzeug für Espressif-SoCs und -Module. Rust-Ersatz für das Python-basierte esptool.py
cargo binstall espup cargo-generate espflash

Da wir den ESP32-S3 anvisieren, der auf der Xtensa-Architektur basiert, benötigen wir die Rust Xtensa Toolchain, die separat installiert werden muss. Hinweis: Für nach dem ESP32-S3 eingeführte Chips wie den ESP32-C3, die auf der RISC-V-Architektur basieren, ist diese Abhängigkeit nicht erforderlich.

espup install
source ~/export-esp.sh

Nun können wir ein Projekt mit der Bare Metal Vorlage von esp-rs/esp-template mithilfe von cargo-generate erstellen. Das Tool wird mehrere Fragen stellen. Hier ist die empfohlene Konfiguration:

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

Das Projekt `embedded-rust` sollte nun erstellt sein und wir sind bereit, es zu bauen und zu flashen.

Es wird empfohlen, das Projekt im Release-Profil zu bauen, aufgrund der Leistungsüberlegungen, insbesondere wenn Sie planen, WiFi zu nutzen, das viele Ressourcen benötigt, und das Debug-Profil zu langsam ist.

Verbinden Sie das ESP32-S3-BOX-3 mit Ihrem Computer über ein USB-Kabel und geben Sie den folgenden Befehl ein, der einen Build- und espflash-Befehl mit der Monitor-Option aufruft, um die Hardware zu flashen und zu überwachen.

cd embedded-rust
cargo run --release

Wenn Sie das ESP32-S3-BOX-3 nicht zur Hand haben, können Sie den Wokwi Simulator verwenden. Öffnen Sie VS Code:

code .

Installieren Sie die Wokwi VS Code Extension (Ctrl+Shift+P), wählen Sie “Install extension”, suchen Sie nach Wokwi und klicken Sie auf “install”.

Aktivieren Sie die kostenlose Wokwi-Lizenz (Ctrl+Shift+P), wählen Sie “Wokwi: Request a new license” und folgen Sie dem Aktivierungsprozess im Webbrowser.

Wenn das Projekt im Release-Profil erstellt wurde, müssen wir den Pfad zur Binärdatei in der `wokwi.toml` Datei ändern:

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

Starten Sie die Simulation (Ctrl+Shift+P), wählen Sie “Wokwi: Start Simulator”.

Der simulierte Chip sollte erscheinen und Sie sollten das folgende Ergebnis erhalten:

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!

Herzlichen Glückwunsch! Sie haben Ihr erstes Rust Bare Metal Projekt für ESP32-S3-BOX-3 abgeschlossen.

Produktivitätstipp: Sie können das Wokwi-Fenster mit dem Simulator geöffnet lassen, während Sie die Anwendung entwickeln. Sobald Sie die App mit `cargo run –release` bauen, übernimmt der Simulator die Änderung und zeigt Ihnen die Simulation an, auch während Sie auf den Abschluss des Flash-Vorgangs warten. Dies kann viel Zeit sparen, da Sie die Ergebnisse einer Codeänderung sofort sehen können.