イーサーネットシールド2

新しいイーサーネットシールドです。PoE 給電可能なタイプとそうでないタイプがあります。

古いイーサーネットシールドは、

…という事で手を出しにくかったのですが、イーサーネットシールド2は安くてそれなりに在庫もあって MAC アドレスも付いています (背面にシールが貼ってあります)。

シールド上のコネクタは、

このようになっています。MicroSD カードスロットもあり、こちらはイーサーネットとは独立した別の機能となります。イーサーネット+ MicroSD カードなコンボシールドという事ですね。

但し、このシールドは Leonardo には使えません。そのため、Leonardo + イーサーネットシールド2 な製品 (Arduino Leonardo Ethernet) があります。

PoE モジュールは Silvertel 製で、サードパーティ扱いです。別売されていますが、日本国内では入手方法に難があります。

12V モジュールと 5V モジュール、3.3V モジュールがありますが、Ethernet Shield / Ethernet Shield 2 で使われているのは 12V モジュールのようです。


使い方

このシールドを使うには別途 Ethernet 2 library をインストールする必要があります。[スケッチ | ライブラリをインクルード | ライブラリを管理] でライブラリマネージャを開き、"Ethernet2" を検索してインストールします。

サンプルスケッチは [ファイル | スケッチ例 | Ethernet2] にありますが、古い Ethernet シールドのスケッチもインクルードするヘッダファイルを変更するだけで殆ど動作します。

V1 (W5100) V2 (W5500)
Ethernet.h Ethernet2.h
EthernetUdp.h EthernetUdp2.h

Wake on LAN を行うスケッチを書いてみました。D8 に接続されたプッシュボタンを押すとマジックパケットをブロードキャストします。

/*
 * Wake on LAN example.
 * Copyright (C) 2017 by Hideaki Tominaga (deko@ht-deko.minim.ne.jp)
 */

#include <SPI.h>

/* for Ethernet Shield V1 */
// #include <Ethernet.h>
// #include <EthernetUdp.h>

/* for Ethernet Shield V2 */
#include <Ethernet2.h>
#include <EthernetUdp2.h>

#define UDP_TX_PACKET_MAX_SIZE 128

const byte preamble[6] PROGMEM = {0xFF0xFF0xFF0xFF0xFF0xFF};
const unsigned int WOL_PORT PROGMEM = 7;

const int BUTTON PROGMEM = 8;                          // ボタンのピン

IPAddress myIP(1921681177);                      // 自 IP
byte myMAC[6] = {0x000x010x020x030x040x05};  // 自 MAC ADDRESS

IPAddress broadcastIP(1921681255);               // ブロードキャストアドレス
byte wolMAC[6] = {0xAA0x550xAA0x550xAA0x55}; // ターゲットの MAC ADDRESS

EthernetUDP udp;

void setup() {
  Serial.begin(115200);
  while(!Serial);

  Ethernet.begin(myMAC, myIP);
  udp.begin(WOL_PORT);
  pinMode(BUTTON, INPUT_PULLUP);

  Serial.println("Ready.");
}

void loop() {
  // ボタンが押されたらマジックパケットを送出
  if (digitalRead(BUTTON) == LOW) {
    Serial.println("Button is pressed.");

    udp.beginPacket(broadcastIP, WOL_PORT);
    udp.write(preamble, sizeof preamble);
    for (byte i=0; i<16; i++)
      udp.write(wolMAC, sizeof wolMAC);
    udp.endPacket();   

    delay(5000);    
  }
}

See Also:


MAC アドレスについて

MAC アドレスが付属しなくても、ローカルで使う分には特に問題ありません。MAC アドレスには IP アドレスと同様、ローカルアドレスとグローバルアドレスがあるからです。

MAC アドレスの 6 オクテット (6 バイト) は以下のようになっており、

1 2 3 4 5 6
ベンダーID (OUI) 機種ID シリアルID

さらに最初のオクテット (上で言う 1 の部分) の下位 2 ビットにはフラグがあります。下位 2 ビット目 (GL ビット) がオンだとローカルアドレスです。

7 6 5 4 3 2 1: GL ビット 0: IG ビット
0: グローバル
1: ローカル
0: ユニキャスト
1: マルチキャスト

つまり、先頭オクテットの下位が 2, 6, A, E ならローカル MAC アドレスです。よくわからなければ x2-xx-xx-xx-xx-xx という MAC アドレスを使ってください (x は任意の 16 進値)。この MAC アドレスがローカルエリアネットワーク内で重複しなければ OK です。

問題になるのはインターネット接続をする時です。勝手に変なの使うと重複します。重複した先に迷惑かかる事がありますのでやめましょう。手っ取り早いのは...

いずれにせよベンダー詐称なので褒められたもんじゃありません...という事で MAC アドレスが付属しているシールド / ボードがオススメなのです。

See Also:


ここにある情報が役に立って、「調べる手間が省けたからオマイに飯でもおごってやるよ」 というハートウォーミングな方がいらっしゃいましたら、下のボタンからどうぞ。

メニュー: