Autor Tema: Servidor Web con PIC16F84 + (EM100 O EM202 de Tibbo)  (Leído 18875 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Manofwar

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 156
Servidor Web con PIC16F84 + (EM100 O EM202 de Tibbo)
« en: 27 de Marzo de 2006, 13:42:00 »
Os dejo los archivos aquí de un micro servidor web que he montado con un 16f84 y el em100 de Tibbo (se puede sustituir por el em202), por si le sirve a alguien como punto de partida para realizar algo más serio.

Debido al poco espacio del 16f84 sólo he podido albergar una página en flash (plano.swf) donde he dibujado algo parecido al plano de una vivienda y unos símbolos de bombillas o focos con el estado de 4 registros del PIC. Al pulsar sobre alguno de estos símbolos cambia el valor correspondiente en uno de los registros del pic y actualiza los estados de las bombillas en el navegador.

En el archivo para Proteus veréis el pic y el puerto serie solamente, esto es así porque el EM100 una vez configurado se comporta como un puerto serie.

Saludos desde Almería

« Última modificación: 20 de Febrero de 2008, 11:25:57 por Manofwar »
Saludos desde Almería, España

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5415
    • Picmania by Redraven
RE: Servidor Web con PIC16F84 + (EM100 O EM202 de Tibbo)
« Respuesta #1 en: 28 de Marzo de 2006, 01:49:00 »
Olé Manofwar.

Me lanzo a tu código como un chihuahua a una rodaja de mortadela .... ja ja ja Muchas risas Muchas risas Muchas risas

Estuve viendo las cabeceras HTML para ponerselas a mi invento ... pero como soy un
RAM-ROM Depredator no me cabían .... ja ja ja Muchas risas Muchas risas Muchas risas

Bién por lo amigos de este foro .... Rebotado Rebotado Rebotado

Ya te pediré ampliación de información ....





Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Manofwar

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 156
RE: Servidor Web con PIC16F84 + (EM100 O EM202 de Tibbo)
« Respuesta #2 en: 28 de Marzo de 2006, 03:19:00 »
Me alegro que te haya servido de algo el código. Si tienes alguna duda con el protocolo HTTP sólo tienes que pedirlo.

Por curiosidad, ¿qué le estas metiendo al 628 para que no te entre en las memorias que tiene?

Saludos desde Almería
Saludos desde Almería, España

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5415
    • Picmania by Redraven
RE: Servidor Web con PIC16F84 + (EM100 O EM202 de Tibbo)
« Respuesta #3 en: 28 de Marzo de 2006, 03:55:00 »
Todo un sistema estilo Telnet (que usa un monton de manejo de string y eso es
capaz de comerse toda la memoria disponible, y algo más)

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Manofwar

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 156
RE: Servidor Web con PIC16F84 + (EM100 O EM202 de Tibbo)
« Respuesta #4 en: 29 de Marzo de 2006, 05:59:00 »
Ahora entiendo lo comilón que estas con la memoria, ya he visto la especie de telnet en el foro de C.

Saludos desde Almería.
Saludos desde Almería, España

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5415
    • Picmania by Redraven
Re: Servidor Web con PIC16F84 + (EM100 O EM202 de Tibbo)
« Respuesta #5 en: 05 de Abril de 2006, 01:27:32 »
Amigo Manofwar:

Ya tengo en mi poder un par de 16F88 que tienen mas espacio ROM que el escaso 16F628A. Así que ... solicito, pido, ruego, anhelo ....

¿Puedes pasarme las cabeceras de petición HTML para montar el Serv.Web? Intenté hacer una prueba ... atacando mi sistema con un IExplorer y monitorizando lo que recibia el PIC mandandolo al RS232 ... pero los resultados eran un poco confusos. Si tienes lo que envia el IExplorer y lo que debe responder el PIC pues ... mi alegría no tendrá límites. (De HTML si se un poco)

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Manofwar

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 156
Re: Servidor Web con PIC16F84 + (EM100 O EM202 de Tibbo)
« Respuesta #6 en: 05 de Abril de 2006, 08:23:39 »
Hola RedPic, hoy recibo un par de 16f88, también para mi servidor web.

Bien, pasamos a las peticiones HTTP que es lo que interesa.

La cabecera de petición de una página web comienza con la siguiente cadena ascii:

"GET / HTTP/1.1" + carácter ascii CR (0xD) + carácter ascii LF (0xA)

Esta petición el servidor web la asume como una petición de la página index.htm

Para una petición de un archivo en concreto sería así:

"GET /mi_pagina.htm HTTP/1.1" + carácter ascii CR (0xD) + carácter ascii LF (0xA)

Después de esta línea vienen otras sobre el tipo de archivos que soporta el navegador, navegador y su versión, tipo de conexión, etc. No recuerdo ahora mismo si el final de la petición era CR+LF+CR+LF, esta tarde cuando llegue a casa te lo digo.

De todos modos, en mi código sólo tengo en cuenta la mitad de la primera línea de la petición, que le dice al servidor que es lo que quiere el navegador, al resto ni caso.

Para la cabecera de respuesta del servidor al navegador, lo mínimo que hay que poner para que todo vaya bien con el IExplorer y Mozilla (Netscape),es lo siguiente:

1. Esto le dice al navegador que todo va bien y aceptamos la petición

   "HTTP/1.0 200"   + CR + LF

2. Aquí le decimos que tipo de archivo vamos a enviar, es en mi caso un flash.

   "Content-Type: application/x-shockwave-flash" + CR + LR

   pero pueden ser ciento y la madre dependiendo de lo que envíes, ejemplos:

   "Content-Type: text/html" + CR + LF
   o
   "Content-Type: image/gif" + CR + LF
   o
   "Content-Type: image/jpeg" + CR + LF

3. El tipo de conexión que aceptamos establecer. Esto es importante, de hecho mis problemas con el IExplorer venían por aquí.

   "Connection: keep-alive" + CR + LF

   Esta respuesta le dice al navegador que mantendremos la conexión abierta. Esta es la forma que por defecto los navegadores solicitan.

   "Connection: close" + CR + LF

   Esta respuesta le dice al navegador que después de enviarle lo solicitado cerraremos la conexión. Aquí venían mis problemas con el IExplorer. Te explico con un ejemplo:



<html>

Bienvenido a mi web

<img src="mi_imagen_1.GIF">

<img src="mi_imagen_2.jpg">

</html>

En este caso, el navegador al cargar la página html realiza una petición por cada una de las imágenes.

Si después de enviar el html desde el servidor, cerramos la conexión, el IExplorer cierra la conexión también y no realiza las peticiones de las imágenes, quedando incompleto el visionado de la página. Esto no es así en el caso de Mozilla, que sí realiza todas las peticiones correctamente aunque el servidor cierre la conexión cada vez que atiende una petición.

La solución es la conexión keep-alive, así mantenemos la conexión abierta hasta que el navegador cierra la conexión al haber descargado todo lo necesario del servidor.

4. Ahora debemos decirle el largo de los datos, en bytes, que vamos a enviar

   "Content-Length: 495" + CR + LF


5. Finalizamos la cabecera con CR + LF y a continuación el archivo o lo que le deseemos enviar al navegador.


No se si te he aclarado algo, cualquier duda ya sabes.

Saludos desde Almería, España
« Última modificación: 05 de Abril de 2006, 17:14:15 por Manofwar »
Saludos desde Almería, España

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5415
    • Picmania by Redraven
Re: Servidor Web con PIC16F84 + (EM100 O EM202 de Tibbo)
« Respuesta #7 en: 05 de Abril de 2006, 15:56:32 »
Amigo Manofwar:

¡Perfecto! Creo que lo tengo claro ... montaré el 16F88 en la RRBOARD1 e intentaré implementar las cabeceras tal como me has enseñado. Con una página en HTML con un Form con accept's y unos images de Leds para pulsar y encenderlos y apagarlos ... a ver cómo se me da la cosa.

Si me atasco ya te pediré más ayuda ... Vamos a ver si podemos darle nueva vida y bríos al EM202 ... 
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Manofwar

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 156
Re: Servidor Web con PIC16F84 + (EM100 O EM202 de Tibbo)
« Respuesta #8 en: 05 de Abril de 2006, 19:42:40 »
Te he enviado un privado RedPic, pero como no se si funcionan aún, te lo digo aquí tambien. Revisa mi post anterior sobre las cabeceras http se me pasó incluir la línea que envía el servidor con el tamaño de los datos a enviar.

Saludos desde Almería, España
Saludos desde Almería, España

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5415
    • Picmania by Redraven
Re: Servidor Web con PIC16F84 + (EM100 O EM202 de Tibbo)
« Respuesta #9 en: 12 de Abril de 2006, 01:29:39 »
Manofwar:

Lo siento pero me he perdido ....  :?

¿Me podrías hacer un favor? ¿Te importaría volver a recompilar la info y postear otro mensaje con el asunto completo?

Soy mas bruto que un saco'martillos ... y lo del size ma'desencajao  :P

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Manofwar

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 156
Re: Servidor Web con PIC16F84 + (EM100 O EM202 de Tibbo)
« Respuesta #10 en: 18 de Abril de 2006, 05:03:00 »
Comenzamos con la petición del navegador a nuestro servidor. Esta puede ser de dos formas:

1. "GET / HTTP/1.1" + carácter ascii CR (0xD) + carácter ascii LF (0xA)

Que el servidor debe asumir como la petición de la página index.htm

o

2. "GET /XXXXX.XXX HTTP/1.1" + carácter ascii CR (0xD) + carácter ascii LF (0xA)

Donde XXXXX.XXX es el nombre del archivo que pide el navegador.

Hay más líneas en la petición pero podemos obviarlas.


Ahora la respuesta mínima de nuestro servidor para que todo vaya bien en el IExplorer y en Mozilla-Netscape

1. Esto le dice al navegador que aceptamos la petición

   "HTTP/1.0 200"   + CR + LF

2. Aquí le decimos que tipo de archivo vamos a enviar, en mi caso un flash.

   "Content-Type: application/x-shockwave-flash" + CR + LF

   pero pueden ser ciento y la madre dependiendo de lo que envíes, ejemplos:

   "Content-Type: text/html" + CR + LF
   o
   "Content-Type: image/gif" + CR + LF
   o
   "Content-Type: image/jpeg" + CR + LF

3. El tipo de conexión que aceptamos establecer.

   "Connection: keep-alive" + CR + LF


4. Ahora debemos decirle el largo del archivo que vamos a enviar, donde X es el número de bytes.

   "Content-Length: X" + CR + LF


5. Finalizamos la cabecera con CR + LF y a continuación el archivo o lo que le deseemos enviar al navegador.


Saludos desde Almería, España
Saludos desde Almería, España

Desconectado spanishingles

  • PIC10
  • *
  • Mensajes: 4
Re: Servidor Web con PIC16F84 + (EM100 O EM202 de Tibbo)
« Respuesta #11 en: 25 de Abril de 2006, 20:05:23 »
Hola como estan, pues que tristeza pero en colombia no se venden los em100, y bueno de todas formas no podria comprarlos porque son muy caros pero me gustaria saber algo:

¿Cómo hacen para meter una web dentro de un pic, porque yo normalmente hag un programa en assembler y luego lo llevo de .asm a .hex y con ese formato lo pongo dentro del pic, pero la verdad no tengo ni idea de como seria con una web

gracias

Desconectado Manofwar

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 156
Re: Servidor Web con PIC16F84 + (EM100 O EM202 de Tibbo)
« Respuesta #12 en: 26 de Abril de 2006, 06:16:59 »
Hola splanishingles, que tal.

Te respondo por aquí también al privado, ya que las preguntas vienes a ser las mismas


1- como haces para poner una web dentro del pic.

Lo primero que debes saber es que la comunicación entre un servidor web y un cliente web (IExplores, Netscape,Mozilla, etc) se realiza en comandos codificados en ASCII. Si lees el post anterior al tuyo donde explico los comandos de petición de un archivo del cliente al servidor web y la respuesta de este, verás que todo es texto perfectamente legible.

Lo segundo es que los módulos de Tibbo son un convertidor de ethernet a rs232, por lo que la comunicación para el pic es como la que realizarías para comunicar tu pic con el rs232 de un pc, sin preocuparte del TCP/IP.

Teniendo esto en cuenta, la cosa es fácil.

Si has comunicado tus pic con el pc, imagino que habrás enviado mensajes de texto codificados en ASCII, del tipo "HOLA", donde se enviarían los siguientes bytes desde el pic al pc:

H=0x38
O=0x4F
L=0x4C
A=0x41

2- como logras que el pic se comunique con la web, de donde salieron esas instrucciones porque en microchip no las encuentro y ademas dime algo mas, yo podria comunicar el pic con una web que este en el pc con este metodo.

Imagino que las instrucciones que no encuentras en Microchip son "GET", "Content-Type", etc, ya que son comandos HTTP.En el link donde tengo los archivos del servidor web, he subido el protocolo de comunicación HTTP donde vienen estas y otras muchas.

Cuando hablas de comunicar un pic con una web en el pc, imagino que te refieres a una página web que está abierta en el cliente web (IExplorer, Netscape,etc). Si es esto lo que preguntas, la respuesta es sí. Es lo que hace mi servidor através de un flash que envía una petición GET con unos parámetros al servidor. Con dichos parametros el servidor cambia el bit correspondiente, que representa el estado de una bombilla/foco y responde enviando una cadena de texto, que el flash interpreta cambiando de color los simbolos de las bombillas/focos en función de si están apagadas o encendidas.

Espero haber aclarado tus dudas.
Saludos desde Almería, España

Desconectado spanishingles

  • PIC10
  • *
  • Mensajes: 4
Re: Servidor Web con PIC16F84 + (EM100 O EM202 de Tibbo)
« Respuesta #13 en: 27 de Abril de 2006, 04:03:09 »
Hola amigo, bueno antes que nada gracias por tu pronta respuesta, debo reconocer que aunque estos foros son para eso, no todo el mundo esta tan dispuesto como tu a brindar tan desinteresada y abiertamente el fruto de su trabajo.

Bueno pues te cuento que sigo sin entender, no se si es que me falte bastante conocimiento o es que debas ser un poco mas explicito.

Cuando yo he comunicado el pic con el pc, lo he echo enviando un caracter ascii al visual basic, cosa que es realmente facil en dicho programa, de hecho hice una estacion meteorologica, pero bueno esto seria mil veces mejor si lograra ponerlo en una web.

Lo del modulo tibbo lo entiendo perfectamente, cuanto no deseariamos todos que el pic tuviera una interface a ethernet.

Pero bueno si no es que no lo capte, la verdad aun no me dices como metiste la web dentro del pic.

y sobre esto:

Imagino que las instrucciones que no encuentras en Microchip son "GET", "Content-Type", etc, ya que son comandos HTTP.En el link donde tengo los archivos del servidor web, he subido el protocolo de comunicación HTTP donde vienen estas y otras muchas.

Como es posible usar comandos http en programacion  assembler.

Otra cosita: Cuando uno tiene una pagina en el computador, y quiere que esta sea vista por usuarios de la red WAN tiene que instalar y configurar un servidor web como el apache, como es que logras que el pic sin mas sea servidor web.


Mill gracias

Desconectado Manofwar

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 156
Re: Servidor Web con PIC16F84 + (EM100 O EM202 de Tibbo)
« Respuesta #14 en: 05 de Mayo de 2006, 07:04:17 »
Hola spanishingles, perdona por responder tan tarde pero he estado enfermo y no tenía muchas ganas de acercarme al pc. He leido mi post anterior y la verdad es que debo ser más claro. Veamos si esta vez lo consigo.

Los comandos HTTP no es que se usen dentro del ensamblador, sólo se interpretan o se envían como cadena de caracteres ASCII.

Cuando llega una petición "GET /" leo uno a uno los caracteres de la cadena ASCII e interpreto que es una petición de mi página web.

Ahora hay que enviar lo solicitado, que enlaza con tus otras dudas.

Debemos decirle al navegador (IExplorer,Mozilla,etc) que hemos recibido la petición y que le enviamos lo pedido. Esto se hace enviando los comandos HTTP específicos, que tambien son una cadena de caracteres ASCII y están guardados al principio de una tabla en el pic. La tabla continúa con los datos a enviar, en mi caso se envia un archivo flash por lo que he guardado en la tabla todos los bytes que forman dicho flash. Si fuera un jpeg, pues igual guardas en una tabla los bytes del jpeg y los envías cuando sea solicitado el archivo.

Cuando tu estación envía datos al pc será porque el pc le realiza una petición atraves de unos comandos, creados por ti imagino. Pues esto es igual, solo que los comandos de comunicación son HTTP y los datos a enviar están en una tabla.

Espero haberme expresado claramente, pero si en caso contrario no dudes en volver a consultarme.




Saludos desde Almería, España