組み込み Rust を試してみたい!
その場合、現時点では書籍「基礎から学ぶ 組み込みRust」において十分な解説があります。
しかしながらこれは Wio Terminal をターゲットとし、手元で書き込み/実行を確認しながら進める前提となっています。
今回はリモート勉強会を想定し、 Wio Terminal を持っていない参加者が複数いても、主催者が持つ Wio Terminal を操作してハンズオンに参加する方法を考えます。
以下は Wio Terminal をターゲットとしていますが、RaspberryPi Pico や ESP32 などをターゲットとしても同じように実現できるでしょう。
前提条件
- 参加者は手ぶら
- 主催者側で複数の Wio Terminal がある
- 主催者側で Linux PC がある
ハンズオン実施方法
- 主催者が手持ちの WIO TERMINAL は WebCam で映し出しておく
- 主催者は Linux PC をハンズオンサーバとして公開する
- 参加者は SSH でハンズオンサーバにアクセスする
- 主催者は WIO TERMINAL のスイッチを2回スライドしてブートローダーモードにする(*)
- 参加者は開発したアプリをWIO TERMINALに転送、実行
- アプリを実行した結果、LED が点滅、WebCam で点滅動作を確認
主催者は、(*)の作業だけはアプリ書き込みが必要となるごとに、手作業で毎回行わないといけません。
カメラ公開の例
WIO TERMINAL を 2台公開した例です。
nanbuwks のカメラにつながっている左側が WIO TERMINAL #1 , 右側がWIO TERMINAL #2 です。
カメラで微妙に見える青いランプがLチカで作業するLEDです。
nanbuwks のカメラの背景ブラウンターミナルが screen セッション1 、背景赤ターミナルが screen セッション2 です。 この screen セッションに参加者が接続して操作します。
Linux PC の設定
- Rust 開発環境をインストールします(後述)
- リモートでログインする専用のユーザを作り、権限を適切に設定します。特に、マイコンへ書き込みができる権限が必要です。
- 参加者ごとにユーザを別個に作るとインストール実習が個別に行えます。1つのユーザを共用にすると、インストールは1回のみで省略できます。
- Screen セッションを複数作っておきます。
- ポートを適宜開放し、外部から SSH が入れるようにしておきます。
- Wio Terminal を必要数 Linux PC に接続し、ブートローダーモードにしておきます。
参加者が行うこと
- ハンズオンサーバに ssh でログインして、screen -x 1 または screen -x 2 でスクリーンセッションにつなぎます。
- Rust で作成したバイナリを、Wio Terminal に書き込みます。
- 今回作成するバイナリは LED を点滅させるプログラムです。
- 書き込みは、Wio Terminal が外部USBメモリとして見えるのでそこにファイルを転送
- 書き込みが終わると自動でプログラムが実行されます。
- 青いLEDが点滅することが確認できたら成功です。
バイナリ作成方法
バイナリは以下の2つの方法でつくることができます。
- ハンズオンサーバで作成
- 自分のローカルPCで作成したものをハンズオンサーバに転送
ハンズオンサーバで作成するやりかたは、「組み込みRustハンズオンテキスト」https://qiita.com/nanbuwks/items/5c2203f539575a58f29e を参照してください。
自分のローカルPCで作成する場合は、scp でハンズオンサーバにコピーします。
自分のローカルPCで作成する場合は、上記「組み込みRustハンズオンテキスト」を参考にしてください。ただしテキストはLinux用です。他のOSもほぼ同様に作成できますが、適宜相違点を読み替えてください。
バイナリ書き込み方法
Wio Terminal に書き込むバイナリの形式は uf2 形式です。
Rust でビルドしたバイナリは、以下のようにして uf2 形式に変換してください。
自分のローカルPCでバイナリを作成する場合は、uf2 形式に変換してから scp でハンズオンサーバにコピーします。
$ cargo objcopy --example blinky --release -- -O binary blinky.bin
Finished release [optimized] target(s) in 0.15s
$ uf2conv blinky.bin --base 0x4000 --output blinky.uf2
できたuf2ファイルを書き込みます
Wio Terminal をブートローダーモードにしていると、Wio Terminal が外部USBメモリとして見えるのでそこにファイルを転送します。
例として、「カメラ公開の例」で示した2台の Wio Terminal だと左側が /dev/sdb, 右側が /dev/sdc ですが起動順番で変わります。
どこにマウントされているかは mount コマンドで確認してください。
/media/nanbuwks/Arduino にマウントされていた場合は以下のようにして書き込みます。
$ cp blinky.uf2 /media/nanbuwks/Arduino/
ブートローダーモードになっていない場合は主催者にリクエストしてブートローダーモードに変更してもらってください。
書き込みが終わると自動でプログラムが実行されます。
青いLEDが点滅することがカメラ経由で確認できたら成功です。