這裡介紹如何使用 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.begin()
的說明。
將寫好的程式編譯並上傳至 Arduino 之後,開啟序列埠監控視窗,就可以看到 Arduino 從 DHCP 伺服器所取得的動態 IP 位址了。
這時候可以使用 ping
測試一下,看看 Arduino 所取得的 IP 位址是否可以正常使用。
如果您對於 Arduino 的相關應用有興趣,建議您可以繼續閱讀物聯網的文章。