はじめに
Raspberry Pi Pico W(以降ラスピコW)のオンボードLEDを動かすには少し手間がかかります。
私がLチカしようとしたときに少しつまるところはあったので、動くものとしてここに供養しておきます。
私は未だ入門者なので、どんどん改変して使っていただけたらと思います。
Lチカに詰まったポイント
-
- オンボードのLEDに繋がるピンWL-GPIO0は無線チップに繋がっている。
-
- データシートはこちら
無線チップの制御にembassyという開発中のドライバを導入する必要がある。
開発中という理由のためかクレートがcrates.ioにないので、ドライバの導入は手動で行う必要がある。(2023/7/15現在)
実行環境
Windows 10
VS Code
Lチカまでの手順
Rustのインストール
Rustは公式サイトからインストールしてください。
クロスコンバイラをインストール
$ rustup target install thumbv6m-none-eabi
ユーティリティをインストール
$ cargo install elf2uf2-rs flip-link probe-run
今回probeによるデバッグ環境がないのでelf2uf2-rsをランナーとして使用します。
プロジェクトの作成
プロジェクトを新しく作成します。
プロジェクト名sample-projectのところは自由に決めてください。
$ cargo new sample-project --bin
–binオプションを渡すことで、ライブラリではなく実行可能なバイナリが作成されます。
ライブラリの導入
lib/ 配下にembassyライブラリをダウンロードすることとします。
$ mkdir lib
$ cd lib
$ git clone https://github.com/embassy-rs/embassy.git
$ cd ..
ダウンロードが終了すると lib/embassy/examples/rp/ にラズピコ用のサンプルコードが表れます。
今回はここにあるものを拝借していきます。
なんか必要そうなファイルをとってくる
lib/embassy/examples/rp/から自分のプロジェクトのディレクトリに必要そうなファイルをコピーします。
どれが何に必要なのか理解していませんが、コピーすれば動くのでよし。
以下のファイル(フォルダ)をプロジェクトのルートディレクトリにコピーしてください。
上4つはlib/embassy/examples/rp/に最後はlib/embassy/にあります。
-
- .cargo/
-
- assets/
-
- build.rs
-
- memory.x
- rust-toolchain.toml
Windowsの方は以下をどうぞ。
$ xcopy ".\lib\embassy\examples\rp\.cargo\" ".\.cargo\" /E /I /H
$ xcopy ".\lib\embassy\examples\rp\assets\" ".\assets\" /E /I /H
$ copy ".\lib\embassy\examples\rp\build.rs" ".\build.rs"
$ copy ".\lib\embassy\examples\rp\memory.x" ".\memory.x"
$ copy ".\lib\embassy\rust-toolchain.toml" ".\rust-toolchain.toml"
Cargo.toml の書き換え
lib/embassy/examples/rp/Cargo.tomlの8行目に[dependencies]とあります。
それ以降を全選択し、自分のプロジェクトのCargo.tomlにペーストしてください。
このままではパスの指定が間違っているのでうまくライブラリを読み込めません。
9行目embassy-embedded-halから24行目cyw43-pioまでのpathを以下のように修正します。
embassy-embedded-hal = { version = "0.1.0", path = "../../embassy-embedded-hal", features = ["defmt"] }
↓
embassy-embedded-hal = { version = "0.1.0", path = "lib/embassy/embassy-embedded-hal", features = ["defmt"] }
これは、9行目から24行目の全てのパスに対して行ってください。
VS Codeをお使いの場合はCtrl + Dを使うと楽です。
Config.toml の書き換え
書き込みに使うrunnerを書き換えます。
runner = "probe-rs run --chip RP2040"
↓
runner = "elf2uf2-rs -d"
probeを使わない場合に下のランナーを使用してください。
(使うとしても上のやつprube-runではないのかな…?)
デモコードのビルド&書きこみ
サンプルコードのwifi_blinkyをコピーします。
examplesに習ってsrc/bin/配下にコードを配置します。
$ cd src
$ mkdir bin
$ copy "..\lib\embassy\examples\rp\src\bin\wifi_blinky.rs" ".\bin\"
wifi_blinkyは、無線チップからLEDの制御を行うプログラム。
コード解説などは出来ません。
コード内にもパスを指定している箇所があるので変更して書き換えてください。
30| let fw = include_bytes!("../../../../cyw43-firmware/43439A0.bin");
31| let clm = include_bytes!("../../../../cyw43-firmware/43439A0_clm.bin");
↓
30| let fw = include_bytes!("../../lib/embassy/cyw43-firmware/43439A0.bin");
31| let clm = include_bytes!("../../lib/embassy/cyw43-firmware/43439A0_clm.bin");
いざ、、書き込み
ラズピコのUSBケーブルを指すときは、本体についている白いボタンを押しながら指してください。RPI-PP2のようなフォルダがエクスプローラーで開かれるはずです。
次のコマンドでビルドと書き込みが行われます。
$ cargo run --bin wifi_blinky
通った人もそうでない人もお疲れさまでした。おやすみなさい。
参考文献
Raspberry Pi PicoとRustで組み込みプログラム環境を整える – GitHub 出張所
Raspberry Pi Pico WでのRustについて – tana
embassy公式
Rust公式インストールサイト
Raspberry Pi Pico W データシート