Go Down

Topic: Problema al leer archivos en FTP con arduino (Read 96 times) previous topic - next topic

Charli92

Hola!
En este momento estoy desarrollando un proyecto en que es necesario leer los caracteres de unos archivos txt alojados en un servidor ftp, para que así el arduino haga distintas cosas según que caracter lea. Esto ya lo hemos logrado, el problema es que a la hora de actualizar el archivo txt con los caracteres nuevos, el arduino no lo lee denuevo y se queda con la instrucción del carácter anterior. Estoy usando como base este código http://playground.arduino.cc/Code/FTP y al principio pensé que se debía a que en arduino sólo se conectaba al server ftp cada vez que se enviaba la letra f, pero me di cuenta que solo deja hacer esto si cierro y abro el monitor serial. Luego de esto le saqué la parte de serial.write al loop y solo dejé el doFTP(), esperando que de esta forma el arduino se mantuviera conectado al servidor FTP, leyendo de nuevo en cada loop el archivo txt con los carácteres, pero el problema persiste. El único momento en que el arduino lee denuevo archivo txt en el servidor ftp es cuando conecto y desconecto el arduino del pc, cierro y abro de nuevo el monitor serial, y cuando compilo el código denuevo.
Espero que se entienda el problema y me puedan ayudar :)
Muchas gracias y espero su respuesta.

surbyte

Claramente el código lee el archivo desde el FTP si presionas 'f' y desde la memoria SD si presionas 'r'


Code: [Select]
void loop()
{
  byte inChar;

  inChar = Serial.read();

  if(inChar == 'f')
  {
    if(doFTP()) Serial.println(F("FTP OK"));
    else Serial.println(F("FTP FAIL"));
  }

  if(inChar == 'r')
  {
    readSD();   
  }

}


De esto y de tu explicación surge que :

1) si presionas 1 vez 'f' lee bien el archivo. Si lo vuelves a hacer y el archivo sufrió un cambio no ve el cambio?
2) que si ve el cambio si cierras/abre el monitor serial y vuelves a presionar 'f' desde ya.

Es asi?

LO primero raro que veo en el código es esto

Code: [Select]
#define FTPWRITE

Falta definir FTPWRITE con algo sea 1 sea 0, true false... esta indefinido y luego se usa en un lugar clave del código que cierra el archivo.
He leido a Noter de esta comunidad que muchos problemas de las memorias SD se deben a que no se cierran los archivos y creo que es tu caso.

El archivo que fue abierto inicialmente debe ser debidamente cerrado.
Comprueba que eso ocurrre. Agrega un Serial.println("Archivo cerrado") antes de volver a ejecutar 'f' con un archivo distinto en el ftp.

Y luego me cuentas.

Charli92

El monitor serial no me deja apretar f denuevo, es como si el programa se ejecutara una sola vez y listo.
Solo puedo volver a apretar "f" o simplemente volver a conectarme al servidor ftp si reinicio el monitor serial, compilo de nuevo o simplemente desenchufo o enchufo el arduino.
El tema del FTPWRITE sirve para dividir el código en dos, uno que sirve para mandar archivos a ftp y otro para bajar archivos de ftp. AL principio del código dice que comentes la linea donde se define para cambiar el código para bajar archivos de ftp.
La verdad es que en ningún momento bajo el archivo txt y lo copio en la sd, simplemente leo el contenido del archivo en el servidor con dclient.read() y recupero el carácter para luego utilizarlo. El problema que al parecer, esta acción (recuperar el primer carácter del archivo txt con dclient.read()) sólo lo hace en el primer loop, ya que luego no aparecen los mensajes del monitor serial de la conexión y esas cosas. La verdad es que no se me ocurre porque. Es posible que no me esté reconectando al servidor o algo, hasta podría ser problema de la configuración del servidor, pero hasta ahora no lo he podido encontrar.
Este es el mensaje que da el monitor serial una vez que se conecta por primera vez al servidor cuando conecto el arduino
Code: [Select]
Command connected
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 6 of 50 allowed.
220-Local time is now 10:00. Server port: 21.
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
331 User arduino@acertec.cl OK. Password required
230 OK. Current restricted directory is /
215 UNIX Type: L8
227 Entering Passive Mode (192,185,100,84,37,184)
Data port: 9656
Data connected
150 Accepted data connection
226-File successfully transferred
226 0.000 seconds (measured here), 9.78 Kbytes per second
Data disconnected

Espero que se entienda más. Muchas gracias por tu respuesa :)

carmeloco

Ojo, al cerrar y volver a abrir el monitor serie, fuerzas un reset en el arduino. Esto es por el "automatic software reset".

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy