ESP32でEthernetライブラリのコンパイルエラーを回避する方法【Arduino使用】
ESP32でEthernetライブラリのコンパイルエラーを回避する方法【Arduino使用】

こんにちは、あろっちです。
ESP32でEthernetライブラリのEthernetServerクラスを使ったスケッチでコンパイルエラーが発生する問題が確認されました。
これを回避するためのEthernetライブラリの修正方法を記述します。
Ethernetモジュールについて
ESP32をEthernetに繋ぐには以下のようなSPI接続の汎用Ethernetモジュールを用いるのがお手軽でシンプルかと思います。
ちなみに以下の製品のEthernet ICはいずれもW5500(WIZnet製)です。
こちらの制御プログラムを書くのにEhernetライブラリを使う感じです。
Ethernetライブラリ
本記事ではEthernetライブラリはWIZnet Ethernet HATに対応した以下のWIZnet fork版を使用します。
https://github.com/WIZnet-ArduinoEthernet/Ethernet
WIZnet Ethernet HAT(Raspberry Pi Pico用)
参考サイト:
Ethernetライブラリの修正
本記事の修正方法は他ボード(RP2040ボードなど)に影響が及ばないように配慮しています。
よって、この修正を入れても他ボードでもそのまま使えるかと思います。
ライブラリのソースファイル場所 | Arduinoスケッチ保存フォルダ内のlibraries/Ethernet/src(※) |
修正ファイル | Ethernet.h EthernetServer.cpp |
Ethernet.h
EthernetServerの宣言の箇所
修正前
class EthernetServer : public Server {
private:
uint16_t _port;
public:
EthernetServer(uint16_t port) : _port(port) { }
EthernetClient available();
EthernetClient accept();
virtual void begin();
begin関数の箇所を以下のように修正します。
修正後
class EthernetServer : public Server {
private:
uint16_t _port;
public:
EthernetServer(uint16_t port) : _port(port) { }
EthernetClient available();
EthernetClient accept();
#ifdef ARDUINO_ARCH_ESP32
virtual void begin(uint16_t port=0);
#else
virtual void begin();
#endif
EthernetServer.cpp
修正前
void EthernetServer::begin()
{
begin関数の箇所を以下のように修正します。
#ifdef ARDUINO_ARCH_ESP32
void EthernetServer::begin(uint16_t port)
#else
void EthernetServer::begin()
#endif
{
テスト
この修正を実施した後、Raspberry Pi Pico(RP2040)にEthernetServerを使ったサンプルスケッチを書いてESP32との対向通信を試してみました。
Ethernet同士を直結するためクロスLANケーブルを使っています。
Raspberry Pi Picoのシリアルモニターを除いてみるとESP32からのパケットを受信できていることが確認できました。
このように上記修正を入れてもRaspberry Pi Pico(RP2040ボード)でもEthernetServerクラスが使えることを確認できました。