ESP32で有線LANが使えるらしいということで以前から気になってはいました。
ただ、外付けの PHY IC のモジュールばかりが目立っていて、それらが組み込まれたモジュールがないかなとも思っていました。
他にもないのかと色々調べてみると、いいものがあったのでそれを使って自己満拡張モジュールを作ってみました。
スポンサーリンク
目次
ESP32で有線LANにつなげるためのモジュール
LAN8720モジュール
ESP32で有線LANにつなぐためには、そのままRJ45(LANケーブルを接続するコネクタ)をESP32のどこかのピンとつなげるわけではなく PHYチップというものが必要です。
そのPHYチップのLAN8720というが載ったモジュールは安く売られています。
この記事を書いている時点でAmazonでも400円くらいです。
Aliexpressだと200円くらいで売られていますね。
といっても送料無料ではないのが多そうですけど。
また、ESP32と繋げる場合はそのままでは動かないようなので、少し改造する必要があるのも厄介です。
LILYGO TTGO T-Internet-POE
じゃあ一から作るかとも思いましたが、それはそれで面倒な気がしていました。
なにかいいものがないかと探していると、ピッタリなモノを発見。
求めたいたESP32とPHYチップが搭載されていて、さらにPoEやmicroSDカードのソケットなど、これでもかと機能を詰め込んだようなモジュールを見つけました。
これはAliexpressでも買えます。
価格も2,000円くらいとお手軽なのが魅力です。
GPIOも一応出してくれているので色々と拡張しやすいです。
これを使って、ああしてこうしてと一気に夢が広がりました。
残念なポイントはUSBが充電のみで書き込みのインターフェイスは別って言うところですかね。
まあこれはOTAのプログラムを入れてしまえば、それからは必要ないので問題にはならないでしょう。
余談:M5Stackで有線LANにつなげるベース
ちなみにM5Stackでも似たようなものがありそうだなと思いましたが、PHYチップを使った有線LANのモジュールはなさそうでした。
SPI接続するタイプのモジュールはありましたが。
直接的(?)に接続できるものではなかったので今回は見送りました。
拡張モジュールの製作
有線LANにつながりますし、GPIOも空いていますので産業用途で使えるようにIOも強化したら面白そうだなと思いつきました。
思い立ったが吉日ということで、早速作ってみました。
ちょうどよく TTGO T-Internet-POE の基板と同じくらいサイズになったので上に積み重ねることができ、スマートに仕上がりました。
DINレールに取り付ける用の部品がつけられるようにアクリルでベースも作りました。
拡張したI/Oは絶縁DC入力4点、絶縁DC出力(シンク)4点、RS485、それからおまけのI2Cが使えるコネクタを用意しました。
入力と出力はどちらも産業用途でよく使われる24Vに対応しています。(12-24Vを想定)
出ているIOの都合上、SDカードとRS485のピンが同じものを使わざるを得なかったため排他的な使用になってしまいました。(同時には使えない)
といってもSDカードは個人的にはそんなに使う機会がないので問題なしとしています。
排他使用と言ってもプログラムで切り替えしてもいいですしね。
RS485の方のデータの取りこぼしやリアルタイム性は失われますが。
Note:有線LANとWi-Fiの共存
作った拡張モジュールの話ではないですが、とても気になっていたことなのでここに覚書として残しておきます。
そもそも有線LAN(以下、ETH)とWi-Fiは共存できるのかというお話です。
スポンサーリンク
ETHとWi-Fiは別のMACアドレスを持っているので、同時に使用しても問題ないように思えます。
ただ、ESP32のETHを使ったサンプルプログラムを見てみると、実はWi-Fiでネットワークに接続するプログラムとほとんど一緒です。
ライブラリがWiFi.hからETH.hに変わっただけと言ってもいいくらいです。
有線LANなのにWiFiClientを使っていたり、イベントハンドラの名前がWiFiEventだったり、結構かぶっていてややこしいです。
ETHとWi-Fiとで書き分けができないのが現状みたいです...
じゃあETHとWi-Fiを併用した時はどういう通信になるのかが気になりますよね。
結果から言うと、ネットワーク関係の知識が薄すぎるので適切な表現ではない可能性が高いですが、正常に通信できる方で通信しているようです。
実際にWi-Fiはインターネットにアクセスできるネットワークに接続し、ETHはパソコンと直接つなげただけのプライベートネットワークを構築したところ、ちゃんとインターネットからデータを取れますし、パソコンとのTCP通信も確立しました。
どうしてこうなっているのか分からないのが現状ですが、事実としてこういう動作しているのでそれを認めるしかありません。
これはどちらもクライアントとして動かしているときの動作なので、どちらかもしくは両方をサーバとして動かしているときはまた違った動作になるかもしません。
ESP32に詳しい方が見てくださっているのであれば、そのあたりを教えていただけると幸いです。
といっても知識がない現状では、何を言っているかわからない状況になりそうですけどね...
機能をもりもり付けた自己満足のモジュールができましたが、結構いい出来なのではないでしょうか。
安価に作れるのもメリットだと思いますので、今後色々と活躍してくれそうな気がします。
I2Cのところをもうちょっと拡張して更に拡張してもいいかなと思っています。
スポンサーリンク
Leave a Comment