2015年3月28日 星期六

Arduino 乙太網擴充卡測試

這塊向露天 XLAN 買的 W5100 乙太網卡才 $230 元, 算是最便宜的相容品 (一般都要 400 元以上), 所以買來的時候左看右看都沒有找到標示 MAC 的貼紙或打印, 這樣要怎麼寫網路存取程式呢? 我的網路知識薄弱, 經過查詢研究, 原來 MAC 位址可以先隨便亂填, 只要不會跟網域內的其他網卡雷同就可以了.

W5100 網卡跟 UNO 板子大小一樣, 針腳對準 UNO 排針插座直接疊上去, 插上 IP 分享器來的網路線, 再送電即可 :



我家的網路是從社區網路接進來, 再經過一個無線 IP 分享器, 因此 W5100 會經 DHCP 獲得一個區網 IP, 要如何得知分配給 W5100 的 IP 呢? 我參考下列文章中的程式稍加修改 :

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

#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() { } //無限迴圈

直接上傳到 UNO 執行, 並打開串列埠監控視窗 :


這樣就可以得知 DHCP 分配了 192.168.2.114 給 W5100 網卡 :


連線到 IP 分享器的管理介面也可以看到, 我用的是 EDIMAX 的分享器, 連線到其網址 http://192.168.2.1 如下 :


勾選最底下的 "開啟已配置的IP使用列表" 即列出現用中的 IP, 找到我們隨便給 W5100 設的 MAC 00:aa:bb:cc:de:02, 其 IP 為 192.168.2.114 :


初步測試顯示此網卡是 OK 的.

參考 :

finding the Mac address from Ethernet shield (W5100)
# http://goods.ruten.com.tw/item/qa_full?21105315794952&page=2


6 則留言 :

匿名 提到...

我是用mega2560的板子,序列埠顯示Cannot get IP Address!
那我該如何才能取得板子的IP位置

小狐狸事務所 提到...

這表示連線失敗, 是否 MAC 位址與網域內其他設備沖到? 改用別的 MAC 看看 (若乙太擴充板上面有標 MAC 的話就要輸入該 MAC).

Unknown 提到...

tony:晚安
我看了你很多文章內容,覺得寫的很好,為此請問一下Arduino+W5100 相關程式請教!!
我想透過Arduino去執行TCPIP 程式撰寫,但試了很多都無法使用,為此詢問你:
我程式要透過網路IP:169.254.224.116 Port:10000 且購過字 D+CR 指定船過去,即可
接收輸出的16bits ASCII字串,請問這要如何編寫,是否有可指導嗎?! 謝謝大師

小狐狸事務所 提到...

您好, 感謝您留言, 我曾想買 w5100, 但因價格較貴所以沒有用這塊, 改為使用 ESP8266, 便宜又好用, 寫 TCP/IP 或 HTTP 都很方便, 可參考我之前寫過的 ESP8266 系列測試紀錄.

隔夜炒飯 提到...

您好,想請教您關於Arduino乙太網擴充卡的問題:
我有多個電話孔共用同一個電話號碼,其中有一個沒有用到
想利用這個空位做一個有線電話來電顯示的LCD小玩具
目前好像有現成的解碼卡像是HT9032D能夠使用
但找尋過程看到您的網站受益很多

因為我對通訊一竅不通
請問像您這樣的高手
有用過乙太接口轉接讀取過電話線路的訊號並用解碼器成功解碼嗎
或是您有其他建議的方法呢 十分感謝您

小狐狸事務所 提到...

電話來電顯示需要解碼 FSK 或 DTMF 調變訊號, FSK 可用 HT9032 晶片, DTMF 可用 HT9170 或 MT8880 晶片, 但我沒有這方面實作經驗, HT9032 可參考 :
https://blog.csdn.net/JacksonLiang/article/details/4832597
MT8880 可參考 :
https://forum.arduino.cc/index.php?topic=146131.0