ESP32-S3の「Hello World」Rust Bare Metalアプリケーションを作成、ビルド、フラッシュ、シミュレートする方法

Rustは、リソースが限られているMCUのような組み込みデバイスの開発において非常に優れたプログラミング言語です。特に、Bare Metal(別名no_std)は多くの利点をもたらし、完全にRustでアプリケーションを作成することを可能にします。

以下の手順では、ESP32-S3-BOX-3M5Stack CoreS3のような多くのDevKitに含まれているESP32-S3向けのアプリケーションを作成、ビルド、フラッシュ、およびシミュレートする方法を説明します。

いくつかのツールをインストールする必要があります。

まず最初に、Rust自体をインストールする必要があります。rustupを使用します。

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

追加のツールがいくつか必要です。ソースコードからのインストールには`cargo install`を使用できますが、より速い方法はcargo-binstallを使用することで、ツールのバイナリをデプロイし、ソースコードからのインストールに比べて時間を節約できます。

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

ここで、追加のツールをインストールできます:

  • espup – Espressif Rustエコシステムのインストールと管理のためのツール。
  • cargo-generate – テンプレートからRustプロジェクトを作成するツール。
  • espflash – Espressif SoCおよびモジュール用のシリアルフラッシュユーティリティ。Pythonベースのesptool.pyのRustによる置き換え。
cargo binstall espup cargo-generate espflash

ESP32-S3をターゲットにしているため、Xtensaアーキテクチャに基づくRust Xtensaツールチェーンが必要です。これを別途インストールする必要があります。注:ESP32-S3以降に導入されたESP32-C3のようなRISC-Vアーキテクチャに基づくチップでは、この依存関係は必要ありません。

espup install
source ~/export-esp.sh

ここで、cargo-generateを使用してesp-rs/esp-templateのBare Metalテンプレートを使用してプロジェクトを生成できます。ツールはいくつかの質問をします。推奨設定は次のとおりです:

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

プロジェクト`embedded-rust`が作成されたら、ビルドとフラッシュの準備が整いました。

WiFiを使用する場合、特にパフォーマンスの観点から、プロジェクトをReleaseプロファイルでビルドすることをお勧めします。デバッグプロファイルは遅すぎます。

USBケーブルを使用してESP32-S3-BOX-3をコンピュータに接続し、次のコマンドを入力します。このコマンドはビルドを実行し、モニタオプション付きのespflashコマンドを呼び出して、ハードウェアをフラッシュしてモニタリングします。

cd embedded-rust
cargo run --release

もしESP32-S3-BOX-3が手元にない場合は、Wokwiシミュレーターを使用することができます。VS Codeを開きます:

code .

Wokwi VS Codeエクステンションをインストールします(Ctrl+Shift+P)、”Install extension”を選択し、Wokwiを検索して”install”をクリックします。

無料のWokwiライセンスをアクティブにします(Ctrl+Shift+P)、”Wokwi: Request a new license”を選択し、ウェブブラウザでアクティベーションプロセスに従います。

プロジェクトがReleaseプロファイルで作成された場合、`wokwi.toml`ファイルでバイナリへのパスを変更する必要があります:

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

シミュレーションを実行します(Ctrl+Shift+P)、”Wokwi: Start Simulator”を選択します。

シミュレートされたチップが表示され、次の結果が得られるはずです:

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!

おめでとうございます!ESP32-S3-BOX-3用の最初のRust Bare Metalプロジェクトが完成しました。

生産性向上のヒント:アプリケーションの開発中にシミュレーター付きのWokwiウィンドウを開いたままにしておくことができます。`cargo run –release`を使用してアプリケーションをビルドすると、シミュレーターが変更を反映し、フラッシュ手順の完了を待っている間でもシミュレーションを表示します。これにより、コード変更の結果を即座に確認できるため、大幅に時間を節約できます。