Merci à tous ^^
J'ai modifié mon code comme ceci
//ESP32S
//Programme pour se connecter au WiFi et au FTP pour lire les tags de Foobar dans un fichier .txt
//et les afficher sur un bandeau LED
#include <WiFi.h>
#include <ESP32_FTPClient.h>
#include <SoftwareSerial.h>
//WiFi Livebox
#define WIFI_SSID "XXXXXX"
#define WIFI_PASS "XXXXXX"
SoftwareSerial SerialHaut(16, 17);
SoftwareSerial SerialBas(18, 19);
//FTP MakomotoryP
char ftp_server[] = "192.168.1.17";
char ftp_user[] = "Arduino";
char ftp_pass[] = "Arduino";
char fileName[] = "Foobar_Now_Playing.txt";
ESP32_FTPClient ftp (ftp_server, 21, ftp_user, ftp_pass, 1000);
unsigned long TempoReadFtp;
int WifiEtat, FtpEtat, NewMessage = 0;
// int playing = 1;
// int paused = 2;
// int stoped = 3;
// int intValue = 5;
String FoobarRead = "";
String FoobarSend = "";
String FoobarEtat = "";
String Artiste = "";
String Album = "";
String Titre = "";
String Bitrate = "";
String Codec = "";
String Duree = "";
String TextHaut = "";
String TextBas = "";
String data = "";
void setup() {
TempoReadFtp = millis();
Serial.begin(115200);
SerialHaut.begin(115200);
SerialBas.begin(115200);
//Initialisation du WiFi
//L'ESP32S s'occupe de la reconnection automatique
WiFi.begin(WIFI_SSID, WIFI_PASS);
Serial.print("SETUP état Wifi: "); Serial.println(WiFi.status()); // Phase test
ftp.OpenConnection();
Serial.print("SETUP état FTP: "); Serial.println(ftp.isConnected()); // Phase test
Serial.println("Fin de boucle SETUP"); // Phase test
}
void loop() {
// Si WiFi déconnecté
if(WiFi.status() != WL_CONNECTED){
Serial.print("Début boucle Wifi déconnecté: "); Serial.println(WiFi.status()); // Phase test
WifiEtat = 0;
WiFi.begin(WIFI_SSID, WIFI_PASS);
Serial.print("Wifi status suite à déconnection: "); Serial.println(WiFi.status()); // Phase test
}
while (WiFi.status() == WL_CONNECTED) {
WifiEtat = 1;
if (ftp.isConnected()==1){
FtpEtat = 1;
if((millis()-TempoReadFtp)>=300){
// Lire le fichier
FoobarRead = "";
ftp.InitFile("Type A");
ftp.DownloadString(fileName, FoobarRead);
TempoReadFtp = millis();
}
}
else {
Serial.print("Déconnection FTP. FtpEtat: "); Serial.println(FtpEtat); // Phase test
FtpEtat = 0;
ftp.OpenConnection();
Serial.print("FTP status suite à déconnection: "); Serial.println(ftp.isConnected()); // Phase test
}
if (FoobarRead != FoobarSend){
NewMessage = 1;
Serial.print("FoobarSend avant copie Read -> Send: ["); Serial.print(FoobarSend); Serial.print("]\t"); Serial.println(FoobarSend.length()); // PHASE TEST
FoobarSend = FoobarRead;
Serial.print("FoobarSend apres copie Read -> Send: ["); Serial.print(FoobarSend); Serial.print("]\t"); Serial.println(FoobarSend.length()); // PHASE TEST
// Extraction de FoobarRead "FoobarEtat<artiste<album<titre<bitrate<codec<duree<"
int startPos = 0;
int endPos = FoobarSend.indexOf("<");
FoobarEtat = FoobarSend.substring(startPos, endPos); //playing, paused, stoped
//FoobarEtat = (FoobarSend.substring(startPos, endPos)).trim();
//FoobarEtat = cleanString(FoobarSend.substring(startPos, endPos));
startPos = endPos + 1;
endPos = FoobarSend.indexOf("<", startPos);
Artiste = FoobarSend.substring(startPos, endPos);
startPos = endPos + 1;
endPos = FoobarSend.indexOf("<", startPos);
Album = FoobarSend.substring(startPos, endPos);
startPos = endPos + 1;
endPos = FoobarSend.indexOf("<", startPos);
Titre = FoobarSend.substring(startPos, endPos);
startPos = endPos + 1;
endPos = FoobarSend.indexOf("<", startPos);
Bitrate = FoobarSend.substring(startPos, endPos);
startPos = endPos + 1;
endPos = FoobarSend.indexOf("<", startPos);
Codec = FoobarSend.substring(startPos, endPos);
startPos = endPos + 1;
endPos = FoobarSend.indexOf("<", startPos);
Duree = FoobarSend.substring(startPos, endPos);
startPos = endPos + 1;
endPos = FoobarSend.indexOf("<", startPos);
// Serial.print("FoobarEtat: "); Serial.println(FoobarEtat); // PHASE TEST
// Serial.print("Artiste: "); Serial.println(Artiste); // PHASE TEST
// Serial.print("Album: "); Serial.println(Album); // PHASE TEST
// Serial.print("Titre: "); Serial.println(Titre); // PHASE TEST
// Serial.print("Bitrate: "); Serial.println(Bitrate); // PHASE TEST
// Serial.print("Codec: "); Serial.println(Codec); // PHASE TEST
// Serial.print("Duree: "); Serial.println(Duree); // PHASE TEST
// Serial.println(); // PHASE TEST
Serial.print("FoobarEtat: ["); Serial.print(FoobarEtat); Serial.print("]\t"); Serial.println(FoobarEtat.length()); // PHASE TEST
Serial.print("Artiste: ["); Serial.print(Artiste); Serial.print("]\t"); Serial.println(Artiste.length()); // PHASE TEST
Serial.print("Album: ["); Serial.print(Album); Serial.print("]\t"); Serial.println(Album.length()); // PHASE TEST
Serial.print("Titre: ["); Serial.print(Titre); Serial.print("]\t"); Serial.println(Titre.length()); // PHASE TEST
Serial.print("Bitrate: ["); Serial.print(Bitrate); Serial.print("]\t"); Serial.println(Bitrate.length()); // PHASE TEST
Serial.print("Codec: ["); Serial.print(Codec); Serial.print("]\t"); Serial.println(Codec.length()); // PHASE TEST
Serial.print("Duree: ["); Serial.print(Duree); Serial.print("]\t"); Serial.println(Duree.length()); // PHASE TEST
Serial.println(); // PHASE TEST
}
///////////////////////////////////////////////////////////////////////
// Gabarit bandeau Haut: "WifiEtat<FtpEtat<Mode<Artist<Album<Titre" //
// Gabarit bandeau Bas: "WifiEtat<FtpEtat<Mode<Artiste<Album<" //
// -Mode1: playing //
// -Mode2: paused //
// -Mode3: stoped //
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
// Macro Foobar2000 //
///////////////////////////////////////////////////////////////
// $if(%isplaying%, //
// $if(%ispaused%, //
// paused< //
// , //
// playing< //
// ) //
// %artist%<%album%<%title%<%bitrate%<%codec%<%length%<, //
// stopped //
// ) //
///////////////////////////////////////////////////////////////
// Envois Tags vers SerialHaut et SerialBas
if (NewMessage == 1){
Serial.println("Début boucle envoi vers les afficheurs"); // PHASE TEST
Serial.print("FoobarEtat: ["); Serial.print(FoobarEtat); Serial.print("]\t"); Serial.println(FoobarEtat.length()); // PHASE TEST
//String stringValue = "1234";
//int temp = (int)(FoobarEtat.toInt());
//int temp2 = strtoul(FoobarEtat, NULL, 10);
//Serial.print("Using strtoul = ");
//Serial.println(temp2);
//Serial.println(String(temp2));
//Serial.print("FoobarEtat.toInt: "); Serial.println(FoobarEtat.toInt());
//intValue = FoobarEtat.toInt();
//Serial.print("intValue: "); Serial.println(intValue);
//if (FoobarEtat == 1){
if (FoobarEtat == "playing"){
//if (temp2 == 1){
//if (FoobarEtat.equals("playing")) {
//if (strcmp(FoobarEtat, "playing") == 0) { //Code à essayer si la comparaison ne fonctionne pas
Serial.println("Entrée boucle Playing"); // PHASE TEST
// Envoyer Artiste et Album sur le bandeau Haut
// Envoyer Titre sur le bandeau Bas
// Test formatage d'envoi des tags
Serial.println("Formatage d'envoi à afficheur Haut Playing"); // PHASE TEST
Serial.print(WifiEtat);
Serial.print("<");
Serial.print(FtpEtat);
Serial.print("<");
Serial.print("1");
Serial.print("<");
Serial.print(Artiste);
Serial.print("<");
Serial.print(Album);
Serial.print("<");
Serial.print(Titre);
Serial.print("<");
Serial.print("#"); //Marqueur de fin
if (SerialHaut.available()){
Serial.println("Début envoi afficheur Haut Playing"); // PHASE TEST
SerialHaut.print(WifiEtat);
SerialHaut.print("<");
SerialHaut.print(FtpEtat);
SerialHaut.print("<");
SerialHaut.print("1");
SerialHaut.print("<");
SerialHaut.print(Artiste);
SerialHaut.print("<");
SerialHaut.print(Album);
SerialHaut.print("<");
SerialHaut.print(Titre);
SerialHaut.print("<");
SerialHaut.print("#"); //Marqueur de fin
NewMessage = 0;
Serial.println("Fin envoi afficheur Haut Playing"); // PHASE TEST
}
else{
NewMessage = 1;
Serial.println("SerialHaut Playing indisponible"); // PHASE TEST
}
if (SerialBas.available()){
Serial.println("Début envoi afficheur Bas Playing"); // PHASE TEST
SerialBas.print(WifiEtat);
SerialBas.print("<");
SerialBas.print(FtpEtat);
SerialBas.print("<");
SerialBas.print("1");
SerialBas.print("<");
SerialBas.print(Artiste );
SerialBas.print("<");
SerialBas.print(Album );
SerialBas.print("<");
SerialBas.print("#");
NewMessage = 0;
Serial.println("Fin envoi afficheur Bas Playing"); // PHASE TEST
}
else{
NewMessage = 1;
Serial.println("SerialBas Playing indisponible"); // PHASE TEST
}
//NewMessage = 0;
Serial.print("NewMessage: "); Serial.println(NewMessage); // PHASE TEST
Serial.println("Fin de boucle Playing: "); // PHASE TEST
}
//if (FoobarEtat == 2){
//if (intValue == paused){
if (FoobarEtat == "paused"){
Serial.println("Entrée boucle Paused"); // PHASE TEST
// Envoyer Titre sur le bandeau Haut
// Envoyer Pause sur le bandeau Bas
if (SerialHaut.available()){
Serial.println("Début envoi afficheur Haut Paused"); // PHASE TEST
SerialHaut.print(WifiEtat);
SerialHaut.print("<");
SerialHaut.print(FtpEtat);
SerialHaut.print("<");
SerialHaut.print("2");
SerialHaut.print("<");
SerialHaut.print(Titre);
SerialHaut.print("<");
SerialHaut.print("#");
NewMessage = 0;
Serial.println("Fin envoi afficheur Haut Paused"); // PHASE TEST
}
else{
NewMessage = 1;
Serial.println("SerialHaut Paused indisponible"); // PHASE TEST
}
if (SerialBas.available()){
Serial.println("Début envoi afficheur Bas Paused"); // PHASE TEST
SerialBas.print(WifiEtat);
SerialBas.print("<");
SerialBas.print(FtpEtat);
SerialBas.print("<");
SerialBas.print("2");
SerialBas.print("<");
SerialBas.print("<");
SerialBas.print("<");
SerialBas.print("#");
NewMessage = 0;
Serial.println("Fin envoi afficheur Bas Paused"); // PHASE TEST
}
else{
NewMessage = 1;
Serial.println("SerialBas Paused indisponible"); // PHASE TEST
}
//NewMessage = 0;
Serial.print("NewMessage: "); Serial.println(NewMessage); // PHASE TEST
Serial.println("Fin de boucle Paused: "); // PHASE TEST
}
//if (FoobarEtat == 3){
//if (intValue == stoped){
if (FoobarEtat == "stoped"){
Serial.println("Entrée boucle Stoped"); // PHASE TEST
// Effacer le bandeau Haut
// Envoyer "Stop" au milieu du bandeau Bas
if (SerialHaut.available()){
Serial.println("Début envoi afficheur Haut Stoped"); // PHASE TEST
SerialHaut.print(WifiEtat);
SerialHaut.print("<");
SerialHaut.print(FtpEtat);
SerialHaut.print("<");
SerialHaut.print("3");
SerialHaut.print("<");
SerialHaut.print("<");
SerialHaut.print("#");
NewMessage = 0;
Serial.println("Fin envoi afficheur Haut Stoped"); // PHASE TEST
}
else{
NewMessage = 1;
Serial.println("SerialHaut Stoped indisponible"); // PHASE TEST
}
if (SerialBas.available()){
Serial.println("Début envoi afficheur Bas Stoped"); // PHASE TEST
SerialBas.print(WifiEtat);
SerialBas.print("<");
SerialBas.print(FtpEtat);
SerialBas.print("<");
SerialBas.print("3");
SerialBas.print("<");
SerialBas.print("<");
SerialBas.print("<");
SerialBas.print("#");
NewMessage = 0;
Serial.println("Fin envoi afficheur Bas Stoped"); // PHASE TEST
}
else{
NewMessage = 1;
Serial.println("SerialBas Stoped indisponible"); // PHASE TEST
}
//NewMessage = 0;
Serial.print("NewMessage: "); Serial.println(NewMessage); // PHASE TEST
Serial.println("Fin de boucle Stoped: "); // PHASE TEST
} //if Serial
Serial.println("Fin boucle envoi vers les afficheurs"); // PHASE TEST
}
} //While
} //Loop
Et voici la sortie du port série. J'ai fait dans l'ordre "arret", "play, "pause", "play" et "next"
ets Jul 29 2019 12:21:46
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:4916
load:0x40078000,len:16436
load:0x40080400,len:4
ho 8 tail 4 room 4
load:0x40080404,len:3524
entry 0x400805b8
SETUP état Wifi: 6
FTP error: Offline
FTP error: Offline
FTP error: Offline
FTP error: Offline
SETUP état FTP: FTP error: Offline
0
Fin de boucle SETUP
FTP error: Offline
Déconnection FTP. FtpEtat: 0
FTP status suite à déconnection: 1
FoobarSend avant copie Read -> Send: [] 0
FoobarSend apres copie Read -> Send: [stopped] 10
FoobarEtat: [stopped] 10
Artiste: [stopped] 10
Album: [stopped] 10
Titre: [stopped] 10
Bitrate: [stopped] 10
Codec: [stopped] 10
Duree: [stopped] 10
Début boucle envoi vers les afficheurs
FoobarEtat: [stopped] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [stopped] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [stopped] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [stopped] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [stopped] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [stopped] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [stopped] 10
Fin boucle envoi vers les afficheurs
FoobarSend avant copie Read -> Send: [stopped] 10
FoobarSend apres copie Read -> Send: [playing<Bjork<Telegram<Headphones<495<FLAC<6:19<] 51
FoobarEtat: [playing] 10
Artiste: [Bjork] 5
Album: [Telegram] 8
Titre: [Headphones] 10
Bitrate: [495] 3
Codec: [FLAC] 4
Duree: [6:19] 4
Début boucle envoi vers les afficheurs
FoobarEtat: [playing] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [playing] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [playing] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [playing] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [playing] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [playing] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [playing] 10
Fin boucle envoi vers les afficheurs
FoobarSend avant copie Read -> Send: [playing<Bjork<Telegram<Headphones<495<FLAC<6:19<] 51
FoobarSend apres copie Read -> Send: [paused<Bjork<Telegram<Headphones<495<FLAC<6:19<] 50
FoobarEtat: [paused] 9
Artiste: [Bjork] 5
Album: [Telegram] 8
Titre: [Headphones] 10
Bitrate: [495] 3
Codec: [FLAC] 4
Duree: [6:19] 4
Début boucle envoi vers les afficheurs
FoobarEtat: [paused] 9
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [paused] 9
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [paused] 9
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [paused] 9
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [paused] 9
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [paused] 9
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [paused] 9
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [paused] 9
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [paused] 9
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [paused] 9
Fin boucle envoi vers les afficheurs
FoobarSend avant copie Read -> Send: [paused<Bjork<Telegram<Headphones<495<FLAC<6:19<] 50
FoobarSend apres copie Read -> Send: [playing<Bjork<Telegram<Headphones<495<FLAC<6:19<] 51
FoobarEtat: [playing] 10
Artiste: [Bjork] 5
Album: [Telegram] 8
Titre: [Headphones] 10
Bitrate: [495] 3
Codec: [FLAC] 4
Duree: [6:19] 4
Début boucle envoi vers les afficheurs
FoobarEtat: [playing] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [playing] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [playing] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [playing] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [playing] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [playing] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [playing] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [playing] 10
Fin boucle envoi vers les afficheurs
FoobarSend avant copie Read -> Send: [playing<Bjork<Telegram<Headphones<495<FLAC<6:19<] 51
FoobarSend apres copie Read -> Send: [playing<Dead Can Dance<In Concert (CD1)<Amnesia (live)<956<FLAC<6:18<] 72
FoobarEtat: [playing] 10
Artiste: [Dead Can Dance] 14
Album: [In Concert (CD1)] 16
Titre: [Amnesia (live)] 14
Bitrate: [956] 3
Codec: [FLAC] 4
Duree: [6:18] 4
Début boucle envoi vers les afficheurs
FoobarEtat: [playing] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [playing] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [playing] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [playing] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [playing] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [playing] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [playing] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [playing] 10
Fin boucle envoi vers les afficheurs
Début boucle envoi vers les afficheurs
FoobarEtat: [playing] 10
Fin boucle envoi vers les afficheurs