Arduinoで有線LAN

Arduinoで有線LANを使うためのメモ。
デバイスの違いを中心に。

◆スケッチ

ファイル/スケッチ例/Ethernet/WebServer

◆チップ

Ethernetを処理するチップには、Arduino向けによくみかけるものでW5100,W5200,W5500,ENC28J60がある。
スケッチにインクルードするヘッダファイルが違うので注意。
W5100とW5200とW5500の場合は次。

ENC28J60の場合は次。

ネット上の記事を読むと、W5500はEthernet2.hを使う、みたいな記述があったけど、Ethernet.hそのままで行けた。
オフィシャルのリファレンスでも、行ける風に書いてあるので、どこかの段階で対応したのかも。

UIPEthernet.hは、ツール/ライブラリを管理 でライブラリマネージャーを開き、「UIPEthernet」で検索すると出てくるのでインストールする。

◆メモリ

UNO/Nanoの場合、フラッシュメモリとSRAMをだいぶ使ってしまうので、他のライブラリ類も大きいのは使いずらい。
無理にあれこれ試行錯誤するよりもMega2560に行ってしまった方が良いかも。

ライブラリ フラッシュメモリ SRAM
Ethernet.h 15324バイト(49%) SRAM847バイト(41%)
UIPEthernet.h 18414バイト(57%) SRAM1509バイト(73%)
◆消費電流

100Mbpsの場合、120~132mAを使うようだ。
Arduino UNO(互換)の場合、3.3V出力電流は50mA~150mAなので、足りるかもしれないけど余裕はない。
Arduino Nanoの場合、公式品でも50mAなので、全然足りない。
なのでシールド類は、3.3Vからではなく、5Vからとってレギュレータで3.3VにしてEthernetチップ側に供給している。
AMS1117や1117M3のチップがそれだ。

レギュレータが無いモジュールを使うとなると、別途レギュレータをつけたりしないといけない。

◆配線

SPI接続を行う。

Arduino側(UNO*/Mega)ポート モジュール側
D10/D53 CS(SS)
D11/D51 SI(MOSI)
D12/D50 SO(MISO)
D13/D52 SCK
RESET RST
3.3V** VCC
GND GND

*UNOとNanoは同じポート
**Arduino Nanoの場合、3.3Vから引くのではなく、5Vから作るか別途用意する必要がある。

モジュール使用例1

AliExpressで購入したもの(ENC28J60)。
https://ja.aliexpress.com/item/1678440647.html
たぶん↓と同じ。
https://www.amazon.co.jp/dp/B07WC2XM77/


Arduino Nanoで使うなら、別途電源を使うやり方もある。

モジュール使用例2

だいぶ前にSwitchScienceで購入したもの(W5200)。
https://www.switch-science.com/catalog/875/

レギュレーターで5Vから3.3Vを作っている。

モジュール使用例3

AliExpressで購入したもの(W5500)。
https://ja.aliexpress.com/item/32901601162.html
レギュレーターがついているので、5Vを直結できて楽。

シールド使用例

どちらもレギュレーターが付いているし配線不要で、これが一番楽。

◆選定

UNO/Nanoで使うならチップはW5100/W5200/W5500が良い。ENC28J60はライブラリがメモリ食いすぎてLチカの次に進みにくい。
Mega2560で使うならそこまで気にならないかもだけど。

モジュールかシールドかは使い方によるだろうけど、モジュールの場合レギュレーター付きの方が楽。

◆参考

[SPI] イーサーネットボード (ENC28J60)
https://ht-deko.com/arduino/ether_spi.html
WIZ850io – スイッチサイエンス
https://www.switch-science.com/catalog/3683/
WIZ820io–販売終了 – スイッチサイエンス
https://www.switch-science.com/catalog/875/
Arduino Uno の 3.3V出力電流について | macsbug
https://macsbug.wordpress.com/2015/08/01/