Imagenes en webserver Ethernet Shield +SD

Saludos!

Hace poco he adquirido la nueva versión de la shield ethernet con SD y estoy intentando mostrar imagenes (jpg,gif, etc) almacenadas en la uSD, a traves de un pequeño servidor web.

Estoy haciendo pruebas con el sketch de ejemplo de adafruit

pero no hay manera, el sketch funciona bien me muestra los archivos que tengo en la uSD y puedo ver el contenido si es texto o html, pero no puedo ver las imagenes ya sean dentro de un html o el archivo de imagen que intente visualizaren la uSD.

a continuacion os pongo el codigo que creo que se encarga de pasar la informacion de la uSD al navegador.

  Serial.println("Opened!");
                    
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/plain");
          client.println();
          
          int16_t c;
          while ((c = file.read()) > 0) {
              // uncomment the serial to debug (slow!)
              //Serial.print((char)c);
              client.print((char)c);
          }
          file.close();

He modificado el "content-type" para decirle que es "image/jpg" por ejemplo, pero no hay manera.

Tambien he probado de cambiar el tipo de variable de "c" en lugar de "char" por "byte" pero sin resultado.

gracias por la ayuda

La web donde esta el Sketch de ejemplo lo podeis encontarr aqui:

http://www.ladyada.net/learn/arduino/ethfiles.html

He inventigado un poco y puede ser un bug de la clase "Client" en las librerias ethernet.

Parece ser que cuando le llega un byte 0xFF interpreta que ya no estan llegando mas datos.

en este enlace esta mejor explicado, es la pagina de ovidiu creador de tinywebserver.

http://www.webweavertech.com/ovidiu/weblog/archives/000476.html

he hecho las correcciones indicadas en las librerias, pero no funciona.
supongo que al modificar la clase tambien habra que cambiar algo el el codigo del primer post. Pero se me escapa.

gracias

;D ;D

Lo consegui!!!! ;D ;D ;D ;D

Os pongo el codigo modificado

 Serial.println("Opened!");
                    
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          
          int16_t c;
          while ((c = file.read()) > -1) {
              // uncomment the serial to debug (slow!)
              //Serial.print((char)c);
              client.print((char)c);
          }
          file.close();

El truco esta en el "-1" ;D ;D si lo poneis tal cual esta parte en el sketch "SDWebBrowser" funciona probado con el IExplorer y Firefox, aunque en el firefox solo muestra la imagen si la llamas desde un archivo html.

La velocidad de carga es aceptable tarda unos 3 sec. en mostrar una imagen de unos 50 kb.

Pues nada ya podeis incluir imagenes en vuestros proyectos de arduino controlados via web ;D ;D ;D

Gracias por todo! :smiley: :smiley: :smiley:

um,, he hehco lo de "-1", peor sigue sin imprimirme imagenes.. ¿como has hehco las modificaciones de la libreria?.. de todas formas yo estoy usando la libreria SdFat... que es diferente.

Me imprime todo bien, texto, botones etc, pero las imagenes nada,,,

Um sigo teniendo el mismo porblema, puedo acceder a todos los datos d ela sd desde internet, pero no a imagenes :-? ...

He hehcho el cmabio de "-1" y los demás pra la libreria Sdfat, en cambio si pongo hipervinculos a imagenes subidas a internet estas aparecen perfectamente en la web de arduino (en la SD),, pero no soy capaz de que la web que tengo en la SD muestre imagenes que estan en la misma tarjeta...

Hola
Aparte de poner el -1 en el while, se tiene que cambiar la cabecera del http, para decile que es de Tipo: image/jpg Tal y como se puede ver en el codigo siguiente:

Serial.println("Opened!");
client.println("HTTP/1.1 200 OK");
//client.println("Content-Type: text/plain");
client.println("Content-Type: image/jpg"); // Para imagenes .jpg
client.println();

int16_t c;
while ((c = file.read()) > -1) {
// uncomment the serial to debug (slow!)
Serial.print((char)c);
client.print((char)c);
}
file.close();
} else {
// everything else is a 404
client.println("HTTP/1.1 404 Not Found");
client.println("Content-Type: text/html");
client.println();
client.println("

File Not Found!2

");
}
break;