這裡介紹如何使用 Arduino Ethernet Shield W5100 乙太網路擴充板,透過 DHCP 自動取得 IP 位址。
這張是副廠的 Arduino Ethernet Shield W5100 乙太網路擴充板,相容於原廠的乙太網路擴充板,不過價格比較便宜,原廠的在網路上一張要價一千六百多,而這張只要三百多塊,如果沒有 POE 支援的更便宜,只要兩百多塊。

這是網路擴充板的背面。

擴充板在使用時就直接插在 Arduino 即可,這裡我是拿一張 UNO 的相容板來示範。

插上擴充板之後,側面的樣子。

這張擴充板在插上 UNO 上面時,RJ45 的插座下方的針腳很容易頂到 UNO 的 USB 插座,如果怕短路的話,在上面貼個膠帶會比較好。

接上 USB 線與網路線,就可以來開發程式了。

要使用這張乙太網路擴充板需要一些函式庫,而 Arduino 的開發環境中有內建基本函式庫可以使用,以下是從 DHCP 取得 IP 位址,讓 Arduino 連上網路的範例。
#include <SPI.h>
#include <Ethernet.h>
// 指定網路卡 MAC 卡號
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };
// 初始化 Ethernet client library
EthernetClient client;
void setup() {
// 初始化序列埠
Serial.begin(115200);
// 啟用 Ethernet 連線,預設會以 DHCP 取得 IP 位址
if (Ethernet.begin(mac) == 0) {
Serial.println("無法取得 IP 位址");
// 無法取得 IP 位址,不做任何事情
for(;;)
;
}
// 輸出 IP 位址
Serial.print("IP 位址:");
Serial.println(Ethernet.localIP());
}
void loop() {
}
這裡的 Ethernet.begin(mac) 是設定網路卡 MAC 卡號,並且以 DHCP 取得 IP 位址,如果要自行指定 IP 位址,可以這樣寫:
// 網路卡 MAC 卡號
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// 指定 IP 位址
byte ip[] = { 192, 168, 1, 200 };
void setup() {
Ethernet.begin(mac, ip);
}
若要設定 DNS、預設閘道與子網域等,就將這些參數再加上去即可,詳細用法請參考 Ethernet 的說明。
將寫好的程式編譯並上傳至 Arduino 之後,開啟序列埠監控視窗,就可以看到 Arduino 從 DHCP 伺服器所取得的動態 IP 位址了。

這時候可以使用 ping 測試一下,看看 Arduino 所取得的 IP 位址是否可以正常使用。

如果您對於 Arduino 的相關應用有興趣,建議您可以繼續閱讀物聯網的文章。
