fbpixel
Etiquetas:,
0
(0)

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

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?