Site icon AranaCorp

Conectar o Arduino à Internet com um Ethernet Shield W5100

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

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:

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:

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:

//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

Fontes

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

Exit mobile version