Etiquetas: ,

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.

Hardware

  • Computadora
  • ArduinoUNO
  • Cable USB A macho / B macho
  • Ethernet cable RJ45
  • Ethernet Shield W5100

Principio de funcionamiento

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:

  • Vaya al Centro de redes y recursos compartidos
  • Vaya a «Cambiar la configuración de la tarjeta»
  • Seleccione Ethernet y Wifi / (fuente de internet) y haga clic derecho
  • Haga clic en «Crear puente»

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:

  • 4 para selección de tarjeta SD (SD_CS)
  • 9 para restablecer el microchip W5100 (W5100_RST)
  • 10 para la selección de microchips W5100 (W5100_CS)
  • el bus SPI: pines 11,12,13 en una placa Arduino UNO / Duelmilanove. Pines 50, 51 y 52 para el Mega.

Código

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

  • El módulo WiFi o Ethernet debe estar conectado a la red
  • definir un servidor server
  • definir un 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

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

  • Use una interfaz web para controlar su Arduino

Fuentes