RustにいればRustに従え(15) Rustによる ラズパイ Picoで吉例Lチカ

Joseph Halfmoon

忘却力の年寄はRustに慣れないので過去回ではズルズルとLinux上で練習。しかしマイコン用のプログラムをRustで書くことが目標です。PC上での練習を切り上げてマイコン用のクロス開発へ突入。今回はターゲットRaspberry Pi Picoのクロス開発環境をWindows11上に構築、吉例Lチカまでやってみます。

※『RustにいればRustに従え』関係記事 index はこちら

※ビルドはWindows11機上の cargo / rustc 1.70.0 環境でおこなっています。

※ターゲット機は、冒頭のアイキャッチ画像に示したRP2040マイコン搭載Raspberry Pi Pico機です。

Windows環境上でのRustのクロス環境構築

いままでRustの練習は、WSL2上にインストールしたUbuntu20.04LTS上のrustc 1.64.0 で行っていました。Raspberry Pi Picoをターゲットにするにあたり、直接ハードウエアが見えた方が具合が良いと考え、Windows11上にRustの開発環境を載せることにいたしました。手順は以下のとおりです。

    • Windows11上でRustを使えるようにする

以下の御本家ホームページよりインストーラをダウンロードして、まずWindows11環境でフツーにRustできるようにインストールを行います。

https://www.rust-lang.org/learn/get-started

上記のページはWindowsからアクセスすればWindows機と自動判別してWindows用のインストーラをレコメンドしてくれるのに言われた通りの

RUSTUP-INIT.EXE

をダウンロードしてインストールしました。いわゆるWindowsのインストーラ風ではなくコマンドプロンプトが開いて キーを押したりしないとならない愛嬌のないインストーラですが特に問題なくインストール完了。とりあえずフツーにRustできることをHello Worldなどやって確かめました。

    • Raspberry Pi用のHALをgithubからClone

以下のgithubページにRaspberry Pi用のHALやらなにやらが一式準備していただいております。また、必要なツールのインストール方法についてもREADME.mdに書いてあります。

https://github.com/rp-rs/rp-hal/

まず上記のページのREAME.md読んで git cloneから

$ git clone https://github.com/rp-rs/rp-hal.git

git cloneしている様子が以下に
git_clone_rp_hal

 

とりあえずPico Probeを使わず、PicoをUSB接続すると現れるStorageにUF2ファイルを書き込む方法でよければ、以下のクロスツールとelf形式をuf2形式に変換するプログラムくらいがあればLチカ出来る感じです。すべてrustの内輪のコマンドrustupとcargoで完結しておりますな。

$ rustup self update
$ rustup update stable
$ rustup target add thumbv6m-none-eabi
$ cargo install elf2uf2-rs --locked

elf2uf2-rsをインストールしている様子の冒頭のところが以下にcargo_install_elf2uf2-rs

全部Rustの自前だと。

インストール後、ものは試しで elf2uf2-rs を起動してみた様子が以下に。help_elf2uf2-rs

当初、ビルド後、このツールを動かしてELFをUF2に手動変換するのかと思ったのですが、そんなことはありません。ツールさえあれば、Cargoが自分で判断して、ファイル形式の変換からFlash Storageへの書き込みまでみな自動でやってくれます。Cargoは何でも知っているのね。。。

Windows上でRaspberry Pi Pico用のサンプルをビルド

git cloneしたHALの中にはExampleも存在しています。ドキュメントをみるとPWM使ったblinkがあり。これをビルドして書き込めれば目標のLチカは動いたということになるでしょう。自前じゃないけど。

$ cargo run --release --example pwm_blink

上記1行にて、cargoがよきに計らってくれ、必要な者どもをそろえてビルドし、出来たオブジェクトをUF2変換してPicoのストレージに書き込むことまでやってくれます。至れり尽くせりじゃのう

RaspberryPiPicoBlinkEC

オンボードのLEDが点滅しております。吉例Lチカ、OKだね。Rustのコード、まったく見てないけど。

RustにいればRustに従え(14) 最初からVec型にしておけばよかったです。 へ戻る

RustにいればRustに従え(16) rp2040-project-template へ進む