WIZnetのEthernetといえば、RP2とWIZnetのチップ・RJ-45が一体になったEVB-Picoシリーズがあります。CircuitPythonではEVB-Picoシリーズのうち5100Sと5500用のファームウェアが提供されており、これを使えばSSL通信を含むネットワーク通信ができます。
が、WIZnet製品でもEthernet HAT(5100Sチップ)とか、アリエクで買えるW5500チップ採用のちっさいモジュール(たぶんWIZ850ioのパチモン)を使ってPicoもしくはPico2に接続した場合、CircuitPythonではSSL通信ができません。なんでやねん。

毎回気になっては理由を調べて、忘れるというのを2〜3回繰り返しているのですが(老化)、これはPicoとPico2のCircuitPythonファームウェアに内蔵されているモジュール一覧にsslがないのが原因です。Pico WやEVB-Picoシリーズであれば、ネットワークが使われることがほぼ確実なので、ファームウェアには当然sslモジュールが含まれていますが、ネットワークデバイスが内蔵されていないPicoとPico2には要らないだろうというメンテナの判断によって、sslモジュールが除外されているわけです。
昨年、Ethernet HATの向きをひっくり返す板だの、アリエクのWIZnetモジュール用Pico接続板だのを作って使おうとしていた私としては、含まれていて欲しいだろという気持ちがあります。
聞いてみた
CircuitPythonに関する質問をするには、GitHubのCircuitPythonリポジトリのIssueか、AdafruitのForumか、AdafruitのDiscordで質問できます。今回はDiscordに行って質問してみました。
寝る前に投稿したので向こう的には日中かなんかだったのか、わりとすぐにコア開発者のDan Halbert氏と、コミュニティのanecdata氏から相次いでコメントをもらえてビビりました。
anecdata氏的には、構成的にEVB-Picoに近いので、EVB-PicoのファームウェアをPicoに書き込んで使えばいいかもね、とのこと。たしかに、冷静に考えればそれで良いような気もします。
Dan Halbert氏的には、自分でCircuitPythonのファームをカスタムしてビルドすればいいかもねとのこと。ビルドの手間は増えますが、これは確実です。作ってみたから試してみてよと、ファームウェアをアップロードしてもらって恐縮。
カスタムビルドをする
Discordでのやり取りから、Pico2は単純にSSLサポートを有効にすればOKですが、Picoではフラッシュのサイズの制約から他のモジュールを無効化する必要があり、ここの取捨選択によりそうということがわかりました。
アップロードしてもらったカスタム版ビルドは、PicoDVIが削られていました。アリエクモジュールをPico2に載せた回ではPicoDVIと同時利用を想定していたので、PicoDVIがなくなると厳しいです。あ、いや、Pico2は削らなくて済むので良いのですが、Picoでやろうとしたらの場合に限られますね。
毎回ビルドしてもらうのわけにはいかないのと、前に何度かCircuitPythonのビルドはやったことがあるので、自分でやってみますわ〜と回答して、自力でやってみました。
環境の用意のしかたはここにあるとおりなので、適当なLinuxを用意して手順に従えばビルドできます。2点だけ、Ubuntu24.04ではビルドキットが古いので、無精してaptでいれると失敗します。手順通りarmからビルドキットを入手します。もう1点は、Pythonはvenvを使う点です。
ファームウェアビルドのオプションは、ports/raspberrypi/boards/raspberry_pi_pico/mpconfigboard.mk(Pico2ならraspberry_pi_pico2)に記述します。CIRCUITPY_SSL = 1を追記すればSSLが使えるファームウェアになります。Picoではファームウェアの容量があふれてしまうので、適宜他の内臓モジュールを無効化します。
CIRCUITPY__EVE = 1 CIRCUITPY_PICODVI = 1 # Support SSL CIRCUITPY_SSL = 1 # Disable following modules on Pico1. # But there was no need to disable on Pico2. #CIRCUITPY_FLOPPYIO = 0 #CIRCUITPY_USB_HOST = 0 #CIRCUITPY_USB_MIDI = 0 #CIRCUITPY_ROTARYIO = 0
そしてビルド。
cd ports/raspberrypi make BOARD=raspberry_pi_pico
まとめ
Pico/Pico2(Wでない)とCircuitPythonで、WIZnetのEthernetモジュールを使ってSSL通信できないのは、フラッシュサイズの都合と、PicoおよびPico2がネットワーク機能を持っていないという理由でした。そして、SSLを使いたい場合は、カスタムビルドをするのが良いという見解を得て、実際に試してみた話でした。
私はカスタムビルドできるからいいけど、そうじゃない人からするとハードルが高い話だなあという気はしなくもないですが、そもそもPicoでEthernetを使いたい(ましてや変換ボードを作ってまでして)みたいな発想自体ハードルが高いだろと言われれば、それもそうか……という気持ちもありますが。
