Bonjour à tous...
J'avance sur mon projet mais j'ai un problème de lenteur du client FTP que je n'arrive pas à résoudre. A première vu je dirais que c'est du à la librairie car rien dans mon code ne l'explique.
Lorsque je veut lire le contenu du fichier texte le client attend 6 secondes avant de faire une nouvelle requête. J'ai essayé sur mon serveur FTP ainsi que sur un serveur pro externe et le problème reste le même. Lorsque je modifie ma requête pour afficher le contenu du répertoire je n'ai pas de délai entre deux requêtes. Je ne parle pas du temps de téléchargement du fichier mais bien du temps entre la fin d'une requête et le début de la suivante.
Ma carte: UNO R3 + WiFi + ESP8266
Voici mon code
//#include "Arduino.h"
#include <ESP8266WiFi.h>
#include <FTPClient_Generic.h>
// Variables affichage moniteur série
char Affiche;
char Affiche2;
char Affiche3;
unsigned long Tempo;
unsigned long TempsFtp;
//// Variables client FTP
String list[128];
char fileName[] = "Foobar_Now_Playing.txt";
//// FTP A
//char ftp_server[] = "xxx.xxx.xxx.xxx";
////char ftp_server[] = "A";
//char ftp_user[] = "user";
//char ftp_pass[] = "pass";
//char dirName[] = "/";
//// FTP B
char ftp_server[] = "xxx.xxx.xxx.xxx";
char ftp_user[] = "user";
char ftp_pass[] = "pass";
char dirName[] = "/";
//// WiFi
//// WiFi A
char WIFI_SSID[] = "A";
char WIFI_PASS[] = "pass";
////// WiFi B
//char WIFI_SSID[] = "B";
//char WIFI_PASS[] = "pass";
////// WiFi C
//char WIFI_SSID[] = "C";
//char WIFI_PASS[] = "pass";
// FTPClient_Generic(char* _serverAdress, char* _userName, char* _passWord, uint16_t _timeout = 10000);
//FTPClient_Generic ftp (ftp_server, ftp_user, ftp_pass, 1000);
//FTPClient_Generic ftp (ftp_server, 21, ftp_user, ftp_pass, 10000);
FTPClient_Generic ftp (ftp_server, 12469, ftp_user, ftp_pass, 10000);
void setup(){
Affiche = 0;
Affiche2 = 0;
Affiche3 = 0;
Tempo = millis();
TempsFtp = millis();
// uint16_t ftp_port = 12469;
Serial.begin(115200);
Serial.println();
WiFi.begin(WIFI_SSID, WIFI_PASS);
}
void loop() {
//// Si WiFi KO
if (WiFi.status() != WL_CONNECTED){
if (Affiche == 0){
Serial.print("Connecting");
Serial.print(".");
Tempo = millis();
Affiche = 1;
Affiche2 = 0;
}
else {
if (millis()-Tempo > 500){
Serial.print(".");
Tempo = millis();
}
}
}
//// Si WiFi OK
if (WiFi.status() == WL_CONNECTED){
Affiche = 0;
if (Affiche2 == 0){
Serial.println();
Serial.print("Connected, IP address: ");
Serial.println(WiFi.localIP());
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
Affiche2 = 1;
Serial.println("WiFi OK");
}
//// Si FTP OK
if(ftp.isConnected()==1){
if(Affiche3 == 1){
Serial.println("Connecté au serveur FTP");
Affiche3 = 0;
}
// if(millis()-TempsFtp > 300){
//Change directory
ftp.ChangeWorkDir(dirName);
// //List directory content
// ftp.InitFile(COMMAND_XFER_TYPE_ASCII);
// ftp.ContentListWithListCommand("", list);
//
// for (uint16_t i = 0; i < sizeof(list); i++){
// if (list[i].length() > 0)
// Serial.println(list[i]);
// else
// break;
// }
//Download the text file or read it
String response = "";
// ftp.InitFile(COMMAND_XFER_TYPE_ASCII);
ftp.InitFile("Type A");
ftp.DownloadString(fileName, response);
Serial.println("The file content is: " + response);
TempsFtp=millis();
// }
}
else{
Serial.println("Connection au serveur FTP");
ftp.OpenConnection();
if(ftp.isConnected()==1){
Affiche3 = 1;
}
}
}
}
Voici les logs du client FTP pour lister le contenu du repertoire et tout se passe bien.
Au besoin je pourrai aussi vous donner les logs de mon serveur FTP.
14:21:24.831 -> Connecting.......
14:21:28.691 -> Connected, IP address: 192.168.43.251
14:21:28.691 -> SSID: Makomo8
14:21:28.691 -> WiFi OK
14:21:28.691 -> Connection au serveur FTP
14:21:29.066 -> Connecté au serveur FTP
14:21:29.722 -> .
14:21:29.722 -> ..
14:21:29.722 -> Foobar_Now_Playing.txt
14:21:29.722 -> SBC_data
14:21:29.722 -> _Upload
14:21:29.722 -> completed
14:21:29.722 -> config
14:21:29.722 -> downloading
14:21:29.722 -> home
14:21:29.722 -> watch
14:21:30.410 -> .
14:21:30.410 -> ..
14:21:30.410 -> Foobar_Now_Playing.txt
14:21:30.410 -> SBC_data
14:21:30.410 -> _Upload
14:21:30.410 -> completed
14:21:30.410 -> config
14:21:30.410 -> downloading
14:21:30.410 -> home
14:21:30.410 -> watch
14:21:30.972 -> .
14:21:30.972 -> ..
14:21:30.972 -> Foobar_Now_Playing.txt
14:21:30.972 -> SBC_data
14:21:30.972 -> _Upload
14:21:30.972 -> completed
14:21:30.972 -> config
14:21:30.972 -> downloading
14:21:30.972 -> home
14:21:30.972 -> watch
...et les logs pour afficher le contenu du fichier texte
14:26:42.484 -> Connecting.......
14:26:46.405 -> Connected, IP address: 192.168.43.251
14:26:46.405 -> SSID: Makomo8
14:26:46.405 -> WiFi OK
14:26:46.405 -> Connection au serveur FTP
14:26:46.829 -> Connecté au serveur FTP
14:26:52.401 -> The file content is: etat<playing>Artist<Thievery CorporationArtist>Album<It Takes a ThiefAlbum>Titre<Holographic UniverseTitre>Bitrate<320Bitrate>Codec<MP3Codec>Duree<3:42Duree>
14:26:58.351 -> The file content is: etat<playing>Artist<Thievery CorporationArtist>Album<It Takes a ThiefAlbum>Titre<Holographic UniverseTitre>Bitrate<320Bitrate>Codec<MP3Codec>Duree<3:42Duree>
14:27:03.990 -> The file content is: etat<playing>Artist<Thievery CorporationArtist>Album<It Takes a ThiefAlbum>Titre<Holographic UniverseTitre>Bitrate<320Bitrate>Codec<MP3Codec>Duree<3:42Duree>
14:27:09.677 -> The file content is: etat<playing>Artist<Thievery CorporationArtist>Album<It Takes a ThiefAlbum>Titre<Holographic UniverseTitre>Bitrate<320Bitrate>Codec<MP3Codec>Duree<3:42Duree>
14:27:15.845 -> The file content is: etat<playing>Artist<Thievery CorporationArtist>Album<It Takes a ThiefAlbum>Titre<Holographic UniverseTitre>Bitrate<320Bitrate>Codec<MP3Codec>Duree<3:42Duree>
Si quelqu'un à une idée je suis preneur ^^
Bon après midi...