miércoles, 30 de mayo de 2018

Ethernet shield con arduino

Buenas a todos, en este mi primer post les mostrare como conectar su arduino al Wifi para poder controlar lo que son los focos o servomotores con el uso de Internet.

Los materiales a ocupar son:

  1. Un Arduino Uno o Mega2560
  2. Un Ethernet Shield w5100
  3. Cables Macho-Macho y Macho-Hembra
  4. Cable Ethernet
  5. 1 servomotor
  6. Relevadores de 1, 2 o 4 canales
Lo primero que debemos de saber es que el Ethernet Shield
Una vez obtenido los materiales procederemos al código:
#include <SPI.h>
#include <Ethernet.h>
#include <Servo.h> 
                                    Estas son las librerías que se van a utilizar para el IDE de Arduino

Servo microservo; 
int pos = 0; 
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };   //Direccion Fisica MAC
byte ip[] = { 192, 168, 1, 91 };                       // IP Local que usted debe configurar 
byte gateway[] = { 192, 168, 1, 254 };                   // Puerta de enlace
byte subnet[] = { 255, 255, 255, 0 };                  //Mascara de Sub Red
EthernetServer server(80);                             //Se usa el puerto 80 del servidor     
String readString;
                                   En este caso todo lo dejaremos igual excepto el byte gateway, ese debemos de cambiarlos a una red a la cual no este ocupado, nos vamos al buscador de Windows y escribimos "cmd" y nos aparecerá la siguiente ventana

y para identificar nuestra red debemos escribir "ipconfig" y nos aparecerá lo siguiente



Y debemos verificar lo que es el adaptador de LAN inalámbrica Wifi y nos brinda una serie de números pero el que más nos interesa es la Dirección IPv4, tomamos los tres primeros números y el ultimo lo cambiamos verificando que se utilizado por las demás computadoras o aparatos conectados a Wifi

void setup() {

  Serial.begin(9600);  // Inicializa el puerto serial 
   while (!Serial) {   // Espera a que el puerto serial sea conectado, Solo necesario para el Leonardo
    ; 
  }
  pinMode(2,OUTPUT);        // Se configura como salidas los puertos del 2 al 6
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  microservo.attach(7);  // Se configura como Servo el Puerto 7

  Ethernet.begin(mac, ip, gateway, subnet); // Inicializa la conexion Ethernet y el servidor
  server.begin();
  Serial.print("El Servidor es: ");
  Serial.println(Ethernet.localIP());    // Imprime la direccion IP Local
}


void loop() {
  // Crea una conexion Cliente
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {   
      if (client.available()) {
        char c = client.read();
     
        //Lee caracter por caracter HTTP
        if (readString.length() < 100) {
          //Almacena los caracteres a un String
          readString += c;
          
         }

         // si el requerimiento HTTP fue finalizado
         if (c == '\n') {          
           Serial.println(readString); //Imprime en el monitor serial
     
           client.println("HTTP/1.1 200 OK");           //envia una nueva pagina en codigo HTML
           client.println("Content-Type: text/html");
           client.println();     
           client.println("<HTML>");
           client.println("<HEAD>");
           client.println("<TITLE>Ethernet Arduino</TITLE>");
           client.println("</HEAD>");
           client.println("<BODY>");
           client.println("<hr />");
           client.println("<H1>Arduino Ethernet Shield</H1>");
           client.println("<br />");  
           client.println("<H2>Control on/off 2-6  Servo 7</H2>");
           client.println("<br />");  
           
           client.println("<a href=\"/?button2on\"\"> Apagar Pin2</a> ");           // construye en la pagina cada uno de los botones
           client.println(" | | | ");
           client.println("<a href=\"/?button2off\"\"> Encender Pin2</a><br /> ");   
           client.println("<br />");
           
           client.println("<br />"); 
           client.println("<a href=\"/?button3on\"\"> Apagar Pin3</a> ");
           client.println(" | | | ");
           client.println("<a href=\"/?button3off\"\"> Encender Pin3</a><br /> ");   
           client.println("<br />");
           
           client.println("<br />"); 
           client.println("<a href=\"/?button4on\"\"> Apagar Pin4</a> ");
           client.println(" | | | ");
           client.println("<a href=\"/?button4off\"\"> Encender Pin4</a><br /> ");   
           client.println("<br />");
           
           client.println("<br />");  
           client.println("<a href=\"/?button5on\"\"> Apagar Pin5</a>");
           client.println(" | | | ");
           client.println("<a href=\"/?button5off\"\"> Encender Pin5</a><br />");   
           client.println("<br />");
           
           client.println("<br />"); 
           client.println("<a href=\"/?button6on\"\"> Apagar Pin6</a> ");
           client.println(" | | | ");
           client.println("<a href=\"/?button6off\"\"> Encender Pin6</a><br /> ");   
           client.println("<br />");
           
           
           client.println("<br />"); 
           client.println("<a href=\"/?left\"\">Girar  Izq Pin7</a>");
           client.println(" | | | ");
           client.println("<a href=\"/?right\"\">Girar Der Pin7</a><br />"); 
           client.println("<hr />");
           client.println("<p>Pagina Ethernet</p>");  
           client.println("<br />"); 
           client.println("</BODY>");
           client.println("</HTML>");
     
           delay(1);
           //detiene el cliente servidor
           client.stop();
           
           //control del arduino si un boton es presionado
                   
           if (readString.indexOf("?button2on") >0){
               digitalWrite(2, HIGH);
           }
           if (readString.indexOf("?button2off") >0){
               digitalWrite(2, LOW);
           }
           
           if (readString.indexOf("?button3on") >0){
               digitalWrite(3, HIGH);
           }
           if (readString.indexOf("?button3off") >0){
               digitalWrite(3, LOW);
           }
           
           
           if (readString.indexOf("?button4on") >0){
               digitalWrite(4, HIGH);
           }
           if (readString.indexOf("?button4off") >0){
               digitalWrite(4, LOW);
           }
           
            if (readString.indexOf("?button5on") >0){
               digitalWrite(5, HIGH);
           }
           if (readString.indexOf("?button5off") >0){
               digitalWrite(5, LOW);
           }
           
           
           if (readString.indexOf("?button6on") >0){
               digitalWrite(6, HIGH);
           }
           if (readString.indexOf("?button6off") >0){
               digitalWrite(6, LOW);
           }
           
           
           if (readString.indexOf("?left") >0){
                for(pos = 0; pos < 180; pos += 3)  // Giro de 0 a 180 grados 
                {                                  
                  microservo.write(pos);             
                  delay(15);                       // Espera 15 ms para que el servo llege a la posicion 
                } 
           }
           if (readString.indexOf("?right") >0){
                for(pos = 180; pos>=1; pos-=3)     //Giro de 180 a 0 grados 
                {                                
                  microservo.write(pos);              
                  delay(15);                       // Espera 15 ms para que el servo llege a la posicion 
                } 
           }
            // Limpia el String(Cadena de Caracteres para una nueva lectura
            readString="";  
           
         }
       }
    }
}
}

En el caso del Ethernet Shield los pines 10, 11, 12 y 13 no los podremos utilizar como pines de salida porque esos pines son ocupados por el arduino.

Estas son las partes del arduino:

  • ON: indica que la placa y la shield están alimentadas
  • LINK: indica la presencia de un enlace de red y parpadea cuando la shield envía o recibe datos
  • 100M: indica la presencia de una conexión de red de 100 Mb/s (de forma opuesta a una de 10Mb/s)
  • RX: parpadea cuando el shield recibe datos
  • TX: parpadea cuando el shield envía datos
En otro post les mostrare el vídeo de muestra del Ethernet Shield encendiendo los relevadores