【解決】Raspberry Pi Pico W ＋ MicroPython で BlynkLib.py を使った時のエラーに関する対処メモ

:::note info
本記事へのコメントで、「この記事に書いた問題に対応したライブラリをリリースした」というお知らせをいただきました。

その修正版のライブラリを使ってみたところ、安定版の最新バージョン「RPI_PICO_W-20240602-v1.23.0.uf2」でエラーが解消されたことを確認できました。

↓コメントのリンクをこちらに掲載しておきます
https://qiita.com/youtoy/items/ac1510b76b43936c33fb#comment-c6c6cf6381c6ef89f1cc
:::


以下のポストをしていた時（[Raspberry pi もくもく会というイベント](https://raspberry-pi-moku.connpass.com/event/320188/)に参加した時）に、そこで出くわしたエラーの対処法に関するメモです。

https://x.com/youtoy/status/1799654701274914897

この時にやろうとしたことは、「[Blynk というサービス](https://blynk.io/)を使って、スマホアプリ上のボタンを押すごとに、Raspberry Pi Pico W のボード上の LED の ON/OFF が切り替わる仕組みを実装する」というものでした。

以下が、それをうまく動かせた時の様子です。

<iframe width="560" height="315" src="https://www.youtube.com/embed/boq6eBYch4U?si=R3jmys3E8d7dwzfa" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

この動画のようにうまくいく前に、軽くハマってしまいました...

## 問題が発生した状況
今回、Blynk の基本的な設定や、MicroPython ＋ Raspberry Pi Pico W を使って開発する環境のセットアップ（※ 今回、[Thonny](https://thonny.org/) を使いました）の詳細については省略します。

今回の話は、MicroPython で書いたプログラムを Raspberry Pi Pico W で動かせる状態になった後の話です。

またその際に、MicroPython ＋ Raspberry Pi Pico W を使った開発で Blynk を利用するために、以下のライブラリを用いています。

●blynk-library-python/BlynkLib.py at master · vshymanskyy/blynk-library-python
　https://github.com/vshymanskyy/blynk-library-python/blob/master/BlynkLib.py

そして、スマホアプリ上のボタンを押すごとに、Raspberry Pi Pico W のボード上の LED の ON/OFF が切り替わる仕組みを実装したところ、以下のエラーが発生しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/68f195e2-9204-2f15-4f40-bb244044d34c.png)

```
Connecting to blynk.cloud:443...
Traceback (most recent call last):
  File "<stdin>", line 37, in <module>
  File "/lib/BlynkLib.py", line 214, in __init__
  File "/lib/BlynkLib.py", line 81, in __init__
  File "/lib/BlynkLib.py", line 239, in connect
AttributeError: 'module' object has no attribute 'create_default_context'
```

処理の流れの中でエラーが発生した部分は、Raspberry Pi Pico W が Wi-Fi につながって、その後に Blynk用のサーバーに接続するところのようでした。

## 問題の解決方法
エラーが発生した後、いろいろ検証した結果、これを解決できた方法は「ファームウェアを少し古いバージョンにする」というものでした。

当初、公式ページの以下から「RPI_PICO_W-20240602-v1.23.0.uf2」をダウンロードして使ったのですが、その状況だと上記のエラーが発生していました。

●MicroPython - Raspberry Pi Documentation
　https://www.raspberrypi.com/documentation/microcontrollers/micropython.html
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/170dfe2e-924e-fed6-ca05-aeffc6fcfcbb.png)

最終的に、以下のページにある 1つ前のバージョン ＝ 「RPI_PICO_W-20240222-v1.22.2.uf2」を用いることで、以下のようにエラーが発生せず、無事に動作するようになりました。

●MicroPython - Python for microcontrollers
　https://micropython.org/download/RPI_PICO_W/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/c7b79253-0f95-fd57-b8f7-a47899a1f94b.png)

プログラム実行後、以下の画像の下のほうの「0」「1」という数字が出力される ＝ スマホ側のボタン操作で指定した状態が「ON/OFF のどちらか」を示す値の出力が確認できる、という状態になりました。
そして、上で掲載した動画のように、Raspberry Pi Pico W のオンボードLED の ON/OFF をスマホから行えることも確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/1ef52952-34f4-883c-df3f-bbedcc10952b.png)

なお、1つ前のバージョンではなく、プレビューバージョンとなっていた「RPI_PICO_W-20240608-v1.24.0-preview.34.g5903ee561.uf2」も試したのですが、「RPI_PICO_W-20240602-v1.23.0.uf2」を用いた時と同じエラーが出ました。