Arduinoのネットワーク通信

ENC28J60とW5100

ENC28J60チップとW5100チップを使った安価なArduino用のLANモジュールを入手しました。

ENC28J60のモジュールには5V仕様の物と、3.3V仕様の物が有ります。
左:3.3V仕様
右:5V仕様


5V仕様の物は裏にAMS1117のレギュレータが実装されていて、チップ本体は3.3Vで動いています。
UNOで使うなら5V仕様の方が楽ちんです。


ArduinoでENC28J60を使う場合、「EtherCard」と「UIPEthernet」の2つのライブラリを選ぶことができま す。 (他にも探せばあるかもしれません)

EtherCard
https://github.com/njh/EtherCard
このライブラリは以下のプロトコルをサポートしています。
DHCP/DNS/UDP

UIPEthernet
https://github.com/UIPEthernet/UIPEthernet
このライブラリは以下のプロトコルをサポートしています。
DHCP/DNS/UDP/TCP/ARP/ICMP

私はTCPを使いたかったので「UIPEthernet」を使いました。
以下のページから 「UIPEthernet-master.zip」をダウンロードし、ライブラリに追加します。
https://github.com/UIPEthernet/UIPEthernet

なお同じ名前のライブラリがこちらにありますが、これは古いバージョンです。
https://github.com/ntruchsess/arduino_uip

Arduinoのライブラリは同じ名前の物が複数あるので注意が必要です。

ENC28J60とUNO(ATMEGA328)の接続はこちらで 紹介されている通りです。
ENC28J60 ATMEGA328
SO Pin#12
SI Pin#11
SCK Pin#13
CS Pin#10
VCC (※1)
GND GND
RESET (※2)

(※1)
3.3Vモジュールの時は3.3V。
5Vモジュールの時は5V。
3.3Vモジュールの場合、UNOオンボードの3.3Vではこ ちらの理由で安定して動きません。
5V→3.3Vのレギュレータを使って3.3Vを供給する必要が有ります。

(※2)
ArduinoのResetポートにつなぐよりも、PullUpした方が安定するようです。
PullUpしても動かないときは、一瞬GNDに落とした後、PullUpすれば動きます。

ENC28J60をATMEGA2560で使う場合は、以下の様になります。
CSピンの使い方がW5100とは違います。ATMEGA2560標準のPin#53を使います。最初これに気が付かずにはまりました。
ENC28J60 ATMEGA2560
SO Pin#50
SI Pin#51
SCK Pin#52
CS Pin#53
VCC (※1)
GND GND
RESET (※2)

こ ちらに様々なボードの結線図が公開されています。



W5100チップはUNO用の純正Etnernetシールドでも使われているチップです。
ENC28J60($2.82)よりも少し高めの$6.03でした。




このモジュールについては、こ ちらのページに詳 しく紹介されていますが、IDE標準の「Ethernet.h」で動きます。

W5100とUNO(ATMEGA328)の接続はこ ちらで紹介されて い る通りです。
ATMEGA328 W5100 ATMEGA328
GND GND V+5 5V
RST(※) RST NSS Pin#10
Pin#13 SCK MOSI Pin#11
Pin#12 MISO GND GND

POE+ POE-

(※)オープンでも動きますが、PullUpした方が安定するようです。
どうしても動かないときは、スケッチ起動時に一瞬GNDに落とすとつながります。
ArduinoのResetポートにつなぐとスケッチのコンパイルが終わりません。

W5100とATMEGA2560の接続もこ ちらで紹介されて いる通りです。
なぜかCSにはATMEGA2560標準のPin#53ではなくPin#10を使います。
ATMEGA2560 W5100 ATMEGA2560
GND GND V+5 5V
RST(※) RST NSS Pin#10
Pin#52 SCK MOSI Pin#51
Pin#50 MISO GND GND

POE+ POE-

その後、W5500のモジュールを入手したので次回紹介します。

続く...