No me preguntes cuando ni como, pero en ocasiones es necesario que la página web con la que controlamos un sistema basado en ethernet shield o wifi se encuentre en un servidor web en lugar de en un microcontrolador. Es por esto por lo que montamos la web en servidor para Arduino ethernet. Esta decisión la podemos tomar nosotros o puede ser una imposición técnica debida por ejemplo a que necesitemos jugar con otros tipos de código como por ejemplo PHP, Python o vete a saber que cosa del demonio de la informática, también puede ser simplemente que necesitamos aligerar el procesado de datos en el microcontrolador y para ello necesitamos repartir las tareas.
Realmente llevar a cabo esto no es tan tedioso como en principio podemos pensar, solo tenemos que, como siempre, analizar el código que tenemos y adaptarlo extrayendo la parte del HTML y generando un archivo, que podemos llamar Control.html, con el código. En este caso vamos a reutilizar un código de un tutorial anterior cobre ethernet y reles pero con algunos cambios.
Para empezar retiramos todo el código HTML que nos mostraba los enlaces y en su lugar vamos a colocar una etiqueta meta que realizará una redirección a la página de control que almacenaremos en nuestro servidor, te tal manera que cuando entremos al Arduino con su IP, realizará la acción que le estemos ordenando y después no llevara de vuelta a la página del servidor en la cual tenemos los enlaces y/o botones. El código quedará de la siguiente manera.
/* Ejemplo sobre uso de libreria ethernet para controlar un rele desde página web. */ #include <SPI.h> #include <Ethernet.h> //Ponemos la dirección MAC e IP que queremos que use nuestro Arduino para conectarse al Router byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192,168,1, 177); String readString; //Definimos que el puerto HTTP sera el 81 EthernetServer server2(81); //Variables de control int rele = 7; void setup() { //Iniciar la conexión de red y serie Ethernet.begin(mac, ip); server2.begin(); Serial.begin(9600); pinMode(rele,OUTPUT); } void loop() { // Esperamos que venga algún cliente web al puerto 81 EthernetClient cliente = server2.available(); if (cliente) { boolean currentLineIsBlank = true; while (cliente.connected()) { if (cliente.available()) { char c = cliente.read(); if (readString.length() < 100) { //Almacenar caracteres en un string readString += c; } //Si ha terminado la petición del cliente if (c == 'n') { if(readString.indexOf("?encender") > 0) { digitalWrite(rele,HIGH); } if(readString.indexOf("?apagar") > 0) { digitalWrite(rele,LOW); } //Enviamos la cabecera web cliente.println("HTTP/1.1 200 OK"); cliente.println("Content-Type: text/html"); cliente.println(); //Mostrqamos la web de control cliente.println("<html><head><meta http-equiv=\"Refresh\" content=\"1;url=http://localhost/control.html\"></head></body></html>"); break; } } } // Darle un respiro al navegador web para recibir los datos delay(1); //Limpiar String para proxima etición HTTP readString=""; //Cerrar conexión cliente.stop(); } }
Por otro lado el HTML simplemente lo extraemos del código y lo introducimos en un archivo con la clásica estructura HTML. Cuidado no te olvides de indicar el los enlaces cual es la IP de tu Arduino, en este caso es la 192.168.1.177.
<!DOCTYPE html> <html> <head> <title>Control</title> </head> <body> <center> <h2>Bienvenido al control de reles</h2> Clic en los enlace para encender o apagar: <a href='http://192.168.1.177?encender'>Encender</a> - <a href='http://192.168.1.177?apagar'>Apagar</a> </center> </body> </html>
Por último que menos que echarle un vistazo al vídeo.
Así ya sabes, comparte si te ha gustado y nosotros nos vemos la semana que viene en un nuevo tutorial.