Raspberry Pi Pico × Rust(no_std) を Wokwi で動かす！！！

🎄IPFactory Advent Calendar2024_22日目🎄

https://qiita.com/advent-calendar/2024/ipfactory

# はじめに
この記事では、*Raspberry Pi Pico* と *Rust(no_std)* で開発し、*Wokwi* で動かす方法を紹介します！

「手元にハードウェアがないけど試したい！」なんて時に Wokwi はめちゃくちゃ便利なので、備忘録としてまとめてみました。

# そもそも、なぜこの記事を？
今年、某キャンプの探査機自作ゼミで Raspberry Pi Pico × Rust(no_std) の組み込み開発をやっていました。

その際先生に、シミュレーターとして Wokwi をおすすめされ、以前から存在を知ってはいたけど、改めて結構便利に感じたのでその時の環境構築を記事にしてみました！

# 環境
- **PC**：Win10
- **VSCode**
- **Wokwi** 
- **Rust**

> **Rust のセットアップ**  
> Rust の環境構築には rustup を使うのが一番簡単です！
> 詳しくは [公式ドキュメント](https://www.rust-lang.org/tools/install) をご確認ください。


# 1. `pico-wokwi-playground` をclone

便利なリポジトリはこちら

https://github.com/sksat/pico-wokwi-playground

とりあえず`clone`して`hello-blinky-rs`に移動しておきましょう！

```bash
git clone https://github.com/sksat/pico-wokwi-playground.git

cd pico-wokwi-playground/hello-blinky-rs
```

# 2. `Wokwi Simulator` のインストール

`Wokwi Simulator`を検索してインストール
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680925/10a54677-4b52-b4d6-968d-0605412f70f6.png)

こんなのが出てきたらDebuggerもインストール
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680925/3c2bfae5-40a4-87b1-fbc9-436abe58bc27.png)

# 3. 必要ツールをインストール
以下のコマンドを叩いて、必要なツールをインストールしていきます

```bash
cargo install probe-rs-tools
cargo install flip-link
cargo install elf2uf2-rs
rustup target add thumbv6m-none-eabi
```

また、`Cmake`が入ってなければインストールします。
(無いとbuildできない...)

ここらへんでDLとインストール
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680925/e5ddec70-c8eb-608c-f987-87075b47d751.png)

# 4. とりあえずbuildしてみる

あらかじめ`Ctrl+Shift+B`でbuildできるように設定されてる

正常にbuildできたらこんな感じのが出力されるはず
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680925/63621888-911a-962d-0825-0de176bed3f4.png)

# 5. Wokwi Simulator で動きを見てみる
``Ctrl+Shift+P``でコマンドパレットを開いて、``Wokwi: Start Simulator``を選択

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680925/d030101f-9b27-c171-3e1e-7c680787722d.png)

すると、``Wokwi Simulator``が起動する！
...と思いきや、なんか出てきて起動しない～(初回のみ)

![image-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680925/d1546a1a-3cfd-e1e9-2231-9351dd453f46.png)

# 6. ライセンスの登録
とゆーことで、ライセンスを適応させます。

適当なアカウントで Wokwi に登録して
![image-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680925/288fee7c-d68c-5e52-c4c0-fc4d80712493.png)


ライセンスを VSCode にぶち込みます
![image-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680925/804327c1-3af7-1908-56a0-e93895c377a1.png)

# 7. 再度、Wokwi Simulator で動きを見てみる
`Wokwi: Start Simulator`を選択してシミュレーターを起動すると...

![image-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680925/ca91541d-b70e-df9d-fac9-05d36e00059b.png)

*Hello, world!*

# EX1. ここからどう進める？

プログラムに関しては `main.rs` を編集すればよいが、回路に関しては、`diagram.json`をWokwiにインポートして編集する必要がある。(jsonを無理やり手書きしても良いが結構面倒)

おそらく、wokwiの公式サイトで各パーツの説明を見ながら作成してエクスポートした方が絶対に楽

# Ex2. ちょっとした例
例えばこんな感じにもできる

#### 各色の押されたボンタンの色を、LEDに混ぜて光らせる
![image-7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680925/27e7719b-7ba6-1d92-df92-3763f532a27c.png)

#### 温度とか湿度を取得してみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680925/c9b99293-7205-c6ad-cc4c-18220c1f112c.png)