Arduino Ethernet Shield W5100 乙太網路擴充版,使用 DHCP 取得 IP 位址

這裡介紹如何使用 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 的相關應用有興趣,建議您可以繼續閱讀物聯網的文章。
本站已經搬家了,欲查看最新的文章,請至 G. T. Wang 新網站

1 則留言:

  1. I appreciate you giving your knowledge! Continue your fantastic effort! Keep sharing. I invite you to browse my website.You'll need some function libraries to use this Ethernet expansion board, however the Arduino development environment comes with several simple function libraries that you can use. Here's an example of how to use DHCP to get an IP address and enable Internet access for Arduino.

    回覆刪除