Hola amigos,
Estoy intentando descargar unos 60 kb desde un servidor web (webservices) a la SD de arduino. El código es el que pongo más abajo; el problema es que no se descarga todo el contenido, se corta en aproximadamente 2 kb, aunque en ocasiones si lo ha descargado completo. He cambiado el tiempo de espera de delay() desde 300 hasta 10000, con idénticos resultados. ¿Alguna ayuda? GRACIAS.
void descargaDatos( unsigned long idZona ){
String q;
File Archivo;
String cad;
char c;
int filas=0;
EthernetClient cliente;
wdt_disable();
q="GET /webservices/wdsjson.php?d=0&c=Descarga&i=DWL&z="+String(idZona);
#ifdef DEBUG
Serial.println("Proceso .: descargaDatos.");
Serial.println("Estado ..: conectando.");
#endif
if (cliente.connect(placa.servidor, 80)>0) {
if ( SD.exists( "cbrcdw.csv" ) ){
SD.remove( "cbrcdw.csv" );
}
Archivo = SD.open("cbrcdw.csv", FILE_WRITE);
// Limpiar el buffer antes de comenzar el proceso
// cliente.flush();
#ifdef DEBUG
Serial.println("Estado ..: conectado con el servidor.");
Serial.println("Estado ..: enviando petición.");
Serial.print("Petición : ");
Serial.println(q);
#endif
cliente.println(q);
cliente.println(" HTTP/1.0");
cliente.println("User-Agent: Arduino 1.0");
cliente.println();
Serial.println("Estado ..: esperando datos desde el servidor.");
delay(1000);
Serial.print("Bytes a leer: ");
Serial.println(cliente.available());
do{
c = cliente.read();
Serial.print(c);
Archivo.print(c);
if (c==10){
Serial.println();
filas++;
}
}while(cliente.available());
Archivo.close();
} else {
#ifdef DEBUG
Serial.println("Estado ..: ERROR - conexión con servidor ha fallado.");
#endif
}
if (!cliente.connected()) {
#ifdef DEBUG
Serial.println();
Serial.println("Desconectando.");
#endif
cliente.stop();
cliente.flush();
}
q="";
cad="";
#ifdef DEBUG
Serial.println();
Serial.print("Proceso terminado. Filas: ");
Serial.println(filas);
#endif
cliente:~EthernetClient();
wdt_enable(WDTO_8S);
}
He comprobado el log del servidor web y recibe la trama, ejecuta el proceso y devuelve el resultado.
La misma trama enviada desde el navegador web si recibe todos los datos.
Saludos y gracias.