2023年5月号特集 質実剛健Rust言語 特集2サポートページ

特集 質実剛健Rust言語

 特集2 マイコンで動作するフル機能Rust


●第1章 いよいよ試す環境が整った!フル機能Rust×マイコン

サンプル・コード

https://github.com/tomoyuki-nakabayashi/interface202305-c3-std-rust

 

参考文献

(1)The Rust Programming Language.

(2)The Rust Programming Language日本語版.

(3)C/C++後継モダン言語の研究,Interface 2020年5月号,CQ出版社.

(4)基礎から学ぶ組込みRust.

(5)The Embedded Rust Book.

(6)The Embedded Rust Book日本語版.

(7)並行プログラミング入門

(8)Rust Atomics and Locks.


● 第2章 std Rustを使う前に知っておきたい…no_stdとの違い

コラム Xtensa用Rustコンパイラの最新情報

https://esp-rs.github.io/book/dependencies/installing-rust.html#xtensa-esp32-esp32-s2-esp32-s3


● 第3章 ステップ1…開発環境の構築

サポート情報

p.93
以下のコマンドは実行する必要がありません(実行してもエラーになります).手順を飛ばして,サンプル・プロジェクトをダウンロードしてください.
$ rustup target add riscv32imc-esp-espidf

 

本文中のコマンド

・LinuxとmacOSでのインストール

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

・rustupのウェブ・ページ

https://rustup.rs/

・nightlyツールチェーンとstdのソースコードのインストール
rustup toolchain install nightly-2022-10-01
rustup component add rust-src --toolchain nightly-2022-10-01-x86_64-unknown-linux-gnu

・RISC-V環境のセットアップ
rustup target add riscv32imc-esp-espidf

・リンク・オプションのカスタマイズ
cargo install ldproxy

・Cバインディング生成用ツールチェーン
sudo apt install llvm-dev libclang-dev clang

・cargo-espflash
cargo install cargo-espflash

・espflash
cargo install espflash

・idf.pyを使ってビルドしたバイナリを書き込む
idf.py build
espflash build/example

・cargo-monitor
cargo install cargo-espmonitor

・espmonitor
cargo install espmonitor

・シリアル・デバイスを指定する方法
espmonitor /dev/ttyUSB0

 

参考文献・URL

(1)VSCode.
(2)Rust Analyzer Extension.
(3)esp-rs/espflash.
(4)esp-rs/espmonitor.


● 第4章 ステップ2…コンソールに「Hello World」を出力

ウェブ掲載版の図(図A〜C)

 

トラブル・シューティング

● M5Stamp C3U MateがUSBデバイスとして認識されない場合

初回書き込み時のみ,以下のどちらかで認識するかどうか試してみてください.

  • M5Stamp C3U Mateのボタンを押しながらUSBケーブルを本体に接続する
  • USBケーブルを接続した状態で,ボタンを押しながらリセット・ボタンを押す

ボタンはM5Stamp C3U MateのUSBコネクタすぐ上にあります.

 

本文中のコマンド

・ビルドを行う
cargo espflash --release --monitor

・USBデバイス・ファイルを指定してコマンドを実行する
cargo espflash /dev/ttACM0

・環境変数IDF_PATHが設定されているかどうか確認する
echo $IDF_PATH

・環境変数をunsetしてからビルド・コマンドを実行する
unset $IDF_PATH
cargo espflash --release --monitor

・リンク・プロセスをチラッと見てみたい方
cargo build -vv

 

参考文献・URL

(1)ws2812-esp32-rmt-driver.
(2)ESP32-C3-DevKitM-1.
(3)hello_c3.
(4)esp-idf-sys.
(5)bindgen.
(6)embedded-hal.
(7)esp-hal.
(8)embedded-svc.
(9)embuild.
(10)resources/cmake_project.


● 第5章 ステップ3…Rust開発環境の構成を理解する

ウェブ掲載版のリスト(リストA〜B)


● 第6章 ステップ4…便利なライブラリを試してみる

ウェブ掲載版のリストと図(リストA〜M,図A〜J)

本文中のコマンド

・ビルド用のソースコード
https://github.com/tomoyuki-nakabayashi/interface202305-c3-std-rust/play-std/

・RUST_LOG環境変数をINFOに設定する
RUST_LOG=INFO cargo run

・Hello, worldのビルド
cargo espflash --example log --monitor

・anyhowのビルド
cargo espflash --example anyhow --monitor

・allocのビルド
cargo espflash --example alloc --monitor

・プロジェクトをclean
cargo clean

・sdkconfig.defaultsの設定
CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=4096

 

参考文献・URL

(1)log.
(2)env_logger
(3)anyhow.
(4)heapless.
(5)vTaskList.
(6)thread-priority.
(7)RustのAPIリファレンス
(8)Rustnomicon Send and Sync
(9)高野 祐輝,並行プログラミング入門.オライリー・ジャパン.


● 第7章 無線LAN接続

ウェブ掲載版のリストと図(リストA〜H,図A〜D)

 

本文中のコマンド

・simple-http-serverのインストール
cargo install simple-http-server

・HTTPリクエストのテストに便利なサイト
http://httpbin.org/

・プログラムの実行
cargo espflash --monitor

 

参考文献・URL

(1)ESP-IDFのWi-FI Station Example.
(2)netif.
(3)event loop.
(4)NVS.
(5)toml-cfg.
(6)std::net.
(7)simple-http-server
(8)attohttpc.
(9)reqwest.
(10)native-tls.
(11)rustls.
(12)mbedtls implementation.
(13)ring.
(14)Support Xtensa, RISC-V and ESP-IDF.
(15)rust-esp32-std-demo.
(16)smol.


● 第8章 I2C/SPI/GPIO/タイマのコントロール

ウェブ掲載版のリストと図(リストA〜I,図A〜D)

 

本文中のコマンド

・BME280のプログラムの実行
cargo espflash --example bme280 --monitor

・メイン・スタックを増やす
CONFIG_ESP_MAIN_TASK_STACK_SIZE=24000

・SSD1331のプログラムの実行
cargo espflash --example ssd1331 --monitor

・タイマのプログラムの実行
cargo espflash --example timer --monitor

 

参考文献・URL

(1)中林 知之;基礎から学ぶ組込みRust,C&R研究所.
(2)BME280.
(3)bme280.
(4)Ship a 1.0 release.
(5)Update to embedded-hal 1.0.0-alpha.8 and add optional support for embedded-hal-async.
(6)有機ELディスプレイ 96×64 RGB.
(7)embedded-graphics.
(8)epd-waveshare.
(9)ili9341.
(10)st7735.


● 第9章 クライアント&サーバ…センサ・データ送信装置を作る

ウェブ掲載版の図とリスト(図A〜E,リストA〜R)