Icono del sitio AranaCorp

Conecte Arduino al red con el Ethernet Shield W5100

La conexión de un microcontrolador a internet es posible gracias al uso de un W5100 Ethernet Shield. La base de la creación de objetos conectados es hacer que se comuniquen con su entorno a través de una red como la red WiFi. La comunicación a través de la red Ethernet es muy práctica cuando desea conectar un dispositivo a la red Wifi por cable.

 Para una conexión inalámbrica, debes usar un escudo Wifi u otra placa con un chip Wifi incorporado.

Hardware

 

Principio de funcionamiento de un Shield Ethernet W5100

La comunicación utiliza la red ethernet que se puede conectar a la red Wifi. Para poder acceder a la placa Arduino sin tener que conectarla al enrutador de Internet, es necesario crear un puente entre la conexión wifi y la conexión Ethernet en su computadora. Para hacer esto, debes:

En Windows, en la terminal de comandos, escriba «arp -a» para ver las direcciones IP utilizadas en la red.

El W5100 Ethernet Shield usa el Microchip W5100 como un controlador Ethernet.

 

Diagrama

El W5100 Ethernet Shield es compatible con los microcontroladores Arduino UNO y Mega. El chip W5100 y la tarjeta SD usan el bus SPI para comunicarse con la tarjeta Arduino. El pin 10 se usa para seleccionar el controlador de ethernet W5100, el pin 9 como RESET para el W5100 y el pin 4 para seleccionar el módulo de la tarjeta SD.

En resumen, los pines utilizados son:

 

Código para usar un Shield Ethernet W5100

Para comunicarnos en la red, necesitamos usar un protocolo especial. Este protocolo está integrado en todas las bibliotecas relacionadas con la comunicación WiFi:

//Libraries
#include <Ethernet.h>//https://github.com/CisecoPlc/Arduino-W5100-W5200/tree/master/Ethernet

//Parameters
String request ;
unsigned long refreshCounter  = 0;
byte mac [6] = {0x54, 0x34, 0x41, 0x30, 0x30, 0x31};

//Objects
EthernetServer server(80);
IPAddress ip(192, 168, 1, 179);
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 5 seconds."));
    delay(5000);
    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('GET') >= 0) {
    {
      webpage(client);
      client.stop();
    }
  }
  if (request.indexOf("/dig2on") > 0) {
    {
      digitalWrite(2, HIGH);
    }
  }
  if (request.indexOf("/dig2off") > 0) {
    {
      digitalWrite(2, LOW);
    }
  }
}

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.print("<center><p style='color:white;'>");
  client.print(F("Page refresh number : "));
  client.print(refreshCounter); //current refresh count
  client.print("</p></center><br>");
  client.print(F("<h2 style='color:green;'>Arduino Inputs</h2>"));
  client.print("<p style='color:white;'>");
  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>"));

  //digital output
  client.print(F("<h2 style='color:green;'>Arduino Outputs</h2>"));
  client.print(F("<p style='color:white;'>"));
  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;
}

 

Resultado

Podemos ver que el W5100 Ethernet Shield se inicializa correctamente. Cuando ingresa la dirección IP en la barra de direcciones de su navegador, se muestra la página web descrita en la función de página web.

Una vez que se carga la página, los valores de las entradas analógicas varían con cada actualización y el estado del pin 2 se puede cambiar presionando los botones correspondientes.

 

Aplicaciones

 

Fuentes

Salir de la versión móvil