Raspberry Pi Pico W ＋ ビジュアルプログラミングでの Lチカで軽くハマった話：「BIPES」を使った開発

## はじめに
この記事は、ESP32系のデバイスやラズパイ系のデバイスを、ビジュアルプログラミングで扱える「[BIPES](https://bipes.net.br/wp/)」に関する記事です。
今回のトピックは、その BIPES と「Raspberry Pi Pico W」を組み合わせて試した時の話の 1つで、具体的には「Lチカを試した時に個人的に軽くハマった話」を記事にしています。

また記事の中で、BIPES で Raspberry Pi Pico W　を扱うための手順も、簡単に紹介しています

## BIPES について
BIPESは、[公式の GitHubリポジトリ](https://github.com/BIPES/BIPES)の説明文にも書かれているとおり、「ブロックベースのビジュアルプログラミングも可能な、複数のマイコンボードなどの開発に対応したプラットフォーム」です。
　![公式の GitHubリポジトリ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/2c4adab1-1dc4-c9c6-ac19-672ced7984c6.png)

ビジュアルプログラミング環境は、以下の URL にブラウザでアクセスすることで利用できます。

　https://bipes.net.br/ide/

また、ビジュアルプログラミング環境のデバイス選択メニューを開くと、どのようなデバイスに対応しているかを確認できます。記事執筆時点では、以下の画像のとおりです。
![対応デバイス](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/6c122270-cd9b-015c-9f56-f20c9f897672.png)

## 今回の記事の内容
今回の話は、冒頭にも書いたとおり「Raspberry Pi Pico W」と BIPES によるビジュアルプログラミングを組み合わせて試した内容に関するものです。そして、そのお試しの中で、自分が軽くハマった話を書いていきます。

### ハマった話の概要と原因
冒頭で、「Lチカを試した時に軽くハマった」と書いていました。具体的には、BIPES によるブロックプログラミングで、とりあえずのお試しで作った Lチカのプログラムを動かしても、LED が光らなかった、といった内容です。

その原因は、プログラムの LED のピン指定で、以下の「Raspberry Pi Pico」用のサンプルを参照して作っていたことでした。

●Block based programming on Raspberry Pi Pico with BIPES | Yet Another Technology Blog
　https://rafaelaroca.wordpress.com/2021/03/03/block-based-programming-on-raspberry-pi-pico-with-bipes/

なぜそれで LED が光らないかというと、「Raspberry Pi Pico」と「Raspberry Pi Pico W」とで、オンボードの LED のピンが変わっているためです。
自分はその違いを、把握できていませんでした...

#### 「Raspberry Pi Pico」と「Raspberry Pi Pico W」のオンボードの LED に関する違い
「Raspberry Pi Pico」と「Raspberry Pi Pico W」の、オンボードの LED のピンが変わっていた話について、さらに少し書きます。

以下に、Raspberry Pi Pico と Raspberry Pi Pico W のピン配置の画像が掲載されています。

●Raspberry Pi Documentation - Raspberry Pi Pico and Pico W
　https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html

その中の、オンボードの LED に関する部分をピックアップしてのせてみます。

![Raspberry Pi Pico のピン配置](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/46944006-2c9b-6b48-036a-78e5dd84a130.png)
![Raspberry Pi Pico W のピン配置](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/1fcfcfa0-e6b3-0c04-a4e4-559aa2538f42.png)

画像 1つ目が「Raspberry Pi Pico」、2つ目が「Raspberry Pi Pico W」で、それぞれの該当箇所の記載が「LED(GP25)」・「LED(WL_GPIO0)」と、異なっていることが分かります。

また、[「Raspberry Pi Pico Python SDK」というドキュメント](https://datasheets.raspberrypi.com/pico/raspberry-pi-pico-python-sdk.pdf)の中の「2.5. Blink an LED」という部分に、以下の記載もありました（Raspberry Pi Pico W の GPIO25 は、無線チップ用に使われているっぽい）。
![2.5. Blink an LED](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/d116097c-7b15-bbfa-4bba-2e04891cb2a3.png)

また、プログラム的な差分を考慮した対応としては、「Raspberry Pi Pico だとピン番号の 25 を指定する部分」で、「Raspberry Pi Pico W の場合は LED という文字列を指定」とすれば良さそうでした。

## Raspberry Pi Pico W での Lチカ
それでは、Raspberry Pi Pico W の LED を光らせられた手順について書いていきます。

その前に、そもそも Raspberry Pi Pico W を BIPES で使うために必要な下準備についても、少し説明を書いておきます。

### Raspberry Pi Pico W を BIPES で使う下準備
#### デバイスへの uf2ファイルの書き込み
Raspberry Pi Pico W を BIPES で使う下準備として、以下のページなどで提供されている uf2ファイルを Raspberry Pi Pico W に書きこむ必要があります。

●MicroPython - Python for microcontrollers
　https://micropython.org/download/rp2-pico-w/

uf2ファイルをダウンロードした後、以下の手順で Raspberry Pi Pico W への書き込みを行ってください。

1. Raspberry Pi Pico W上の BOOTSELボタンを押しながら、Raspberry Pi Pico W と PC を USBケーブルでつなぐ
1. Raspberry Pi Pico W が PC に「RPI-RP2」という名前のストレージとして認識された状態になるので、そこにダウンロードしておいた uf2ファイルをコピーする

これで 1つ目の準備は完了です。

#### BIPES上でデバイスとの接続を行う
次に、BIPES上で作成したプログラムをデバイスに書きこめるよう、BIPES上でのデバイス接続操作を行います。具体的には、以下のとおりです。

1. [BIPES のブロックプログラミング用のページ](https://bipes.net.br/ide/)を開く
1. uf2ファイルの書き込みを終えた Raspberry Pi Pico W を、PC につないだ状態にしておく
1. BIPES の右上にあるメニューのデバイス名が表示されている部分（※ 以下の画像の、赤矢印で示した部分）で、Raspberry Pi Pico W を選ぶ
1. BIPES の右上にあるプラグのようなアイコン（※ 以下の画像の、緑矢印で示した部分）を押し、その後に出る「シリアルポートの接続要求を求めるウィンドウ」で、所定のシリアルポートを選択して、「接続」ボタンを押す

![補足用の画像](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/a1a2a6fc-0f51-b100-1c98-382b0e7a7233.png)

これで、BIPES上で作ったプログラムを Raspberry Pi Pico W で動かすための下準備が整いました。

なお、プログラムを実行する場合は、以下の画像の赤矢印で示した、再生ボタンを押します。
![プログラム実行ボタン](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/feb9dd80-8f5f-9c29-9969-20f34290b2cd.png)

### Lチカのプログラム
ここで、プログラムの詳細説明を書く前に、まずは「Raspberry Pi Pico W用の Lチカのプログラム例」を示します。
![Raspberry Pi Pico W での　Lチカ用のプログラム](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/338291ec-fd64-a3e6-9962-53e4d1bfa6d8.png)

ポイントは、ピン指定で変数を使い、その変数に「LED」という文字列を指定したことです。

### プログラムに関する補足
「Raspberry Pi Pico」での Lチカの場合は、以下の「LED / GPIO25」というブロック（内容的には、25 という数字のブロックとなる）を指定するところを、変数で指定するようにしています。
![GPIO25 が指定されている状態](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/9c847024-72f4-cae6-5755-e05913b54921.png)
当初は、直接「LED」という文字列を指定したテキスト用ブロックをはめこもうとしたのですが、それはできませんでした。それで、「数字も文字列も両方とも格納できる "変数ブロック" なら、くっつけられるかな」と思い、試してみたらできたという流れでした。

上記の流れの中では、テキストのプログラムで実装する場合のプログラム例を見つつ、BIPES では Consoleタブで表示されるテキストに変換されたプログラムの内容（※ 以下の画像を参照）を見つつ、試行錯誤して、変数ブロックを使う形にたどり着きました。
![Consoleタブでの表示例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/866be802-4531-296c-eeb1-62af890694da.png)

#### Consoleタブでテキストのプログラムを直接入力する
上記の内容を進める途中で、ブロックでの Lチカを成功させる前に、Consoleタブを使った Lチカでの動作確認を行っていたので、その話も少しメモとして書いておきます。

これを試す場合は、ブロックのプログラムは特に何も準備せず、Raspberry Pi Pico W への接続を行います。そして、コンソールで「>>>」と表示されているところに、プログラムを直接書いていきます。
![コンソールの画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/558c40b4-7c74-d180-25e7-f759ca0fc9a0.png)

自分の場合は、例えば LED を点灯させるための処理で、以下のぞれぞれを入力して試しました。

```python: LED を点灯させる
machine.Pin("LED", machine.Pin.OUT).on()
```

```python: LED を消す
machine.Pin("LED", machine.Pin.OUT).off()
```

#### 他に試していたこと
今回の最終版のプログラムにたどり着く前、Python を実行するブロックを使ったお試しもやっていました。ちなみに、以下のようなプログラムです。
![Pythonを実行するブロックを利用](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/1022f858-c573-d8ee-53df-18400e80effc.png)

## おわりに
今回の記事では、Raspberry Pi Pico W ＋ BIPES の組み合わせで、Lチカをサクッと試そうとしたら軽くハマった話を書きました。

それと、これを試したのと合わせて、Raspberry Pi Pico W ＋ BIPES の組み合わせで HTTPリクエストを使うというのも試していました。そちらも、簡単な内容は成功させられたので、別途、記事に書いてみようかと思っています。
※ 以下は、GETリクエストで取得した情報を、コンソールに表示させることができた時の様子です
![GETリクエストで取得した情報をコンソールに表示させたもの](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/d453225e-5553-a56b-c2ae-59a254e9219b.png)


### 余談
今回使った BIPES を、最近になって試そうと思ったきっかけを、余談として少し書いておきます。

#### BIPES と Piper Make
今回使う「BIPES」は、1年以上前に Twitter で見かけて知りました。以下は、その当時のツイートの 1つです。
そして当時、自分は「Raspberry Pi Pico」と組み合わせて試そうかとアクセスしたのですが、挙動が不安定だったことがありました（※ 初めてアクセスした時は問題なかったので、その後に試そうとした時が、偶然タイミングが悪かっただけかも）。

https://twitter.com/youtoy/status/1485617470740529155

当時は、同時期に「Raspberry Pi Pico」を扱える別のビジュアルプログラミング環境「Piper Make」を知ったのもあり、なおかつ、Piper Make は自分が試したタイミングで安定して使えた状況でした。

それらの状況があり、BIPES のお試しはいったん保留して、Piper Make のほうを試していくことにしました。以下は、Piper Make を試した際の様子のツイートや、当時 Piper Make について書いた記事です。

https://twitter.com/youtoy/status/1483063818708463617

●ビジュアルプログラミングで Raspberry Pi Pico が扱える「Piper Make」を軽く試した時のメモ（Maker Pi RP2040 でも試す） - Qiita
　https://qiita.com/youtoy/items/974e7004e20806d0aef5

#### BIPES で気になっていた点
当時、上記のような状況で利用を保留していた BIPES ですが、その仕様を見ていた時に、ネットワーク接続系のブロックがあった点が気になっていました。
※ BIPES の対応デバイスに、Raspberry Pi や ESP32 などの、標準でネット接続ができるデバイスがあったので、それらのデバイス用で使えそうなのかな、と思った覚えが

#### 「Raspberry Pi Pico W」の日本国内での販売開始
そして、上記の半年後くらいに「Raspberry Pi Pico W」が発表されて、BIPES のネットワーク接続系のブロックを Raspberry Pi Pico系のデバイスで手軽に試せそうになりそうかな、という状況でした。以下は、その当時の記事の 1つです。

●Raspberry Pi財団が無線接続機能搭載版を含む「Raspberry Pi Pico」新製品3種発表、スイッチサイエンスは「Raspberry Pi Pico H」を2022年6月30日販売開始｜株式会社スイッチサイエンスのプレスリリース
　https://prtimes.jp/main/html/rd/p/000000091.000064534.html

しかし技適まわりの関係で、「Raspberry Pi Pico W」の日本国内での販売は上記のタイミングでは行われず、その後もなかなか販売が始まらない状況でした。技適まわりの問題が解決して国内販売が始まったのは、発表の約9ヶ月となる先々月（2023年3月下旬）でした。

https://prtimes.jp/main/html/rd/p/000000122.000064534.html

#### ネット接続可能な Raspberry Pi Pico系デバイスと BIPES
そして最近、BIPES の対応デバイスに「Raspberry Pi Pico W」が加わっているのを知り、今回の内容などを試すにいたったという流れでした。