PR

基礎から始める組込みRust開発【Lチカのための環境構築】

Rust便利帳
Sponsored

この記事は、「Rust×Raspberry Pi Picoで本気の組み込み開発」の第0~1章の内容を公開したものです(記事中に書籍へのPRリンクを含みます)。

予算800円・所要時間10分で、組込みRustの開発を爆速で始める方法を基礎から解説します。

簡単な環境構築のあとは、便利なテンプレートを用いてLチカを実行することができます。

組込みRustに必要なもの

組込み開発に使用するOS環境

Rustをインストールできる環境であれば、組込み開発をおこなうことができます。

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

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

記事を理解するために必要な前提知識

テンプレートを使って開発をおこなうため、Rust言語に関する知識は必要ありません。

ただし、Githubからテンプレートをダウンロードするために、git cloneコマンドが使える程度のGitの知識が必要です。

組込み開発のためのマイコンの準備

Rustで組込み開発をするためのマイコンとして、ここではRaspberry Pi Picoを使用します。

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

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

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

これらを合わせて、約800円で組込み開発をはじめることができます。

組込み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

ビルドツール(elf2uf2-rs)をインストール

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

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

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

このコマンドの実行に失敗した場合は、Rustのバージョンを変更する方法参考に、elf2uf2-rsが正常にインストールできるまで、Rustのバージョンを落としてください。

Raspberry Pi PicoをRustで制御する

組込みRustの開発テンプレートをダウンロード

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

そこで、U-知能デバイス研究所では、rp_pico_templateという、開発用のテンプレートを用意しました。

Githubリポジトリからgit cloneコマンド等の方法でダウンロードしてください。

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

ここでは、以下の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"
…

Raspberry Pi Picoで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を実行

図1 内蔵LEDとBOOTSELボタンの配置

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ボタンを正しく押せていないケースが考えられます。

図1 内蔵LEDと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に書き込まれていた最新のプログラムが実行されます

【PR】Rust×Raspberry Pi Picoで本気の組み込み開発

以上の「爆速入門」は、当研究所がインプレス NextPublishingから出版した書籍「Rust×Raspberry Pi Picoで本気の組み込み開発 IMUで姿勢情報を取得しよう!」の第0~1章の内容を引用しています。

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

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

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

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

また、U-知能デバイス研究所では、RustでRaspberry Pi Picoの様々な機能を使用するための実装例集を公開しています。

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

もっと知りたいこと、感想を教えてください!