O Ethernet Shield W5100 possibilita conectar um microcontrolador à Internet. A base da criação de objetos conectados é fazê-los comunicar com o seu entorno através de redes como a rede Wifi.
A comunicação via Ethernet é muito prática quando se deseja conectar um dispositivo ao WiFi utilizando um cabo.
Para uma conexão Wifi sem cabo, opte por um Shield WiFi ou outro tipo de placa.
Material
- Computador
- Arduino UNO
- Cabo USB A Macho/B Macho
- Cabo Ethernet RJ45
- Ethernet Shield W5100
Como funciona o Ethernet Shield W5100
A comunicação utiliza a rede Ethernet que pode se ligar à rede WiFi. Para acessar a placa Arduino sem precisar ligá-la ao roteador da Internet, é preciso criar uma ponte entre as conexões WiFi e Ethernet no computador. Para isso, é necessário:
- Ir para a “Central de Redes e Compartilhamento”
- Ir para “Alterar configurações da placa”.
- Selecionar Ethernet e Wifi /(Internet source) e clicar com o botão direito do mouse.
- Clicar em “Criar ponte”.
No Windows, no terminal de comando, digite “arp -a” para ver os endereços IP utilizados na rede.
O Ethernet Shield W5100 utiliza o Microchip W5100 como controlador Ethernet.

Esquema
O Ethernet Shield W5100 é compatível com os microcontroladores Arduino UNO e Mega. O chip W5100 e o cartão SD utilizam o barramento SPI para comunicar com a placa Arduino. O pino 10 é utilizado para selecionar o controlador Ethernet W5100; o pino 9, como RESET para o W5100; e o pino 4, para selecionar o módulo de cartão SD.
Em resumo, os pinos utilizados são:
- 4 para seleção do cartão SD (SD_CS)
- 9 para dar reset no microchip W5100 (W5100_RST)
- 10 para selecionar o microchip W5100 (W5100_CS)
- Barramento SPI: pinos 11, 12 e 13 numa placa Arduino UNO/Duelmilanove. Pinos 50, 51 e 52 no Arduino Mega.
Código para gestão do Ethernet Shield W5100
Para comunicar na rede, precisamos de um protocolo específico. Este protocolo está integrado em todas as bibliotecas relacionadas com a comunicação WiFi. É preciso:
- conectar o módulo WiFi ou Ethernet à rede;
- definir um servidor server;
- definir um cliente client.
//Libraries
#include <Ethernet.h>//https://github.com/CisecoPlc/Arduino-W5100-W5200/tree/master/Ethernet
//Parameters
String request ;
unsigned long refreshCounter = 0;
IPAddress ip(192, 168, 1, 179) ;
byte mac [6] = {0x54, 0x34, 0x41, 0x30, 0x30, 0x31};
//Objects
EthernetServer server(80);
EthernetClient client;
void setup() {
//Init Serial USB
Serial.begin(9600);
Serial.println(F("Initialize System"));
//Init W5100
Ethernet.begin(mac, ip);
while (!Ethernet.begin(mac)) {
Serial.println(F("failed. Retrying in 1 seconds."));
delay(1000);
Serial.print(F("Starting W5100..."));
}
pinMode(2, OUTPUT);
server.begin();
Serial.println(F("W5100 initialized"));
Serial.print(F("IP Address: "));
Serial.println(Ethernet.localIP());
}
void loop() {
client = server.available();
clientRequest();
handleRequest();
}
void clientRequest( ) { /* function clientRequest */
////Get client request
if (!client) {
return;
}
// Wait until the client sends some data
while (!client.available()) {
delay(1);
}
request = client.readStringUntil('\r'); // Read the first line of the request
Serial.println(request);
client.flush();
}
void handleRequest( ) { /* function handleRequest */
////Handle web client request
if (request.indexOf("/dig2on") > 0) {
digitalWrite(2, HIGH);
}
if (request.indexOf("/dig2off") > 0) {
digitalWrite(2, LOW);
}
if (request.indexOf("GET") >= 0) {
webpage(client);
client.stop();
}
}
void webpage(EthernetClient client) { /* function webpage */
////Send webpage to client
//output HTML data header
client.println(F("HTTP/1.1 200 OK"));
client.println(F("Content-Type: text/html"));
client.println();
//header
client.print(F("<!DOCTYPE HTML><html><head><title>AranaCorp</title>"));
client.print(F("<meta http-equiv='content-type' content='text/html; charset=UTF-8'>"));
//meta-refresh page every x seconds
client.print(F("<meta http-equiv='refresh' content='2'>"));
client.print(F("</head><body bgcolor='black'><br>"));
client.print(F("<hr/><hr>"));
client.print(F("<h1 style='color : #3AAA35;'><center> AranaCorp - Arduino Web Controller </center></h1>"));
client.print(F("<hr/><hr>"));
client.println("<center><p style='color:white;'>");
client.print(F("Page refresh number: "));
client.print(refreshCounter); //current refresh count
client.println("</p></center><br>");
client.print(F("<h2 style='color:green;'>Arduino Inputs</h2>"));
client.println("<p style='color:white;'>");
client.print(F("<br><br>"));
client.print("<br><br>");
//output analog input pin
for (int i = 0; i < 6; i++) {
client.print("<b>Input A");
client.print(i);
client.print(" : </b>");
client.print(analogRead(14 + i)); //A0=14, A1=15 ,etc.
client.print(F("<br>"));
}
client.print(F("</p><br>"));
client.print(F("<h2 style='color:green;'>Arduino Outputs</h2>"));
client.print(F("<p style='color:white;'>"));
//digital output
client.print(F("<br><br>"));
client.print(F("<b>Digital output Pin 2 : </b>"));
client.print("<input value=" + String(digitalRead(2)) + " readonly></input>");
client.print(F("<a href='/dig2on'><button>Turn On </button></a>"));
client.print(F("<a href='/dig2off'><button>Turn Off </button></a><br />"));
client.print(F("</p><br>"));
//file end
client.print(F("<br></body></html>"));
refreshCounter += 1;
delay(1);
}
Resultado
Verificamos que o Ethernet Shield W5100 é inicializado corretamente. Ao introduzirmos o endereço IP na barra de endereço do navegador, a página web descrita na função webpage é exibida. Uma vez carregada a página, os valores das entradas analógicas mudam a cada atualização e o estado do pino 2 pode ser modificado por meio dos botões correspondentes.


Aplicações
- Controlar o Arduino com uma interface web
Fontes
- https://www.w3schools.com/html/html_editors.asp
- Tutoriais HTML Mozilla
- https://github.com/CisecoPlc/Arduino-W5100-W5200/tree/master/Ethernet
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie