chakokuのブログ(rev4)

テック・コミック・DTM・・・ごくまれにチャリ

組み込みRustをもう一度勉強するため評価ボード(ESP32-C3-DevKit-RUST)を手配

要約:組み込みRustを勉強するため、Espressifのチュートリアルで必須となっている評価ボード(ESP32-C3-DevKit-RUST)をMouserに発注
詳細:
1年ぐらい前だったかRustで組み込みプログラミングをやろうと思ったけど、サポートされているマイコンアーキやボードとの整合性で、クレート?やらnon-stdやらいろいろハマってしまいエラーを解消させるのが大変すぎると勉強をあきらめた。が、、やはり再度やるべきと思い、比較的苦労の少ないRISC-Vで勉強することにした*1。EspressifではRISC-VコアのESC32-C3でRustをサポートしており、チュートリアルが公開されている。特にMQTTを使うサンプルが提供されておりこれを動かしたい。チュートリアルではESP32-C3-DevKit-RUSTという評価ボードを使っているのだが、QAコーナで「他のボードでも大丈夫?」という質問に、「指定ボードを使う方が混乱が無い」と書かれていたので、指定された評価ボードを買うことにした。ボードの外観は以下の通り。ESP32 DevKitのような感じですが、演習用なのかいろいろシルク印刷されていて初学者にも優しい印象。。。

指定されたボードは秋月等にはなく、Amazonでは売られていたが1万円であった。これでは高すぎるので、Mouserに発注した。
ボード自体は3,000円ぐらいなのだが、手配料込みで5,000円。発注した翌日に、「Customer End-User Certificateを提出しろ」とメールが来た。電子機器だから証明が必要なのだろうか。Personal Use等と書いてPDF変換して返送した。ボードはいつ届くのやら。。。
発注したMouserのサイト

なお、技適は取れてなさそうなので、実験に先立ち総務省に申請する必要あり。

■追記(2023/2/2)
MouserのExport Compliance Teamから、該当のパーツは輸出制限があるためもっと詳しく説明しろと要求が来た。

Since Mouser Electronics part number 356-ESP32C3DVKTRUST1 has export restrictions 
we require detailed information regarding the end use and ultimate destination for 
auditing purposes.

英語で反論するのは全く慣れないのだが、、「プロトタイプでしかなく、販売もしないし、軍用にも使わない」と書いて返事した。ペライチのシステム構成図も付けた。輸出制限のためにパーツを出荷してもらえない人もいるようで、どうなることやら。こんなに手間がかかるのだったら、Amazonで同じボードが1万で売られているのは、手間と時間を買うと考えると妥当なのかもしれない(今は買わない。もし出荷できませんと回答来たら腹を立てて1万のボードを買ってしまうかも。。)

■追記(2023/2/7)
Mouserから回答が来て、出荷認定されたとのこと。なんとか手に入りそうだ。

コンパイル環境構築メモ
モノが届くのを待つ間、組み込みRustをビルドできるように環境構築を進める。以前、WSL上にRust環境を作ったので今回はそのまま使う。
以下の通りRISC-Vもビルド可能(多分)

$ rustup target list | grep riscv
riscv32i-unknown-none-elf
riscv32imac-unknown-none-elf
riscv32imc-unknown-none-elf
riscv64gc-unknown-linux-gnu
riscv64gc-unknown-none-elf
riscv64imac-unknown-none-elf

EspressifのチュートリアルではToolchainを入れろと書いてる*2のでこれらを入れる

$ cargo install cargo-espflash ldproxy

cargo installを実行すると、nightly featuresが利用可能になっていない的なエラーで怒られる。

error: failed to parse manifest at `/home/sumi/.cargo/registry/src/github.com-1ecc6299db9ec823/cargo-espflash-1.7.0/Cargo.toml`
Caused by:
  feature `edition2021` is required

  this Cargo does not support nightly features, but if you
  switch to nightly channel you can add
  `cargo-features = ["edition2021"]` to enable this feature

cargo-featuresという定義を変えるようなのだが、、configがどこにあるかちょっと分からず。軽くググって以下のコマンドで対応

rustup default nightly && rustup update

これで再度インストールを試みる。ldproxyは入ったが、cargo-espflashでビルドエラーになる。エラーは以下

error: failed to compile `cargo-espflash v1.7.0`, intermediate artifacts can be found at `/tmp/cargo-installcaC2QN`

上記エラーに対して、Gitで書き込み*3があり、ライブラリlibudev-devを入れろとあった。以下でライブラリを入れてから再度インストール

sudo apt-get install libudev-dev
cargo install cargo-espflash

上記作業で、追加が必要なEspressif toolchainは入れられた。
それ以外に依存関係になっている、llvm-dev libclang-dev clang は以前Rustを入れた時にすでに入ってるので対応不要

■参考URL
Introduction - Embedded Rust on Espressif
GitHub - esp-rs/esp-rust-board: Open Hardware with ESP32-C3 compatible with Feather specification designed in KiCad

*1:一番苦労がないのはARMだろう。解説本でよく使われる「Wio Terminal」をスイッチサイエンスに発注した

*2:Software - Embedded Rust on Espressif

*3:error: failed to compile `espflash v1.2.0` · Issue #108 · esp-rs/espflash · GitHub