Archivo de la categoría: Diario de un CFGS

Xport – Trabajando como servidor Web

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í.

Placa de desarrollo.

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.

Primera semana.

Volviendo a lo que va a ser habitual empiezo ya mi segundo año de C.F.G.S. Este año va a ser diferente para mi en muchos aspectos: El "curso" Acaba en Mayo, pero seguimos hasta Junio, con prácticas laborales y la realización de un Proyecto Integrado, al acabar debería estar cualificado para trabajar en cualquier empresa de electrónica y lo "peor" de todo el año que viene podré entrar en la Universidad. Aparte he realizado un cambio que espero traiga buenas recompensas, he pasado a usar en la medida de lo posible linux para la clase. He configurado wine para los programas que usamos en clase y no están en linux, por el momento BASCOM AVR y PROTEUS. También nos han permitido instalar linux en varios de los ordenadores fijos del taller. De momento Ubuntu 8.04, que por cierto nunca lo habia visto con soporte total de la grafica (mi portatil se ve "bien" gracias a la alineacion de 6 cuerpos celestes, sino estaría en 800x600) me ha parecido sorprendente, trabaja super rapido con unas opciones visuales geniales... he estado 5 minutos abriendo y cerrando ventanas para ver los efectos... Las asignaturas son las siguientes: Sigue leyendo

Electrónica digital

Entrenador

Hoy os voy a presentar mi amigo 41, no es mas que el entrenador que usamos en la asignatura de electrónica Digital. Nunca he subido nada de esta asignatura pero tiene su explicación, todos los montajes que estamos haciendo los montamos sobre el entrenador de forma que cuando acabamos los desmontamos y pasamos a montar otra cosa. Como veis es mas bien simple, una tira de leds unos cuantos interruptores con antirebote, una alimentación a 5v y un generador de onda cuadrada. las conexiones son simples, dos pines en cada pin del circuito integrado, 4 isletas de 4 pines a cada extremo del circuito, 2 pines por cada led, 4 pines por interruptor (dos y dos invertidos), 4 pines del generador de onda (dos con la onda y dos con la onda invertida), dos bornas para sacar 5v y un interruptor de encendido con su led. En el hemos montado varios ejercicios, comprobaciones de puertas, circuitos conbinacionales, sumadores, restadores, hemos probado una ALU y ahora estamos con los flips-flops. 😀 Me despido con una foto de mi puestecito de trabajo.

Mi puesto de trabajo.