IoT|硬體|ARDUINO|實作|Arduino Ethernet Shield(W5100) DHCP IP

Arduino Ethernet Shield 簡介

Ethernet Shield(W5100) 主要特色是把 TCP/IP Protocols (TCP, UDP, ICMP, IPv4 ARP, IGMP, PPPoE, Ethernet) 做在硬體電路上,減輕了單晶片(MCU )的負擔 (也就是 Arduino 開發板的負擔)。
 
新的 Ethernet Shield 增加了 micro-SD card 插槽,可以用來儲存檔案,你可以用 Arduino 內建的 SD library 來存取板子上的 SD card。此外,Ethernet Shield 相容於 UNO 和 Mega 2560 控制板。
 
Arduino 程式只要使用 Ethernet Library 便可以輕易完成連至網際網路的動作,不過 W5100 也不是沒有缺點,因為它有一個限制,就是最多只允許同時 4 個 socket 連線。
 
使用上需注意的地方

使用上,W5100 網卡跟 UNO 板子大小一樣, 基本上針腳對準 UNO 排針插座直接疊上去, 插上網路線, 再送電即可;惟腳針上仍有一些需要注意的地方:
 
Arduino 開發板跟 W5100 以及 SD card 之間的通訊都是透過 SPI bus (通過 ICSP header)。以 UNO開發板 而言,SPI bus 腳位位於 pins 11, 12 和 13。UNO pin 10 是用來選擇 W5100,而 pin 4 則是用來選擇 SD card。這邊提到的這幾支腳位都不能拿來當 GPIO 使用,請勿必避開這兩個GPIO腳位。
 
在使用的時候還有一件要注意,因為 W5100 和 SD card 共享 SPI bus,所以在同一個時間只能使用其中一個設備。如果你程式裏會用到 W5100 和 SD card 兩種設備,那在使用對應的 library 時就要特別留意,要避免搶 SPI bus 資源的情形。
 
假如你確定不會用到其中一個設備的話,你可以在程式裏明白地指示 Arduino開發板,方法是: 如果不會用到 SD card,那就把 pin 4 設置成 OUTPUT並把狀態改為 high,如果不會用到 W5100,那麼便把 pin 10 設置成 OUTPUT並把狀態改為 high。
 
[狀態指示燈號]
  • PWR: 表示 Arduino 控制板和 Ethernet Shield 已經上電
  • LINK: 網路指示燈,當燈號閃爍時代表正在傳送或接收資料
  • FULLD: 代表網路連線是全雙工
  • 100M: 表示網路是 100 MB/s (相對於 10 Mb/s)
  • RX: 接收資料時閃爍
  • TX: 傳送資料時閃爍
  • COLL: 閃爍時代表網路上發生封包碰撞的情形 (network collisions are detected)
 
 
 
[下載]
Ethernet Library:可到Arduino.cc的官網,下載函式庫與相關範例。
 
[透過DHCP 取得 IP 位址]
 
dhcp.ino
#include <SPI.h>
#include <Ethernet.h>
byte mac[]={0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02};//指定網路卡 MAC 位址 (可以隨便設)
EthernetClient client;// 建立乙太網物件 EthernetClient
void setup() {//設定初始值
  Serial.begin(115200);//初始化序列埠
  //啟用 Ethernet 連線,預設會以 DHCP 取得 IP 位址
  if (Ethernet.begin(mac)==0) {
    Serial.println("Cannot get IP Address!");   
    for(;;);// 無法取得 IP 位址,不做任何事情
    }
  Serial.print("IP Address ");//輸出 IP 位址
  Serial.println(Ethernet.localIP());
  }
void loop() { } //無限迴圈
 
開啟序列阜監控視窗
 
參考