Ethernet Shield(W5100) 是把 TCP/IP Protocols (TCP, UDP, ICMP, IPv4 ARP, IGMP, PPPoE, Ethernet) 直接燒至硬體電路上,只要使用 Ethernet Library 便可以輕易完成連至網際網路的動作。本實作使用副廠的 Arduino Ethernet Shield W5100 乙太網路擴充板,相容於原廠的乙太網路擴充板,價格相對便宜。
Ethernet Shield 擴充板在使用時就直接插在 Arduino UNO即可。
Ethernet Shield狀態指示燈 (LEDs)功能如下:
* PWR: 表示 Arduino 控制板和 Ethernet Shield 已經上電
* LINK: 網路指示燈,當燈號閃爍時代表正在傳送或接收資料
* FULLD: 代表網路連線是全雙工
* 100M: 表示網路是 100 MB/s (相對於 10 Mb/s)
* RX: 接收資料時閃爍
* TX: 傳送資料時閃爍
* COLL: 閃爍時代表網路上發生封包碰撞的情形 (network collisions are detected)
#include <SPI.h>
#include <Ethernet.h>
// 設定MAC地址
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// 設定IP地址
IPAddress ip(192, 168, 0, 97);
//設定DNS
//IPAddress dnServer(168, 95, 1, 1);
// 設定閘道
IPAddress gateway(192, 168, 0, 1);
// 設定遮罩
IPAddress subnet(255, 255, 255, 0);
// 初始化Ethernet程式庫,HTTP默認端口為80
EthernetServer server(80);
void setup() {
// 初始化串口通訊
Serial.begin(9600);
// 開始ethernet連接,並作為服務器初始化
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
Serial.print( "server is at " );
Serial.println(Ethernet.localIP());
}
void loop() {
// 監聽客戶端傳來的數據
EthernetClient client = server.available();
//如果有新連線請求
if (client) {
Serial.println( "new client" );
// 只要通訊連線中.....
while (client.connected()) {
//確認客戶端有發出請求
if (client.available()) {
char c = client.read();
Serial.write(c);
client.println( "HTTP/1.1 200 OK" );
client.println( "Content-Type: text/html" );
client.println( "Connection: close" );
client.println();
client.println( "<!DOCTYPE HTML>" );
client.println( "<html><head>" );
client.println( "<meta charset=\"utf-8\" />" );
client.println( "<title>Arduino 通訊</title>" );
client.println( "</head><body>" );
client.println( "<h1>通訊成功</h1>" );
client.println( "</body></html>" );
break ;
}
}
// 等待瀏覽器接收資料
delay(1);
// 斷開連接
client.stop();
Serial.println( "client disonnected" );
}
}
Ethernet.begin() 詳細用法請參考這裡。







