Hace tiempo que publiqué una pequeña introducción a mi trabajo con los módulos Xport de Lantronix. Debido a la falta de tiempo entre viajes estudios y trabajo no he podido seguir publicando mis avances. Ahora por fin estamos en las vacaciones de Navidad y puesto que tengo que preparar la documentación para entregar el proyecto, voy a refrescarme a mi mismo la memoria subiendo mas información por aquí.
Como ya hice una primer acercamiento en la anterior entrada: “Empezando con Xport”. Ahora me voy a centrar más en el uso que creo que me es mas interesante, servir una página web desde nuestro proyecto permitiendo interactuar con el desde una red LAN o desde Internet.
Para empezar lo primero que haremos es configurar el Xport con los siguientes parametros:
*** Channel 1
Baudrate 9600, I/F Mode 4C, Flow 00
Port 00080
Connect Mode : C4
Send ‘+++’ in Modem Mode enabled
Show IP addr after ‘RING’ enabled
Auto increment source port disabled
Remote IP Adr: — none —, Port 00000
Disconn Mode : 80 Disconn Time: 00:03
Flush Mode : 77
Para ello o bien podemos usar la utilidad de Lantronix Device Installer o conectarnos por Telnet al puerto 9999. Si usamos la utilidad de Lantronix tenemos la ventaja de que automáticamente nos buscará algún Xport conectado a nuestra red.
Una vez configurado esto el siguiente paso es escuchar por el puerto serie las peticiones que nos harán para ello he usado la librería de Arduino con lo que se simplifica el control a tres bloques:
Bloque uno: Definición de las posibles respuestas, en el usaremos la memoria de código para grabar el código html para las respuestas. Quizás fuera conveniente usar una memoria eeprom externa o na tarjeta SD pero para no complicar la cosa seguí usando este método.
const char http_404header[] PROGMEM = “HTTP/1.1 404 Not Found\nServer: arduino\nContent-Type: text/html\n\n<html><head><title>404</title></head><body><h1>404: Página no encontrada</h1></body>”;
const char http_header[] PROGMEM = “HTTP/1.0 200 OK\nServer: arduino\nContent-Type: text/html\n\n”;
const char html_header[] PROGMEM = “<html><head><title>Servidor web con Arduino</title><link rel=\”shortcut icon\” href=\”http://www.roboops.es/wp-content/uploads/w3/favicon.ico\” type=\”image/x-icon\” /></head><body>”;
const char forma[] PROGMEM = “<p><h1>Probando Arduino como WebServer</h1></p><img src=\”http:/”;
const char formb[] PROGMEM = “/www.roboops.es/wp-content/uploads/2008/10/10102008R.JPG\”>”;
const char formc[] PROGMEM = “<p>Esta página está servida por un ATmega168 con un Xport.</p></body>”;
const char formd[] PROGMEM = “<p>Bienvenido a la home</p></body>”;
Bloque dos: El siguiente bloque es el que se encarga de interpretar las peticiones.
read = xport.readline_timeout(linebuffer, 128, 200);
if (read == 0) // Se ha alcanzado el tiempo limite
return 0;
if (read) // Hay algo!
Serial.println(linebuffer); //Lo mostramos por el segundo puerto serie (para pruebas)
if (strstr(linebuffer, “GET / “)) {
return 200; // Si comienza con una peticion es correcto
}
if (strstr(linebuffer, “GET /?”)) {
return 200; // Si es un CGI valido es correcto
}
if (strstr(linebuffer, “GET /home”)) {
return 201; // Si es la pagina home es correcto
}
if(strstr(linebuffer, “GET “)) {
return 404; // si es cualquier otra cosa, lo siento pero no la tenemos.
}
Bloque tres: Respuesta. Se definen las diferentes respuestas para las diferentes peticiones.
void respond(){
uint8_t temp;
xport.flush(50); // vaciamos el buffer
xport.ROM_print(http_header); // mandamos la cabecera http
xport.ROM_print(html_header); // mandamos la cabecera html
xport.ROM_print(forma); /comenzamos a enviar la página
xport.ROM_print(formb);
xport.ROM_print(formc);
xport.flush(255); // vaciamos el buffer
xport.disconnect(); // nos deconectamos
}
Ya tenemos nuestra web servida por el Xport ahora el siguiente paso será hacer una web interactiva mediante la que recibamos y enviaemos datos del usuario.
Entradas relaccionados: