ESP32(Xtensa) で Rust で開発したい。C言語ライブラリのコンパイルなどの備忘。
ここの目的は「簡単にC言語ライブラリをESP32(Xtensa)用でRustライブラリとしてコンパイルする機構を作る」だけ。
Rust とマイコンを学べてお得みたいな感じで楽しめればいいなぁ。
なぜESP32なのか
M5Stack という神ガジェットがあるため。電子工作したくない勢はほぼこれ一択。ただし、Rust で開発するには色々とハードルがある。
M5Stack とは
Wi-Fi、タッチディスプレイ、マイク、スピーカー、さまざまなセンサー類、あれこれついて1万くらいで買える最強マイコン。小さくて可愛い。マイコン漁るように探したが、M5Stack がベストかなと。Wio Terminal もいいかも。
アイディア次第でどんなガジェットにでもなる。有名なものはお話しロボットのスタックチャン。Xtensa とは
esp32 の代表的なCPUコア(Intel, ARM とかの仲間)である。esp32 には様々なシリーズがある。無印, Sシリーズが Xtensa で、C, Hシリーズが RISC-V が使用されている。Rust 公式でコンパイラーがあるから、RISC-V だとおそらくコンパイルは簡単。C, Hシリーズは電子工作が必須なので除外。まぁ M5Stack が Xtensa を使用しなくなる可能性はあるが、主力がSシリーズなので一旦勉強も兼ねて、やってみる。(すでCoreMP135という ARM のやつ出てるけどね)
Rust でC言語ライブラリをコンパイルするには
Rust はC言語のようにコンパイルして使用する。Rust の target でコンパイル対象のCPUコアを指定してコンパイルする必要がある。Rust 公式の target はこちらで確認できる。esp32 の Xtensa は公式でコンパイラがないので、 esp-rs を使う。
ESP32(Xtensa), Rust, C/C++, PlatformIO で開発したいのでここを参照してコマンド実行してく。
事前準備
# Rust インストール
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
cargo install cargo-generate
cargo install cargo-pio
cargo install espup
# Rust toolchain
espup install
# 現在のツールチェインを確認(esp が増えているはず)
rustup toolchain list
> stable-aarch64-apple-darwin (default)
> nightly-aarch64-apple-darwin
> esp
# ツールチェイン で esp を default に変更する
rustup default esp
> info: default toolchain set to 'esp'
# PlatformIO CLI
pip install platformio
プロジェクト作成
~/Work/rust-xtensa/ [main*] cargo pio new xtensa_test --platform espressif32 --frameworks espidf --board m5stack-coreink
/private/var/folders/yq/7233c8xn1sz_qtb1m2k3ypwr0000gn/T/.piocore-installer-_55ds3ma/tmpq01gktgb/pioinstaller.zip/requests/__init__.py:102: RequestsDependencyWarning: urllib3 (1.26.9) or chardet (5.2.0)/charset_normalizer (2.0.12) doesn't match a supported version!
Found compatible PlatformIO Core 6.1.15 -> /Users/tokumei/.platformio/penv/bin/platformio
[embuild::pio] Configuring MCU 'ESP32' supported by the configured board 'm5stack-coreink'
[embuild::pio] Resolved platform: 'espressif32', MCU: 'ESP32', board: 'm5stack-coreink', frameworks: [espidf]
Created library `xtensa_test` package
M5GFX を Rust 用に build しようとしてるけど全然できそうにない。エラー出まくり。
別の方法を探るためペンディング