Interface編集部
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出版社.
(6)The Embedded Rust Book日本語版.
● 第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のウェブ・ページ
・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」を出力
トラブル・シューティング
● 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開発環境の構成を理解する
● 第6章 ステップ4…便利なライブラリを試してみる
本文中のコマンド
・ビルド用のソースコード
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接続
本文中のコマンド
・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/タイマのコントロール
本文中のコマンド
・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章 クライアント&サーバ…センサ・データ送信装置を作る