組込みRust爆速入門―Raspberry Pi Picoで電子工作

Rust
Sponsored

Rustでの組込み開発を爆速で始められるよう、便利なテンプレートを用いてLチカを実行する方法について解説します。

この記事を読むことで、約10分でRaspberry Pi Picoを動かし参考文献を見ながら思い通りの電子工作ができるようになります

想定環境

以下はWindows 11 Homeでの実行を想定していますが、MacやLinuxでもほぼ同様の手順で爆速入門できます。

そのため、(コマンドプロンプトなどの)用語を使用環境に合わせて読み替えてください。

前提知識

git cloneが使える程度のGitの知識が必要です。

Raspberry Pi Picoの準備

Raspberry Pi Picoは、秋月電子通商などで700円程度で購入できます。

本記事の内容を実行するためには、以下のものを入手してください。

品名個数
Raspberry Pi Pico1
USBケーブル(micro B端子)1

Rustの環境構築

Rustのインストール

まずはRustがなくては話が始まりません

以下の公式サイト等を参考に、Rustをインストールしてください。

Rust をインストール
効率的で信頼性のあるソフトウェアを書く力を与える言語

Rustのアップデートとターゲットの追加

既知のバグを避けるため、Rustを最新の状態にします

また、Raspberry Pi Picoでの開発を可能にするために、開発ターゲットとしてthumbv6m-none-eabiを追加します。

コマンドプロンプトを開き、以下のコマンドを実行してください。

C:\hogehoge>rustup self update
C:\hogehoge>rustup update stable
C:\hogehoge>rustup target add thumbv6m-none-eabi

ビルドツールのインストール

Rustで記述したプログラムを、Raspberry Pi Picoに書き込めるUF2という形式に変換するためのツールとして、elf2uf2-rsをインストールします。

コマンドプロンプトを開き、以下のコマンドを実行してください。

C:\hogehoge>cargo install elf2uf2-rs –-locked

このコマンドの実行に失敗した場合は、

Rustのバージョンを変更する方法
概要 現在利用されているRustのバージョンを調べ、異なるバージョンのRustをインストールして利用する方法について解説する。 この記事を読むことで、チームメイトや技術書の著者とRustのバージョンを合わせたり、ツールが正常に動作するように...

を参考に、elf2uf2-rsが正常にインストールできるまで、Rustのバージョンを落としてください。

Lチカの実行

開発テンプレートをダウンロード

組込み開発のためには設定や用意するべきクレートが多く、この作業を行うのは結構大変です。

そこで、艮電算術研究所では、rp_pico_templateという、開発用のテンプレートを用意しました。

以下のURLからgit cloneコマンド等の方法でダウンロードしてください。

GitHub - doraneko94/rp_pico_template: Template for developing Raspberry Pi Pico in Rust.
Template for developing Raspberry Pi Pico in Rust. - doraneko94/rp_pico_template

このディレクトリのプロジェクト名を書き換えることで、新しいプロジェクト開発をすぐにはじめることができます。

ここでは、以下の2ステップでプロジェクト名をrp_introに変更しましょう。

  1. ディレクトリの名前をrp_pico_templateからrp_introに変更する
  2. Cargo.tomlを開き、[package]nameの値をrp_introに書き換える
[package]
name = "rp_intro" # <- もともと、”rp_pico_template”になっている
version = "0.1.0"
…

Lチカを実行する

新しいプログラミング言語に触れたとき、大抵はHello, world!を出力するコードを書くことからはじめます。

組込み開発の場合は、LEDをチカチカ点滅させる、通称「Lチカ」という作業からスタートするのが王道です。

Raspberry Pi Picoのボードには内蔵LEDが搭載されているので、回路を組む必要すらありません。

そして、rp_pico_templatesrcディレクトリにはすでにled.rsというファイルが含まれており、これでLチカができるようになっています。

以下の手順にしたがって操作してください。

  1. コマンドプロンプトで、プロジェクトフォルダ(rp_intro)に移動
  2. BOOTSELボタン(下図参照)を押しながら、Raspberry Pi PicoをPCのUSBポートに接続(Raspberry Pi Picoが認識されたことを確認してください)
    3. コマンドプロンプトで、cargo run --release --bin ledを実行

C:\hogehoge>cd rp_intro
C:\hogehoge\rp_bno055>cargo run --release --bin led
Compiling …
…
Compiling …
    Finished release [optimized] target(s) in 25.27s
     Running `elf2uf2-rs -d -s target\thumbv6m-none-eabi\release\led`
Found pico uf2 disk G:\
Transfering program to pico
9.00 KB / 9.00 KB [=========================] 100.00 % 1.86 MB/s

正常に実行されると、上記のようなメッセージが表示され、Raspberry Pi Pico上のLEDが約1秒周期で点滅します。

よくある失敗例としては、手順2のBOOTSELボタンを正しく押せていないケースが考えられます。

このボタンを押しながら差すこと(差してから押すのはダメ)で、Raspberry Pi Picoにそれまで書き込まれていたプログラムが消去され、書き込みモードとして使用することが可能になります

ここで失敗してRaspberry Pi Picoが正常に認識されていない場合には、以下のようなエラーメッセージが出力されているはずです。

C:\hogehoge\rp_intro>cargo run --release --bin led
Compiling …
…
Compiling …
    Finished release [optimized] target(s) in 25.27s
     Running `elf2uf2-rs -d -s target\thumbv6m-none-eabi\release\led`
Error: “Unable to find mounted pico”
error: process didn’t exit successfully: `elf2uf2-rs -d -s target\thumbv6m-none-eabi\release\led` (exit code: 1)

なお、BOOTSELボタンを押さずにRaspberry Pi PicoをPCに接続した場合や、VSYSピンから電源を供給した場合は、それ以前にRaspberry Pi Picoに書き込まれていた最新のプログラムが実行されます

参考文献

以上の「爆速入門」は、電子書籍「Rust x Raspberry Pi Picoで実装する IMUからの姿勢情報の取得と応用」の第0~1章の内容を引用しています。

本書ではled.rsのコード内容を解説したあと、

  • シリアル通信でPCに情報を表示する
  • I2Cでセンサを読み込む
  • Raspberry Pi Picoのフラッシュ領域に情報を保存する

という機能を実装して、IMU慣性計測装置)からデバイスの姿勢情報(傾き・回転)を取得する方法を説明します。

この技術は、ドローンロボットが自身の姿勢を把握し、倒れないように制御する際に必須の知識です。

また、艮電算術研究所では、RustでRaspberry Pi Picoの様々な機能を使用するための実装例集を公開しています。

組込みRust実装例集―Raspberry Pi Picoで電子工作
概要 この記事は、Raspberry Pi PicoにRust言語を使って組込みを行う際のTips集です。 各電子パーツを使って実現したいことから、対応するコードの記法を探せるようになっています。 適宜追加するので、ちょくちょく見に来てもら...

こちらを参考にled.rsを改良して、ぜひ自分の作りたいものを作ってみてください!

Comments