Raspberry Pi Pico W の LED を VS Code を使って、点滅させてみた。（RP-Pico チュートリアル）

今回は Raspberry Pi Pico W を使って、本体の LED を点滅させるところまでやってみました。
チュートリアル的な内容となります。

# 環境

今回の環境は下記のとおりです。

## 開発端末

- **OS**： Windows 11 Pro
- **CPU**： Intel Core i7-9750H
- **メモリ**： 64GB
- **GPU**： NVIDIA GeForce RTX 2070 Max-Q

## Python 環境

- **Python**： 3.11.0

## Raspberry Pi

- **Raspberry Pi**： Raspberry Pi Pico W
- **拡張ボード**： Pimoroni Pico Explorer Base（※任意）（[スイッチサイエンス](https://www.switch-science.com/products/7373)）

# 事前準備

まずは Raspberry Pi Pico を動作させるための環境を用意します。

## PySerial のインストール

Python でシリアル通信を行うためのライブラリをインストールします。

```powershell
pip install pyserial
```

## VS Code の拡張機能のインストール

VS Code に Raspberry Pi Pico 用の拡張機能をインストールします。

### MicroPico のインストール

VS Code の拡張機能である MicroPico をインストールします。

:::note info
**MicroPico について**
MicroPico は Pico-Go からフォークされた拡張機能です。
Pico-Go は既にメンテナンスがされなくなり、 VS Code Marketplace からも削除されています。
元々は Pico-W-Go という名前でしたが MicroPico にリネームされました。
:::

VS Code の `拡張機能` をクリックし、 `micropico` と入力して検索します。
`インストール` をクリックして、拡張機能をインストールします。
![pico_vscode_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212972/d990476a-06c9-9d4a-ddd7-1d859fda5120.png)

### MicroPico の初期設定

VS Code の `表示(V)` → `コマンドパレット` をクリックします。
![pico_vscode_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212972/70e172a3-c69b-26ea-60de-59071d4e4a0f.png)

`>MicroPico: Configure project` と入力して `Enter キー` を押下します。
![pico_vscode_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212972/a2287e5a-db42-41c9-7d63-98c9d6fcc302.png)

## Raspberry Pi Pico の準備

Raspberry Pi Pico にファームウェアを書き込んで Python (MicroPython) を動かせるようにします。

### ファームウェアのダウンロード

Raspberry Pi 財団のサイトからファームウェアをダウンロードします。
利用する Raspberry Pi Pico にあわせてファームウェアを選んでください。

https://www.raspberrypi.com/documentation/microcontrollers/micropython.html#drag-and-drop-micropython

![pico_firmware_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212972/69e63ac7-619e-6d20-602c-5f84e3aed0d3.png)

### ファームウェアの書き込み

Raspberry Pi Pico の `BOOTSET` ボタンを押しながら、 USB ケーブルで PC に接続します。
![pico_firmware_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212972/24ec021e-ca9f-8f46-2366-e4f313be79dd.png)

ダウンロードしたファームウェアを `RPI-RP2` にドロップします。
![pico_firmware_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212972/f855b275-ceed-7123-624b-e09c289d52cb.png)

ファームウェアの転送が完了すると、 Raspberry Pi Pico が自動的に再起動します。
以上で、ファームウェアの書き込みは完了です。

以降は USB シリアル通信経由で REPL にアクセスできます。

:::note info
**ファームウェアについて**
今回は Python を利用するため MicroPython のインタプリタが含まれるファームウェアを書き込みました。

ファームウェアが提供されている場合は、他の言語で記述することもできます。

- JavaScript： [Kaluma](https://kalumajs.org/)
- Ruby： [PicoRuby](https://github.com/picoruby/picoruby)

なお、 MicroPython は実行の都度、ソースコードから機械語に変換しながら実行するため、オーバーヘッドが大きくなります。
超音波距離センサーなどの一部のパーツは、このオーバーヘッドの影響を受け、誤差が生じるため注意が必要です。

オーバーヘッドを抑えるには、事前に機械語にコンパイルする必要があります。
C言語などで記述を行い、 `UF2` ファイルにビルドします。
ビルドされた `UF2` ファイルは、ファームウェアの書き込みと同様の手順で Raspberry Pi Pico に書き込みができます。
当然ですが、ビルドされた `UF2` ファイルを利用する場合は、 Raspberry Pi Pico 用のファームウェアが不要になります。
:::

# Python コードの作成

サンプルコードを作成して、 Raspberry Pi Pico を動かしてみます。

## サンプルコード

今回は下記のサンプルコードを使い、 Raspberry Pi Pico の LED を点滅させます。
ファイル名は `main.py` にしてください。

```main.py
from machine import Pin
import time

led = Pin('LED', Pin.OUT)

while True:
    led.on()
    time.sleep(1)
    led.off()
    time.sleep(1)
```

## Python コードの実行

Raspberry Pi Pico を USB ケーブルで PC に接続します。（※ `BOOTSET` ボタンは押しません）

VS Code のステータスバーの `Toggle board connection` ボタンが `Pico Connected` になっていることを確認します。
`Pico Disconnected` になっている場合はクリックして Raspberry Pi Pico に接続します。
![pico_led_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212972/c0356161-871d-04b5-fe47-638e09187982.png)

VS Code のステータスバーの `Run current file` ボタンをクリックして、実行します。
ボタンの表記が `Run` から `Stop` に変わります。
![pico_led_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212972/2e8c60b1-1faa-d55f-9377-b2c67b4ee52a.png)

Raspberry Pi Pico 本体の LED が点滅することを確認します。
![pico_led_03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212972/1abd8bfd-14a7-dfa9-20ca-e3830bd00a8b.jpeg)

## Python コードの書き込み

VS Code の `表示(V)` をクリックします。
![pico_upload_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212972/dfa52c91-5fcd-6ee4-3a6f-0f9a4d1b68ae.png)

`コマンドパレット` をクリックします。
![pico_upload_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212972/67327d8e-5dc1-db6b-d70b-ba78ca4b594f.png)

`>MicroPico: Upload current file to Pico` と入力して、 `Enter キー` を押下します。
![pico_upload_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212972/2a0a1a6f-5100-02b7-eb1b-cf5d675a1ca2.png)

## Python コードの実行（スタンドアローン）

Raspberry Pi Pico の USB ケーブルを PC から外し、 USB 充電器やモバイルバッテリーなどに接続します。
LED が点滅すれば OK です。

# 参考文献

下記の書籍とサイトを参考にさせて頂きました。

- 福田 和宏 . 最新Pico W対応! ラズパイPico完全ガイド . 株式会社日経BP , 2023

https://github.com/paulober/MicroPico

https://qiita.com/nr_ck/items/c9e99689fd5b3eb79506

<!-- EOF -->