この前入手したRaspberry Pi PicoだけどとりあえずArduino IDEで使えるようにしてみた。
ラズパイと言ったらIoT、インターネットに繋がないと!(偏見
ということで、SPI接続なイーサーネットコントローラを使用してネットワークに接続してみた。Wifiに接続するんだったらそもそもESP32でいいような気もするのであえて有線のLAN。
ArduinoでLANと言ったら今だとW5500のモジュールが結構小さくて、スケッチのサイズも小さくなるらしいんだけど、だいぶ前に買ったENC28J60のモジュールがあったのでとりあえずそれを使用することに。UNOに比べてリソースたっぷりあるし。
中にはPIOとDMAを駆使してRMII実装してLAN8720を使えるようにしてる人もいるみたいだけど、今回はライブラリ豊富なSPI接続タイプを…
まずはArduino IDEにRaspberry Pi Picoを追加する。
とりあえずArduinoCore-mbedの方にした。これはArduino純正なのでボードマネージャーからそのまま入れることができる。
次にENC28J60を使うためのライブラリを入れる。
EthernetENCっていうライブラリが便利そうだったのでこちらをライブラリマネージャーからインストール。ライブラリマネージャーから入れられるのもかんたんで良いね。
このEthernetENCはArduino純正のSPIライブラリに対応しているので結構いろんなマイコンで動くらしい。
あとはArduinoのEthernetサンプルのEthernet.hをEthernetENC.hに変更するだけで大抵は動くらしい。UDPマルチキャストには対応していないみたいなのでmDNSとかUPnPとか一部動かない機能もあるかも。
お次はRaspberry Pi PicoとENC28J60モジュールの接続。
Raspberry Pi Picoの3.3Vは800mA流せるDC/DCコンバーター(RT6150B)っぽいので最大180mA流れるENC28J60もダイレクトにつないでしまって大丈夫そう。
ArduinoCore-mbedでSPIを使用する場合、デフォルトで、
MOSI: 3
MISO: 4
SCK: 2
SS: 5
になってる模様。ENC28J60のSIはMOSI、SOはMISO、SCKはSCK、SSはCS、あとは電源とグラウンドの6本繋げばOK。まだピンヘッダ実装していないのでとりあえず適当に…
とりあえずサンプルスケッチを動かしてみた。EthernetのWebServerの
#include <Ethernet.h>を#include <EthernetENC.h>に変更して
Ethernet.init(5);の部分のコメントアウトを外すだけ。
IPアドレスはセグメントを合わせるために変更。
とりあえずこれでLANに接続することができた。ブラウザからアクセスするとシリアルコンソールにブラウザの情報が表示される。(ブラウザになにか表示させるサンプルではない) Arduino UNOとかだとこのサンプルだけでかなり容量食ってしまうんだけどさすがRaspberry Pi Picoは余裕っぽい。
とりあえず動作確認はできたので次はEthernetWebServer_SSLを使ってSSLに対応させてみる。
EthernetWebServer_SSLもライブラリマネージャーから入れることができる。
とりあえずEthernetWebServer_SSL→WebServerを試してみる。
define.hタブを開いて、
#define USE_ETHERNET true
をfalseに
#define USE_ETHERNET_ENC false
をtrueに変更する。
あとはそのまま書き込むだけ。最初からこのサンプルを試したほうが良かったかもしれないぐらいかんたんだった…
ちなみにArduino IDEから書き込み失敗する場合はBOOTSELボタンを押した状態でUSBを指し直すといけるっぽい。
シリアルコンソールに表示されるIPアドレスにブラウザからアクセスするだけでブラウザに文字が表示される。これぞ本当のWebServer。
まだこのライブラリを入れた本当の意味であるSSLは試せてないんだけど長くなったので次回に続く。ローカルならSSLあんまりいらないかもしれないけど、インターネットに繋ぐなら最近はHTTPS多いしこのライブラリ重要かも?
Raspberry Pi PicoぐらいリソースがあればインターフェースとしてLANも悪くないかも。パルストランスでアイソレートされてたりするし。