th ethernet arduinoEn este último tutorial, conectaremos nuestro Arduino a una red Ethernet, usaremos un Arduino Ethernet Shield (escudo) práctico y fácil de usar. De esta sencilla forma, podremos acceder a contenidos web como cliente, usar Arduino como servidor web para mostrar datos de sensores e infinidad de cosas que se os puedan ocurrir.

Haremos un sencillo ejemplo para familiarizarnos con la shield Ethernet. El objetivo será crear un servidor web en nuestro Arduino para mostrar datos con los que trabaja Arduino, en este caso veremos el tiempo que a trascurrido desde que se puso en marcha el microcontrolador.

Un servidor web no es más que un dispositivo que atiende peticiones de otro dispositivo cliente a través de una dirección IP, es decir, si nosotros accedemos a la IP de Arduino (proporcionada por la Ethernet Shield) mediante un navegador, estaremos solicitando una información, Arduino como servidor, nos servirá la información solicitada.

ethernet arduino 5

Solo necesitaremos nuestro Arduino (nosotros usaremos Arduino Mega), una tarjeta Ardunio Ethernet Shield, un cable Ethernet y el cable de porgamación USB.

arduino ethernet shield
Arduino Ethernet Shield.

ethernet arduino 7
Cable Ethernet.

ethernet arduino 8
Arduino Mega.

Código Arduino Ethernet Shield

#include <SPI.h>
#include <Ethernet.h>
 
// Configuración de direccion MAC e IP.
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);
 
// Inicia la libreria Ethernet server con el puerto 80 (por defecto el puerto HTTP).
EthernetServer server(80);
 
void setup() {
// Inicia el puerto serie.
Serial.begin(9600);
 
// Inicia la conexión Ethernet y el servidor.
Ethernet.begin(mac, ip);
server.begin();
Serial.print("IP local del servidor ");
Serial.println(Ethernet.localIP());
}
 
void loop() {
EthernetClient client = server.available(); // Escucha a los clientes entrantes.
    if (client) { // Si un cliente se conecta al servidor:
    Serial.println("Nuevo cliente");
    boolean currentLineIsBlank = true; // Marcador para enviar la respuesta desde el servidor.
        while (client.connected()) { // Repite mientas existe clientes conectados:
            if (client.available()) {
            char c = client.read();
            Serial.write(c); // Imprime por el puerto serie la petición del cliente (caracter a caracter)
                if (c == '\n' && currentLineIsBlank) { // Se envia la respuesta a una petición de un cliente cuando a finalizado la petición:
                // Respuesta:
                client.println("HTTP/1.1 200 OK"); // Enviar un encabezado de respuesta HTTP estándar
                client.println("Content-Type: text/html");
                client.println("Connection: close"); // Se cerrará la conexiós despues de enviar la respuesta.
                client.println("Refresh: 5"); // Refrescar automáticamente la página después de 5 segundos.
                client.println();
                client.println("<!DOCTYPE HTML>"); // Tipo de documento.
                client.println("<html>"); // Etiqueta html inicio del documento. 
                client.print("Hola soy Arduino!! - ");
                client.print(millis()); // Tiempo de funcionamiento en ms.
                client.print("ms encendido. ");
                client.println("<br />"); // Etiqueta html salto de linea. 
                client.println("</html>"); // Etiqueta html fin del documento.
                break;
                }
                if (c == '\n') { // Si el caracter es un salto de linea:
                currentLineIsBlank = true; // La petición a terminado, se respondera a dicha peticón en el sigueitne ciclo.
                } 
                else if (c != '\r') { // Si el caracter no es un retorno de carro (la petición no a terminado).
                currentLineIsBlank = false; // Seguimos escuchando la petición.
                }
           }
       }
    delay(1); // Espera para dar tiempo al navegador a recivir los datos.
    client.stop(); // Cierra la conexión.
    Serial.println("Cliente desconectado");
    Serial.println();
    }
}

Aunque en el código existen comentarios de las partes más importantes, hay que tener en cuenta algunas cuestiones:

  • byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    Es la configuración del identificador único MAC del adaptador de red (Arduino Ethernet Shield), este debe ser único en la red. Aseguraos de que no existe otro dispositivo con esta misma dirección.

  • IPAddress ip(192,168,1,177);
    Es la IP que Arduino tomará como servidor a la cual tendremos que acceder para ver los datos. Debe estar dentro del rango de red para poder ser visible. Intenta usar una IP lo más cercana posible a la IP del PC con el que trabajáis.

  • #include <Ethernet.h>
    Librería para usar la shield Ethernet (incluida en la IDE de Arduino).

Este código imprime información a través de dos medios. Una a través del puerto serie y otra como servidor a través del navegador. Por esto, cuando existe un cliente solicitando información, primero imprime (carácter a carácter) la información que el cliente solicita a través del puerto serie y luego atiende la petición imprimiendo los datos en el navegador.

ethernet arduino 9
Conectaremos la Shield sobre Arduino.

ethernet arduino 11
Y conectaremos el cable USB y Ethernet.

ethernet arduino 1
Una vez cargado el código en Arduino, si todo esta correcto, debe aparecer la IP del servidor en el monitor serie.

ethernet arduino 2
Accederemos mediante un navegador a la IP del ahora servidor web Arduino.

ethernet arduino 3
Si todo está correcto, aparecerá un mensaje como el de la foto, junto al tiempo trascurrido desde que se encendió Arduino en milisegundo. Esta información se refrescará cada 5 segundos.

ethernet arduino 4
En el puerto serie podremos ver las peticiones del cliente. El simple hecho de acceder a la dirección IP de Arduino ya es una petición.

sello garantizado

Copyright © 2017 TuElectronica.es. All Rights Reserved.