Ako vytvoriť, zostaviť, flashovať a simulovať aplikáciu “Hello World” Rust Bare Metal pre ESP32-S3

Rust je skvelý programovací jazyk pre vývoj zabudovaných zariadení ako MCU, ktoré majú obmedzené zdroje. Najmä Bare Metal (známy aj ako no_std) prináša mnoho výhod a umožňuje vytvárať celé aplikácie čisto v Rust.

Nasledujúce kroky popisujú, ako vytvoriť, zostaviť, flashovať a simulovať aplikáciu pre ESP32-S3, ktorá je súčasťou mnohých DevKitov, ako sú ESP32-S3-BOX-3 alebo M5Stack CoreS3.

Je potrebné nainštalovať niekoľko nástrojov.

Najprv musíme nainštalovať samotný Rust. Použijeme rustup.

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

Budeme potrebovať niekoľko ďalších nástrojov. Môžeme použiť `cargo install` na vykonanie inštalácie zo zdrojového kódu. Rýchlejšia metóda je použitie cargo-binstall, ktorý nasadzuje binárne súbory nástrojov a tým šetrí čas v porovnaní s inštaláciou zo 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

Teraz môžeme nainštalovať ďalšie nástroje:

  • espup – Nástroj na inštaláciu a údržbu Espressif Rust ekosystému.
  • cargo-generate – Nástroj na vytváranie Rust projektov zo šablón.
  • espflash – Sériový flashovací nástroj pre Espressif SoC a moduly. Rust náhrada za esptool.py založený na Pythone.
cargo binstall espup cargo-generate espflash

Keďže cieľujeme na ESP32-S3, ktorý je založený na architektúre Xtensa, budeme potrebovať Rust Xtensa toolchain, ktorý je potrebné nainštalovať samostatne. Poznámka: Pre čipy predstavené po ESP32-S3, ako je ESP32-C3, ktoré sú založené na architektúre RISC-V, táto závislosť nie je potrebná.

espup install
source ~/export-esp.sh

Teraz môžeme vygenerovať projekt pomocou Bare Metal šablóny z esp-rs/esp-template pomocou cargo-generate. Nástroj bude klásť niekoľko otázok. Tu je odporúčané nastavenie:

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 mal byť vytvorený a teraz sme pripravení ho zostaviť a flashovať.

Odporúča sa zostaviť projekt v Release profile kvôli výkonnostným úvahám, najmä ak plánujete použiť WiFi, ktoré vyžaduje veľa zdrojov, a debug profil je príliš pomalý.

Pripojte ESP32-S3-BOX-3 k počítaču pomocou USB kábla a zadajte nasledujúci príkaz, ktorý vyvolá build a espflash príkaz s monitorovacou voľbou na flashovanie a monitorovanie hardvéru.

cd embedded-rust
cargo run --release

Ak nemáte ESP32-S3-BOX-3 pri sebe, môžete použiť Wokwi Simulator. Otvorte VS Code:

code .

Nainštalujte Wokwi VS Code Extension (Ctrl+Shift+P), vyberte “Install extension”, vyhľadajte Wokwi a kliknite na “install”.

Aktivujte bezplatnú Wokwi licenciu (Ctrl+Shift+P), vyberte “Wokwi: Request a new license” a nasledujte aktivačný proces vo webovom prehliadači.

Ak bol projekt vytvorený v Release profile, musíme zmeniť cestu k binárnemu súboru v súbore `wokwi.toml`:

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

Spustite simuláciu (Ctrl+Shift+P), vyberte “Wokwi: Start Simulator”.

Simulovaný čip by sa mal objaviť a mali by ste získať nasledujúci výsledok:

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 ste svoj prvý Rust Bare Metal projekt pre ESP32-S3-BOX-3.

Tip pre produktivitu: Môžete nechať okno Wokwi so simulátorom otvorené počas vývoja aplikácie. Akonáhle zostavíte aplikáciu pomocou `cargo run –release`, simulátor vykoná zmenu a zobrazí vám simuláciu, aj keď čakáte na dokončenie flashovacieho procesu. To môže výrazne ušetriť čas tým, že vám umožní okamžite vidieť výsledky zmeny kódu.