fbpixel
Etiquetas: ,

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.

arduino-ethernet-shield-w5100 Conectar o Arduino à Internet com um Ethernet Shield W5100

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.

arduino-ethernet-request-w5100-monitor Conectar o Arduino à Internet com um Ethernet Shield W5100
arduino-ethernet-w5100-web-monitor-controller Conectar o Arduino à Internet com um Ethernet Shield W5100

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