Wiznet makers

louis_m

Published January 02, 2023 ©

89 UCC

16 WCC

38 VAR

0 Contests

0 Followers

0 Following

Original Link

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

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

COMPONENTS
PROJECT DESCRIPTION

こんにちは、あろっちです。

ESP32でEthernetライブラリのEthernetServerクラスを使ったスケッチでコンパイルエラーが発生する問題が確認されました。

これを回避するためのEthernetライブラリの修正方法を記述します。

Ethernetモジュールについて

ESP32をEthernetに繋ぐには以下のようなSPI接続の汎用Ethernetモジュールを用いるのがお手軽でシンプルかと思います。

ちなみに以下の製品のEthernet ICはいずれもW5500(WIZnet製)です。

こちらの制御プログラムを書くのにEhernetライブラリを使う感じです。

左: W5500 Lite 右: W5500

Ethernetライブラリ

本記事ではEthernetライブラリはWIZnet Ethernet HATに対応した以下のWIZnet fork版を使用します。

https://github.com/WIZnet-ArduinoEthernet/Ethernet

WIZnet Ethernet HAT(Raspberry Pi Pico用)

Raspberry Pi Picoをセットしたところ

参考サイト:

Ethernetライブラリの修正

本記事の修正方法は他ボード(RP2040ボードなど)に影響が及ばないように配慮しています。
よって、この修正を入れても他ボードでもそのまま使えるかと思います。

ライブラリのソースファイル場所Arduinoスケッチ保存フォルダ内のlibraries/Ethernet/src(※)
修正ファイルEthernet.h
EthernetServer.cpp
※ライブラリ名はEthernetですがGitHubからzipをダウンロードしてインストールした場合、フォルダ名がブランチ名がついた形(Ethernet-master等)になっていることも想定されます。

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との対向通信を試してみました。

Raspberry Pi PicoがTCPSever、ESP32がTCPClientになっています

Ethernet同士を直結するためクロスLANケーブルを使っています。

エレコム クロスLANケーブル 1m ツメが折れない CAT5e ブルー LD-CTXT/BU10

Raspberry Pi Picoのシリアルモニターを除いてみるとESP32からのパケットを受信できていることが確認できました。

このように上記修正を入れてもRaspberry Pi Pico(RP2040ボード)でもEthernetServerクラスが使えることを確認できました。

Documents
Comments Write