Cuantos habéis soñado con poder tener en un mismo Arduino dos o tres páginas web corriendo a la vez, esto realmente es un mundo de posibilidades, el ejemplo más típico es montar dos páginas, una para control y otra para administración, podemos preparar la de control con los botones, enlaces y funciones que permitan que un usuario sin conocimientos técnicos gestione la máquina/instalación y montar la página de administración con las funciones que solo un técnico puede modificar (por ejemplo podrían ser funciones de calibración, de depuración, etc.)
Si analizamos los códigos que tenemos de otros tutoriales, nos vamos a dar cuenta que siempre tenemos una línea que es la clave de este nuevo rompecabezas «» puesto que esta nos permite definir el «servidor» en Arduino y lo que es aun más importante definir el puerto en el que vamos a trabajar.
Una vez que sabemos esto solo nos queda usar la mejor función desarrollada en la historia de la informática el «CopyPaste», es decir vamos a copiar y a pegar el código duplicando nuestro servidor y abriendo dos puertos distintos.
En el código de ejemplo que vemos a continuación mezclamos las webs de dos tutoriales anteriores en los que mostrábamos la temperatura y controlábamos un relé usando una página web, por lo que te recomiendo que eches un vistazo a los tutoriales anteriores: control de temperatura y control de relés
Vídeo explicativo
El código que usamos
/* Ejemplo sobre uso de libreria ethernet para crear dos páginas 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 80 EthernetServer server(80); EthernetServer server2(81); //Variables de control int rele = 7; void setup() { //Iniciar la conexión de red y serie Ethernet.begin(mac, ip); server.begin(); server2.begin(); Serial.begin(9600); pinMode(rele,OUTPUT); } void loop() { //Leemos el valor analógico float temperatura = analogRead(0); //Calculamos la temperatura temperatura = ((5.0*temperatura*1000.0/1024.0)-500)/10; //Imprimimos la temperatura usando el puerto serie Serial.println(temperatura); delay(1000); // Esperamos que venga algún cliente web al puerto 80 EthernetClient client = server.available(); if (client) { boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); //Si ha terminado la petición del cliente if (c == 'n' && currentLineIsBlank) { //Enviamos la cabecera web client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); //Mostrqamos la temperatura client.print("La temperatura es "); client.print(temperatura); client.println("<br />"); break; } if (c == 'n') { currentLineIsBlank = true; } else if (c != 'r') { currentLineIsBlank = false; } } } // Darle un respiro al navegador web para recibir los datos delay(1); //Cerrar conexión client.stop(); } //Cerrar sesión en puerto 80 // 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(" <center> <h2>Bienvenido al control de reles</h2> <br> Clic en los enlace para encender o apagar: <br> <a href='./?encender'>Encender</a> - <a href='./?apagar'>Apagar</a> </center>"); cliente.println("<br />"); 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(); } }