Bonjour à tous...
Je suis sur un projet avec deux ESP32S; le premier récupère les tags de Foobar via le wifi et un serveur FTP et transmet différentes info au deuxième ESP32S via le port série (à terme ça sera par radio).
Le deuxième ESP32S reçoit la trame et la découpe vers les bonnes variables char* avec strtok dans le but d'afficher certaines sur deux bandeaux LED. J'utilise la bibliothèque Parola et celle-ci impose comme type de variable du char. Je veux afficher deux variables sur le premier bandeau donc je dois coller les valeurs de deux variables char* dans une seule pour l'envoyer à Parola. J'arrive à transformer tout ça en String mais après impossible de transformer le résultat en char*.
En gros je veux afficher deux variables "Album" et "Artiste" et elles doivent se retrouver dans "TextHaut".
Je mets le code.
//ESP32S
//Programme pour afficher les tags sur deux bandeaux LED. Liaison par radio au premier ESP32
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
// Define the number of devices we have in the chain and the hardware interface
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 16
// Bandeau haut
#define CLK_PINH 27
#define DATA_PINH 25
#define CS_PINH 26
MD_Parola AffichHaut = MD_Parola(HARDWARE_TYPE, DATA_PINH, CLK_PINH, CS_PINH, MAX_DEVICES);
// Bandeau bas
#define CLK_PINB 28 //Mettre les pins XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#define DATA_PINB 29 //Mettre les pins XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#define CS_PINB 30 //Mettre les pins XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
MD_Parola AffichBas = MD_Parola(HARDWARE_TYPE, DATA_PINB, CLK_PINB, CS_PINB, MAX_DEVICES);
char *EtatFoo = "";
char *Artiste = "";
char *Album = "";
char *Titre = "";
char *Bitrate = "";
char *Codec = "";
char *Duree = "";
char *TextHaut = "";
char *TextBas = "";
char *SerialRead = "";
char *SerialUse = "";
char *WifiEtat = "";
char *FtpEtat = "";
String SerialReadTmp;
int PortSerie;
String SerialUseTest; // A supprimer à la fin
// Mise en forme des tags dans les variables
void ExtrTags(){
//Extract des tags vers les variables
// int WifiEtat = WifiEtatChar;
// int FtpEtat = FtpEtatChar;
// WifiEtatChar = strtok(SerialUse, "<");
// FtpEtatChar = strtok(NULL, "<");
WifiEtat = strtok(SerialUse, "<");
FtpEtat = strtok(NULL, "<");
EtatFoo = strtok(NULL, "<");
Artiste = strtok(NULL, "<");
Album = strtok(NULL, "<");
Titre = strtok(NULL, "<");
Bitrate = strtok(NULL, "<");
Codec = strtok(NULL, "<");
Duree = strtok(NULL, "<");
SerialUse = "";
// Envoi vers le moniteur série
// A supprimer à la fin
Serial.print("WifiEtat: ");
Serial.println(WifiEtat);
Serial.print("FtpEtat: ");
Serial.println(FtpEtat);
Serial.print("EtatFoo: ");
Serial.println(EtatFoo);
Serial.print("Artiste: ");
Serial.println(Artiste);
Serial.print("Album: ");
Serial.println(Album);
Serial.print("Titre: ");
Serial.println(Titre);
Serial.print("Bitrate: ");
Serial.println(Bitrate);
Serial.print("Codec: ");
Serial.println(Codec);
Serial.print("Duree: ");
Serial.println(Duree);
}
void Afficher(){
if(AffichHaut.displayAnimate()) {
Serial.println("Affichage Haut en cours"); // A supprimer à la fin
AffichHaut.displayText(TextHaut, AffichHaut.getTextAlignment(), AffichHaut.getSpeed(), AffichHaut.getPause(),PA_MESH ,PA_MESH ); //PA_BLINDS PA_MESH
AffichHaut.displayReset();
}
if(AffichBas.displayAnimate()) {
Serial.println("Affichage Bas en cours"); // A supprimer à la fin
AffichBas.displayText(TextBas, AffichBas.getTextAlignment(), AffichBas.getSpeed(), AffichBas.getPause(),PA_MESH ,PA_MESH ); //PA_BLINDS PA_MESH
AffichBas.displayReset();
}
}
void setup() {
//Initialisation moniteur série
//A supprimer à la fin
Serial.begin(115200);
Serial.println("Initialisation du moniteur série");
//Initialisation du port série
Serial2.begin(115200);
// Initialisation des bandeaux LED
AffichHaut.begin();
AffichHaut.setIntensity(0);
AffichHaut.setTextAlignment(PA_LEFT);
AffichHaut.setSpeed(50);
AffichHaut.setPause(3000);
AffichHaut.displayClear();
AffichBas.begin();
AffichBas.setIntensity(0);
AffichBas.setTextAlignment(PA_LEFT);
AffichBas.setSpeed(50);
AffichBas.setPause(3000);
AffichBas.displayClear();
WifiEtat, FtpEtat, PortSerie = 0;
}
void loop() {
//Reception des tags depuis ESP32S via le port série
if(Serial2.available() > 0){
Serial.println("Reception port série en cours"); // A supprimer à la fin
SerialReadTmp = "";
SerialReadTmp = Serial.readString();
SerialReadTmp.toCharArray(SerialRead, 100);
Serial.println(SerialRead); // A supprimer à la fin
SerialUse = SerialRead;
Serial.print("Trame venant du port série"); // A supprimer à la fin
TEST = SerialUse;
Serial.println(TEST); // A supprimer à la fin
ExtrTags();
// Formatage des données reçues du port série: < WifiSend < FtpSend < FoobarSend
// METTRE EN FORME SerialUse avec les bons tags
// METTRE EN FORME SerialUse avec les bons tags
// METTRE EN FORME SerialUse avec les bons tags
// METTRE EN FORME SerialUse avec les bons tags
// METTRE EN FORME SerialUse avec les bons tags
// METTRE EN FORME SerialUse avec les bons tags
// METTRE EN FORME SerialUse avec les bons tags
// METTRE EN FORME SerialUse avec les bons tags
// METTRE EN FORME SerialUse avec les bons tags
// METTRE EN FORME SerialUse avec les bons tags
Afficher();
}
}
Merci à tous et bon dimanche ^^