Closed7

ESP32(Xtensa) で Rust で開発したい。C言語ライブラリのコンパイルなどの備忘。

himanushihimanushi

ここの目的は「簡単にC言語ライブラリをESP32(Xtensa)用でRustライブラリとしてコンパイルする機構を作る」だけ。
Rust とマイコンを学べてお得みたいな感じで楽しめればいいなぁ。

himanushihimanushi

なぜESP32なのか

M5Stack という神ガジェットがあるため。電子工作したくない勢はほぼこれ一択。ただし、Rust で開発するには色々とハードルがある。

M5Stack とは

Wi-Fi、タッチディスプレイ、マイク、スピーカー、さまざまなセンサー類、あれこれついて1万くらいで買える最強マイコン。小さくて可愛い。マイコン漁るように探したが、M5Stack がベストかなと。Wio Terminal もいいかも。
https://www.switch-science.com/products/8960
アイディア次第でどんなガジェットにでもなる。有名なものはお話しロボットのスタックチャン。
https://protopedia.net/prototype/2345

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 を使う。

himanushihimanushi

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
himanushihimanushi

M5GFX を Rust 用に build しようとしてるけど全然できそうにない。エラー出まくり。

このスクラップは5ヶ月前にクローズされました