h_nari @ 熊本市のブログ。電子工作、プログラミング、ゲーム、TV、 政治、インターネットなどに日々の思い付きを、 うだうだ~と書いていきたい。
このブログにはコメント欄を設けておりません。 記事への御意見、ご質問はtwitter @h_nari宛に お願い致します。


アーカイブ

メタ情報
RSS
Login

ESP32開発ボードでEthernet実験

ESP32のEthernet (有線internet接続)には、 当初から期待していて、 AliExpressに売っている LAN8720 PHYモジュールを買ってみて試したが 上手く行かなかった。

原因は、ESP32のEthenetモジュールを使用するのに、 50MHzのPHYのクロックを GPIO0に入力する必要があること。 ご存知の通り GPIO0は、起動時にHighにしたり、 Lowにしたりすることで 通常起動モードと ファームウェア書換モードの切り替えに 使用する。 つまり起動時に50MHzのクロックを 止める機能が必要になる。 実際、Olimexの ESP32-GATEWAYボード の回路では、そのようになっている。

その時はLAN8720 PHYモジュールの使用を諦め、 ESP-GATEWAYボードで実験を行い、 lwIPが動くことなど確認していた。

今回、ESP32でEthernetを使えるボードを 自分で作ろうと思い、調べ直すと ESP32 arduinoに ETH_LAN8720_internal_clockとか言う サンプルプログラムがある。 GPIO17からPHY用の50MHzを出力できるらしい。 これならLAN8720 PHYモジュールを改造して実験できるかも しれないと試したら出来たので報告する。

まず、LAN8720モジュールのクロックを止める必要がある。 パターンカットでいけるかと思ったが、パターンが見えない。 回路図を見て、 R12,R14から追っていけばわかりそうだが、 部品名が書いてないのでどれがR12,14だかわからない。

あきらめて発振器を取り外すことにする。 はんだごて2本あれば行けそうだが、 何故か1本しか無い。 仕方が無いので SMD Rework Stationを引っ張り出して、取り外した。 Rework Stationは、半田ごての方はFX-888を購入したので 使わなくなったが、 Hot Airの方はよく使う。便利だ。

スケッチの例「ETH_LAN8720_internal_clock」を呼出し、 コンパイルする。何故か ETH_CLK_MODEの定義が ETH.hと重複し、コンパイルエラーとなるので、 setup()で呼び出している ETH.beginの引数で 直接ETH_CLOCK_GPIO17_OUTを指定。

その後、試行錯誤のあと、回路などを修正し、 無事 Ethernet経由でインターネットから情報を取得できた。 最終的な回路、というか LAN8720 PHYモジュールとESP32の 接続は次のようになった。

MDCとMDIOに接続しているIOは変更可能、他は変更不可。 IO25とIO26が使用されているのでDACが使えないのが残念。

LAN8720はAliExpresで買えば$2程度。 発振器を外すだけで ESP32のEthernetの実験ができるのは、 悪くないと思うのだが、どうだろう。