Jak stworzyć, zbudować, flashować i symulować aplikację “Hello World” Rust Bare Metal dla ESP32-S3

Rust to doskonały język programowania do tworzenia urządzeń wbudowanych, takich jak MCU, które mają ograniczone zasoby. W szczególności Bare Metal (znany również jako no_std) przynosi wiele korzyści i umożliwia tworzenie całych aplikacji wyłącznie w Rust.

Poniższe kroki opisują, jak stworzyć, zbudować, flashować i symulować aplikację dla ESP32-S3, który jest dostępny w wielu zestawach deweloperskich, takich jak ESP32-S3-BOX-3 lub M5Stack CoreS3.

Należy zainstalować kilka narzędzi.

Po pierwsze, musimy zainstalować sam Rust. Użyjemy rustup.

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

Będziemy potrzebować kilku dodatkowych narzędzi. Możemy użyć `cargo install`, aby przeprowadzić instalację z kodu źródłowego. Szybszą metodą jest użycie cargo-binstall, który wdraża binaria narzędzi, oszczędzając czas w porównaniu z instalacją z kodu źródłowego.

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

Teraz możemy zainstalować dodatkowe narzędzia:

  • espup – Narzędzie do instalowania i utrzymywania ekosystemu Rust Espressif.
  • cargo-generate – Narzędzie do tworzenia projektów Rust z szablonów.
  • espflash – Narzędzie do flashowania przez serial dla SoC i modułów Espressif. Zastępnik esptool.py w Rust dla Python.
cargo binstall espup cargo-generate espflash

Ponieważ naszym celem jest ESP32-S3, który opiera się na architekturze Xtensa, będziemy potrzebować toolchain Rust Xtensa, który należy zainstalować osobno. Uwaga: Dla chipów wprowadzonych po ESP32-S3, takich jak ESP32-C3, które opierają się na architekturze RISC-V, ta zależność nie jest potrzebna.

espup install
source ~/export-esp.sh

Teraz możemy wygenerować projekt, korzystając z szablonu Bare Metal z esp-rs/esp-template przy użyciu cargo-generate. Narzędzie zada kilka pytań. Oto zalecana konfiguracja:

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` powinien być utworzony i teraz jesteśmy gotowi, aby go zbudować i flashować.

Zaleca się budowanie projektu w profilu Release, ze względu na wydajność, zwłaszcza jeśli planujesz używać WiFi, które wymaga wielu zasobów, a profil debugowania jest zbyt wolny.

Podłącz ESP32-S3-BOX-3 do komputera za pomocą kabla USB i wpisz następujące polecenie, które uruchomi polecenie build i espflash z opcją monitorowania, aby flashować i monitorować sprzęt.

cd embedded-rust
cargo run --release

Jeśli nie masz ESP32-S3-BOX-3, możesz użyć symulatora Wokwi. Otwórz VS Code:

code .

Zainstaluj rozszerzenie Wokwi dla VS Code (Ctrl+Shift+P), wybierz “Install extension”, wyszukaj Wokwi i kliknij “install”.

Aktywuj darmową licencję Wokwi (Ctrl+Shift+P), wybierz “Wokwi: Request a new license” i postępuj zgodnie z procesem aktywacji w przeglądarce internetowej.

Jeśli projekt został utworzony w profilu Release, musimy zmienić ścieżkę do pliku binarnego w pliku `wokwi.toml`:

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

Uruchom symulację (Ctrl+Shift+P), wybierz “Wokwi: Start Simulator”.

Symulowany chip powinien się pojawić i powinieneś uzyskać następujący wynik:

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!

Gratulacje! Ukończyłeś swój pierwszy projekt Rust Bare Metal dla ESP32-S3-BOX-3.

Porada dotycząca produktywności: Możesz pozostawić otwarte okno Wokwi z symulatorem podczas tworzenia aplikacji. Po zbudowaniu aplikacji przy użyciu `cargo run –release`, symulator przechwyci zmianę i pokaże symulację, nawet podczas oczekiwania na zakończenie procesu flashowania. Może to znacznie zaoszczędzić czas, pozwalając na natychmiastowe zobaczenie wyników zmiany kodu.