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() 詳細用法請參考這裡。