以下の内容はhttps://akkiesoft.hatenablog.jp/entry/20250719/1752896108より取得しました。


Pico/Pico2(Wでない)に入れたCircuitPythonでWIZnetのEthernetモジュールを使ってSSL通信したい

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接続板だのを作って使おうとしていた私としては、含まれていて欲しいだろという気持ちがあります。

akkiesoft.hatenablog.jp

akkiesoft.hatenablog.jp

聞いてみた

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を使う点です。

github.com

ファームウェアビルドのオプションは、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に書き込んで、SSL通信できればOKです。

ためす

いつもの田園都市線サイネージ(単に書き換えてないだけ)のデータ取得URLを自宅の中間サービスから直接に変更して、SSL通信が必要な状態にして起動。問題なく取得できました。


まとめ

Pico/Pico2(Wでない)とCircuitPythonで、WIZnetのEthernetモジュールを使ってSSL通信できないのは、フラッシュサイズの都合と、PicoおよびPico2がネットワーク機能を持っていないという理由でした。そして、SSLを使いたい場合は、カスタムビルドをするのが良いという見解を得て、実際に試してみた話でした。

私はカスタムビルドできるからいいけど、そうじゃない人からするとハードルが高い話だなあという気はしなくもないですが、そもそもPicoでEthernetを使いたい(ましてや変換ボードを作ってまでして)みたいな発想自体ハードルが高いだろと言われれば、それもそうか……という気持ちもありますが。




以上の内容はhttps://akkiesoft.hatenablog.jp/entry/20250719/1752896108より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14