• Autor de la entrada:
  • Categoría de la entrada:Arduino

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.


Ethernet Shield con web en servidor | RincónIngenieril


Así ya sabes, comparte si te ha gustado y nosotros nos vemos la semana que viene en un nuevo tutorial.

Enrique Gómez

Ingeniero Electrónico Industrial y Automático, amante de la comunicación audiovisual y de la divulgación ingenieril y científica. Puedes saber más sobre mí y sobre mis trabajos en enriquegomez.me