Code pour l'IDE ESP8266 D1R1

Les 3 composants du bandeau ci-dessus résument ce projet : comment piloter un DFPlayer via une interface web

(qui fonctionne avec le code HTML correspondant
Retour vers le tuto du projet :

Le code pour fichier.INO


#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266mDNS.h>
#include <ESP8266WebServer.h>
#include <LittleFS.h>

#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
SoftwareSerial mySoftwareSerial(D10, D11); // RX, TX
const byte busy_pin = D12;
bool EtatLecture = false;
bool EtatListe = false;
bool EtatPrecedent;
String Playlist = "";
String TotalPlaylist = "";
String State;
int Volume;
uint8_t EQ = 0;
int D; //Disque (répertoire) en cours de lecture de la playlist
int M; //morceau en cours de lecture de la playlist
int Disque;
int NomDisque; //Disque (répertoire) en cours de lecture (info du DFPlayer)
int TitreMorceau; //morceau en cours de lecture (info du DFPlayer)
int Compteurplaylist = 0; //no comment...

DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);


ESP8266WiFiMulti wifiMulti;     // Create an instance of the ESP8266WiFiMulti class, called 'wifiMulti'

ESP8266WebServer MonServeurWeb(80);    // Create a webserver object that listens for HTTP request on port 80

String getContentType(String filename); // convert the file extension to the MIME type
bool handleFileRead(String path);       // send the right file to the client (if it exists)
bool    etat_enregistrement = false;
String FichierPlaylist = "PlayList.txt" ;
File DataFileID;
File file_ID;
const byte led_pin = D4;
const byte sensor_pin = D2;
int pirState = LOW;             // we start, assuming no motion detected
int val = 0;                    // variable for reading the pin status
unsigned long ancien = 0, nouveau = 0;


void aff_page_web() {
  // cherchons le fichier de la page internet

  file_ID = LittleFS.open("index.html", "r");
  if (file_ID) {
    MonServeurWeb.streamFile(file_ID, "text/html");//Envoyer la page Web
    // Page_Client = file_ID.read; // je colle le contenu en texte dans une variable globale
    // file_ID.close();
    Serial.println("-----> index.html envoyée");
  } else {
    Serial.println("Problème d'ouverture du fichier index.html");
    Serial.println("Assurez vous de l'avoir téléversé à l'aide \r\n de l'outil LittleFS data upload");
    String rep = "Problème d'ouverture du fichier index.html dans_FS.html \r\n Assurez vous de l'avoir téléversé à l'aide \r\n de l'outils LittleFS Data Upload \r\n";
    MonServeurWeb.send(404, "text/plain; charset=utf-8", rep);
  }

  MonServeurWeb.streamFile(file_ID, "text/html");//Envoyer la page Web
  // file_ID.close();
  Serial.println("-----> index.html envoyée");
  Serial.print("Etat du lecteur MP3 à cet instant : "); Serial.println(digitalRead(busy_pin));// pour voir le tout


}



void actualiser() { // là, j'interroge le DFPlayer, puis j'envoie les éléments à mettre à jour sur le site
  //NomDisque =myDFPlayer.readFolderCounts();//Disque (répertoire) en cours de lecture (info du DFPlayer)
  // delay(500);
  // TitreMorceau = myDFPlayer.readCurrentFileNumber(); //morceau en cours de lecture (info du DFPlayer)
  // delay(800);

  int aleatoire = random(200); // tout simplement pour voir ce qui se passe, si le rafraichissement s'exécute bien...
  Serial.println("-----> Actualiser");
  MonServeurWeb.send(200, "text/html", State + " " + String(Volume) + " " + String(EQ) + " " + String(D) + " " + String(M) + " " + String(aleatoire));


}

void visualiser() {
  MonServeurWeb.send(200, "text/html", Playlist);
}


void effacer_donnees() {
  DataFileID = LittleFS.open(FichierPlaylist, "w");// ancien contenu effacé
  DataFileID.print("");// on met tout à zéro !

  if (!DataFileID) {
    Serial.println("Erreur ouverture fichier " + FichierPlaylist);
    return;
  }
  DataFileID.close();
  aff_page_web();//Envoyer la page Web
}

void handledownload() {
  if (etat_enregistrement) {
    delay(10);
    DataFileID.close();
    Serial.println("-----> enregistrement Arrêté");
    etat_enregistrement = false;
  }
  DataFileID = LittleFS.open(FichierPlaylist , "r");
  if (DataFileID) {
    Serial.println("-----> Téléchargement en cours");
    MonServeurWeb.sendHeader("Content-Type", "text/text");
    MonServeurWeb.sendHeader("Content-Disposition", "attachment; filename=" + FichierPlaylist );
    MonServeurWeb.sendHeader("Connection", "close");
    MonServeurWeb.streamFile(DataFileID, "application/octet-stream");
    DataFileID.close();
  } else {
    Serial.println();
    Serial.println("Fichier introuvable");
    MonServeurWeb.send(204, "text/html", "Fichier introuvable");
  }
}

void litPlaylist() {
  DataFileID = LittleFS.open(FichierPlaylist, "r");
  if (DataFileID) {
    Serial.println("-------------------> Lecture playlist en cours");
    Playlist = DataFileID.readString(); // on recupere le contenu entier du ficher
    //    =Playlist;
    Serial.println(Playlist);
    Serial.println("-------------------FIN du fichier de playlist--------------------------");
    DataFileID.close();
    Compteurplaylist++;
    JouePlaylist(); // on lance le premier, les suivants seront gérés par la fonction Loop()
  } else {
    Serial.println();
    Serial.println("Fichier introuvable");
    MonServeurWeb.send(204, "text/html", "Fichier introuvable");
  }
}




void JouePlaylist() {

  Serial.println("------------------Voici la liste qu'il me reste à jouer------------------");
  Serial.println(Playlist); // la PlayList encours est stockée dans cette variable, qui se consume au fur et à mesure de l'écoute des morceaux
  Serial.println("-------------------FIN de la playlist actualisée, donc ce qu'il reste à jouer--------------------------");
  int finListe = Playlist.lastIndexOf("@") + 1;
  Serial.print("finListe vaut------");

  Serial.println(finListe);

  int deb = 0;
  int finMorceau;
  finMorceau = Playlist.indexOf("@", deb);
  if (finMorceau <= finListe + 1)
  {

    EtatListe = true;
    MonServeurWeb.send(200, "text/html", "Playliste en lecture...");
    String aJouer = Playlist.substring(deb, finMorceau); //on extrait le prochain morceau..
    Playlist = Playlist.substring(finMorceau + 1, finListe); //on supprime le morceau..
    Serial.print("on joue donc maintenant ce morceau : ");
    Serial.println(aJouer);
    if (Playlist == "")  EtatListe = false; //pour le dernier de la liste
    deb = finMorceau + 3;
    String tempD = aJouer.substring(0, 2); //je décompose par exemple 02*0050
    D = (tempD).toInt();
    String tempM = aJouer.substring(3, 7);
    M = (tempM).toInt();
    Serial.println("$$$$$$$$$$$$$$$$$$$$$$$$");
    Serial.print("Ce qui donne tempD = "); Serial.println(tempD);
    Serial.print("Ce qui donne tempM = "); Serial.println(tempM);
    Serial.print("Ce qui donne D = "); Serial.println(D);
    Serial.print("Ce qui donne M = "); Serial.println(M);
    Serial.println("$$$$$$$$$$$$$$$$$$$$$$$$");

    Serial.println("*************************************************");
    char commande = 'P';
    Serial.print("J'envoie un ordre de jouer le morceau ");
    Serial.print(M);
    Serial.print(" du dossier ");
    Serial.print(D);
    Serial.println(" au lecteur !");
    Serial.println(" ");
    Serial.println("Ordre envoyé !");
    envoyerCommandeDFP(commande, D, M);
    delay(520);
    Serial.println("Il reste 1 ou des morceaux à jouer...");
    // EtatLecture == false;
    //  EtatPrecedent == false;
  }
  else
  {
    EtatListe = false; // plus rien à lire
    Serial.println("Fini, plus rien à lire...");
  }

  // aff_page_web();//Envoyer la page Web
  //Serial.print("Etat du lecteur MP3 à cet instant pécis : "); Serial.println(digitalRead(busy_pin));// pour voir le tout
  Serial.println("Fin boucle de lecture...");// pour voir le tout
  delay(20);
}

// quelques fonctions pour le lecteur MP3
void printHelp() {
  Serial.println("DFPlayer Commandes:");
  Serial.println(" h - help");
  Serial.println(" Y - next ");
  Serial.println(" X - previous");
  Serial.println(" p3 - play");
  Serial.println(" p3,5 - play folder 3, file 5");
  Serial.println(" P3,5 - play large folder 3, file 5");
  Serial.println(" P3 - play file 3 in MP3 folder");
  Serial.println(" + - volume up");
  Serial.println(" - - volume down");
  Serial.println(" v10 - set volume to 10");
  Serial.println(" b - Pause");
  Serial.println(" s - start ");
  Serial.println(" z - sleep ");
  Serial.println(" L - enable loop all");
  Serial.println(" l - disable loop all");
  Serial.println(" L3 - loop folder 3");
  Serial.println(" l3 - loop file 3");
  Serial.println(" A3 - advertise file 3");
  Serial.println(" a - stop advertise ");
  Serial.println(" r - tout en aléatoire ");
  Serial.println(" qx - query No. x");
  Serial.println("     x = 1 - read state");
  Serial.println("     x = 2 - read volume");
  Serial.println("     x = 3 - read equalizer");
  Serial.println("     x = 4 - read file counts");
  Serial.println("     x = 5 - read current file number");
  Serial.println("     x = 6 - read file counts in folder");
  Serial.println("     x = 7 - read folder counts uniquement dans le dossier N°2 (test...)");
  Serial.println("     x = 8 - read folder counts avec choix de dossier comme deuxième paramètre");
  Serial.println("  y - choix de l'équalizeur ");
  Serial.println("     y = 1 : Normal");
  Serial.println("     y = 2 : Pop");
  Serial.println("     y = 3 : Rock");
  Serial.println("     y = 4 : Jazz");
  Serial.println("     y = 5 : Classique");
  Serial.println("     y = 6 : Basses");

}

void printDetail(uint8_t type, int value) {
  switch (type) {
    case TimeOut:
      Serial.println(F("Time Out!"));
      break;
    case WrongStack:
      Serial.println(F("Stack Wrong!"));
      break;
    case DFPlayerCardInserted:
      Serial.println(F("Card Inserted!"));
      break;
    case DFPlayerCardRemoved:
      Serial.println(F("Card Removed!"));
      break;
    case DFPlayerCardOnline:
      Serial.println(F("Card Online!"));
      break;
    case DFPlayerPlayFinished:
      Serial.print(F("Number:"));
      Serial.print(value);
      Serial.println(F(" Play Finished!"));
      break;
    case DFPlayerError:
      Serial.print(F("DFPlayerError:"));
      switch (value) {
        case Busy:
          Serial.println(F("Card not found"));
          break;
        case Sleeping:
          Serial.println(F("Sleeping"));
          break;
        case SerialWrongStack:
          Serial.println(F("Get Wrong Stack"));
          break;
        case CheckSumNotMatch:
          Serial.println(F("Check Sum Not Match"));
          break;
        case FileIndexOut:
          Serial.println(F("File Index Out of Bound"));
          break;
        case FileMismatch:
          Serial.println(F("Cannot Find File"));
          break;
        case Advertise:
          Serial.println(F("In Advertise"));
          break;
        default:
          break;
      }
      break;
    default:
      break;
  }
}

void Ajouter_A_Playlist()
{
  DataFileID = LittleFS.open(FichierPlaylist, "a+");// on écrit à la fin
  if (!DataFileID) {
    Serial.println("Erreur ouverture fichier " + FichierPlaylist);
    //aff_page_web();//Envoyer la page Web
    return;
  }

  String chaine = "";
  String Disque = "";
  String Titre = "";
  String message = "Ce que je reçois : \n\n";
  for (uint8_t i = 0; i < MonServeurWeb.args(); i++)
  { chaine = "";
    message += " " + MonServeurWeb.argName(i) + ": " + MonServeurWeb.arg(i) + "\n";
    Disque = MonServeurWeb.argName(i);
    Disque =  Disque.substring(2, 4);
    Titre = MonServeurWeb.arg(i);
    message += Disque + "****" + Titre;
    // jison+="{\"D\": " + Disque + ", \"T\": " + Titre + "}";
    chaine = Disque + "*" + Titre + "@";
    DataFileID.println(chaine);
  }// titre suivant...
  Serial.println(message);// pour voir le tout
  Serial.println("Enregistrement fait !");  //
  DataFileID.close(); // fin de séance !
  aff_page_web();//Envoyer la page Web

} // fin de Ajouter_A_Playlist()


void setup() {

  // Serial.begin(115200);         // Start the Serial communication to send messages to the computer
  Serial.begin(9600);
  delay(10);
  pinMode(led_pin, OUTPUT);
  pinMode(sensor_pin, INPUT);
  pinMode(busy_pin, INPUT); // pour surveiller l'état du lecteur, à raccorder à la pin 16 du DFPlayer
  while (!Serial);
  Serial.println("\r\n\r\n============================================================\r\n");
  Serial.println('\n');
  wifiMulti.addAP("Livebox-Pierre et Sophie", "*************");   // add Wi-Fi networks you want to connect to
  wifiMulti.addAP("LIVEBOX-Pierre-Ext", "***********");
  wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3");

  Serial.println("Connecting ...");
  int i = 0;
  while (wifiMulti.run() != WL_CONNECTED) { // Wait for the Wi-Fi to connect
    delay(250);
    Serial.print('.');
  }
  Serial.println('\n');
  Serial.print("Connected to ");
  Serial.println(WiFi.SSID());              // Tell us what network we're connected to
  Serial.print("IP address:\t");
  Serial.println(WiFi.localIP());           // Send the IP address of the ESP8266 to the computer

  if (MDNS.begin("esp8266")) {              // Start the mDNS responder for esp8266.local
    Serial.println("mDNS responder started");
  } else {
    Serial.println("Error setting up MDNS responder!");
  }

  // file System
  bool success = LittleFS.begin();
  if (!success) {
    Serial.println("Error mounting the file system");
    return;
  }
  Serial.println("Système de fichier fonctionne !");


  MonServeurWeb.onNotFound([]() {                              // If the client requests any URI
    if (!handleFileRead(MonServeurWeb.uri()))                  // send it if it exists
      MonServeurWeb.send(404, "text/plain", "Fichier pas trouvé..."); // otherwise, respond with a 404 (Not Found) error
  });

  MonServeurWeb.begin();                           // Actually start the server
  Serial.println("HTTP server started");


  //=========================== Dire au serveur ce qu'il a à faire ===============
  MonServeurWeb.on("/", aff_page_web);      // requête /   => appel fonction aff_page_web
  MonServeurWeb.on("/JOUER_PLAYLIST", litPlaylist);
  MonServeurWeb.on("/DOWNLOAD", handledownload);
  MonServeurWeb.on("/EFFACER", effacer_donnees);
  MonServeurWeb.on("/ACTUALISER", actualiser);// le remplissage via Ajax
  MonServeurWeb.on("/VISUALISER", visualiser);// le remplissage via Ajax


  //=========================== Démarrer le serveur ============================
  // MonServeurWeb.begin();                  //Start server
  Serial.println("Serveur HTTP démarré");
  Serial.println("==========================================================");

  // démarrer le client NTP
  Serial.println("Serveur NTP démarré");
  Serial.println("==========================================================");
  Serial.println("-----> Afficher page WEB");
  mySoftwareSerial.begin(9600);//je lance avant le chargement de la page, ça lui donne un peu de temps pour initialiser
  aff_page_web();//Envoyer la page Web

  // passons au lecteur MP3
  // mySoftwareSerial.begin(9600);
  // Serial.begin(9600);


  Serial.println();
  Serial.println(F("DFRobot DFPlayer Mini Demo"));
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));

  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while (true);
  }
  Serial.println(F("DFPlayer Mini online."));
  printHelp();

  myDFPlayer.setTimeOut(500); //Set serial communication time out 500ms

  //----Set volume----
  myDFPlayer.volume(15);  //Set volume value (0~30).
  Volume = 15;
  //----Set different EQ----
  myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
  EQ = 1;
  //----Set device we use SD as default----
  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);
} // fin de setup()


void traiter_commande()
{
  String Commande = "";
  String textURL = "";
  textURL = MonServeurWeb.uri();
  if (textURL.startsWith("/ENVOYER_COMMANDE")) {
    String message = "Ce que je reçois : \n\n";

    Serial.println("Voici ce que je dois décoder, pour envoyer au DFPlayer ///");
    Serial.println(textURL);
    Serial.println("-------------------FIN de la commande -------------------------");
    int deb = textURL.indexOf("*", deb) + 1;
    int milieu = textURL.indexOf("*", deb + 1) + 1;
    int finOrdre = textURL.indexOf("@", deb);
    String Ordre = textURL.substring(deb, finOrdre); //on extrait la commande..
    Serial.print("Ordre vaut : ");  Serial.println(Ordre);
    milieu = Ordre.indexOf("*", 0);
    String Cmde = Ordre.substring(0, milieu); //je décompose par exemple ENVOYER_COMMANDE*y*3@
    String val1 = Ordre.substring(milieu + 1, finOrdre);
    // int D=(Cmde).toInt();
    int valu1 = (val1).toInt();
    Serial.print("Ce qui donne Cmde = "); Serial.println(Cmde);
    Serial.print("Ce qui donne val1 = "); Serial.println(val1);
    Serial.println("*************************************************");
    char commande[10];
    Cmde.toCharArray(commande, 2);
    envoyerCommandeDFP(commande[0], valu1, 0);  // le 0 servira à l'envoi des morceaux choisis
  }
  MonServeurWeb.send(204, "text/html", "Ordre bien reçu, en cours de traitement...");

}


void jouer_playlist_actuelle()
{
  String textURL = "";
  textURL = MonServeurWeb.uri();
  if (textURL.startsWith("/JOUER_PLACTUELLE")) {
    String message = "Ce que je reçois : \n\n";
    Playlist = textURL.substring(17, textURL.length()); //on extrait la commande, en enlevant /JOUER_PLACTUELLE
    //Playlist=textURL;
    Serial.print("La liste aléatoire à jouer = "); Serial.println(Playlist);
    Serial.println("*************************************************");
    JouePlaylist(); // on lance le premier, les suivants seront gérés par la fonction Loop()

    aff_page_web();//Envoyer la page Web
  }
}

void jouer_playlist_aleatoire()
{
  String textURL = "";
  textURL = MonServeurWeb.uri();
  if (textURL.startsWith("/JOUER_ALEATOIRE")) {
    String message = "Ce que je reçois : \n\n";
    Playlist = textURL.substring(16, textURL.length()); //on extrait la commande, en enlevant /JOUER_ALEATOIRE
    //Playlist=textURL;
    Serial.print("La liste aléatoire à jouer = "); Serial.println(Playlist);
    Serial.println("*************************************************");
    JouePlaylist(); // on lance le premier, les suivants seront gérés par la fonction Loop()

    aff_page_web();//Envoyer la page Web
  }
}


void enregistrer_playlist()
{
  DataFileID = LittleFS.open(FichierPlaylist, "w");// on crée ou écrase l'ancien...
  if (!DataFileID) {
    Serial.println("Erreur ouverture fichier " + FichierPlaylist);
    return;
  }
  String textURL = "";
  textURL = MonServeurWeb.uri();

  if (textURL.startsWith("/ENREGISTRER_PLAYLIST")) {
    String message = "Ce que je reçois : \n\n";
    String texte = textURL.substring(21, textURL.length()); //on extrait la commande, en enlevant /ENREGISTRER_PLAYLIST

    Serial.println("Voici ce que je dois enregistrer...//");
    Serial.println(texte);
    Serial.println("-------------------FIN de la commande -------------------------");

    DataFileID.print(texte);// on sauvegarde cette playlist


    DataFileID.close(); // fin de séance !
    aff_page_web();//Envoyer la page Web
  }
}// fin de l'enregistrement




//==============================================================
//                     LOOP
//==============================================================
void loop(void)
{
  MonServeurWeb.handleClient();  // gérer les requêtes des clients
  if (digitalRead(busy_pin) == HIGH) // High : à l'arrêt, LOW, en lecture  // le DFP est-il en lecture ? //stop calling this function in IDLE loop
  {
    EtatLecture = false;
    State = "Arrêt";
  }
  else {
    EtatLecture = true;
    State = "Lecture";
  }
  Serial.println(digitalRead(EtatLecture));

  if ((EtatLecture == false) && (EtatPrecedent = ! EtatLecture)) {
    // test du 11 septembre
    //      MonServeurWeb.send(404, "text/plain; charset=utf-8", "au suivant !");
    // fin test 11 septembre
    if (EtatListe == true) { // il reste un morceau à jouer
      Serial.println("Ordre est donné de jouer le suivant...");
      Compteurplaylist++;
      JouePlaylist();
    }
  }
  //   Serial.println(EtatLecture);// pour voir le tout
  //  Serial.println(digitalRead(busy_pin));// pour voir le tout
  EtatPrecedent = EtatLecture;

}

String getContentType(String filename) {
  if (filename.endsWith(".htm")) return "text/html";
  else if (filename.endsWith(".html")) return "text/html";
  else if (filename.endsWith(".css")) return "text/css";
  else if (filename.endsWith(".js")) return "application/javascript";
  else if (filename.endsWith(".png")) return "image/png";
  else if (filename.endsWith(".gif")) return "image/gif";
  else if (filename.endsWith(".jpg")) return "image/jpeg";
  else if (filename.endsWith(".ico")) return "image/x-icon";
  else if (filename.endsWith(".xml")) return "text/xml";
  else if (filename.endsWith(".pdf")) return "application/x-pdf";
  else if (filename.endsWith(".zip")) return "application/x-zip";
  else if (filename.endsWith(".gz")) return "application/x-gzip";
  return "text/plain";
} // fin de getContentType

bool handleFileRead(String path) { // send the right file to the client (if it exists)
  // Serial.println("Chemin du handleFileRead: " + path);
  if (path.endsWith("/")) path += "index.html";         // Pour stocker la page dans la mémoire disponible de l'ESP, ça en consomme moins en mémoire vive...
  String contentType = getContentType(path);            // Get the MIME type
  if (LittleFS.exists(path))
  { // If the file exists
    File file = LittleFS.open(path, "r");                 // Open it
    size_t sent = MonServeurWeb.streamFile(file, contentType); // And send it to the client
    file.close();                                       // Then close the file again
    return true;
  }
  if (path.startsWith("/playlist")) {
    Ajouter_A_Playlist();
    return true;
  }
  // ci-dessous modif du 2 juin
  if (path.startsWith("/ENVOYER_COMMANDE")) {
    traiter_commande();
    return true;
  }

  // ci-dessous modif du 30 août
  if (path.startsWith("/ENREGISTRER_PLAYLIST")) {
    enregistrer_playlist();
    return true;
  }

  // ci-dessous modif du 11 septembre
  if (path.startsWith("/JOUER_ALEATOIRE")) {
    jouer_playlist_aleatoire();
    return true;
  }

  // ci-dessous modif du 11 septembre
  if (path.startsWith("/JOUER_PLACTUELLE")) {
    jouer_playlist_actuelle();
    return true;
  }




  Serial.println("\tFile Not Found");
  return false;                                         // If the file doesn't exist, return false
}



void envoyerCommandeDFP(char cmd, int val1, int val2) {
  int value1, value2 = 0;
  value1 = val1;
  value2 = val2;
  Serial.println("");


  Serial.println("----------------Ici la salle des machines ! ----------------");
  Serial.print("La commande reçue est : "); Serial.println(cmd);
  Serial.print("Avec value1 = "); Serial.print(value1); Serial.print(" et avec value2 = "); Serial.println(value2);

  switch (cmd) {
    case 'h':
      printHelp();
      break;

    case 'Y':
      JouePlaylist();
      // myDFPlayer.next();
      break;

    case 'X':
      myDFPlayer.previous();
      break;

    case 'p':
      if (value2 == 0) myDFPlayer.play(value1);
      else if (value1 != 0) myDFPlayer.playFolder(value1, value2);
      break;
    case 'P':
      if (value2 == 0) myDFPlayer.playMp3Folder(value1);
      else if (value1 != 0)myDFPlayer.playLargeFolder(value1, value2);
      break;

    case '+':
      myDFPlayer.volumeUp();
      Volume = Volume + 1;
      break;

    case '-':
      myDFPlayer.volumeDown();
      Volume = Volume - 1;
      break;

    case 'v':
      myDFPlayer.volume(value1);
      Volume = value1;
      break;

    case 'b':
      myDFPlayer.pause();
      break;
    case 's':
      myDFPlayer.start();
      break;

    case 'z':
      myDFPlayer.sleep();
      break;

    case 'w':
      myDFPlayer.reset();
      break;


    case 'L':
      if (value1 == 0) myDFPlayer.enableLoopAll();
      else myDFPlayer.loopFolder(value1);
      break;

    case 'l':
      if (value1 == 0) myDFPlayer.disableLoopAll();
      else myDFPlayer.loop(value1);
      break;

    case 'A':
      myDFPlayer.advertise(value1);
      break;

    case 'a':
      myDFPlayer.stopAdvertise();
      break;

    case 'r':
      myDFPlayer.randomAll(); //joue toutes les pistes aléatoirement.
      break;


    case 'q':
      if (value1 == 1) Serial.println(myDFPlayer.readState());
      else if (value1 == 2) {
        Serial.println(myDFPlayer.readVolume());
        delay(800);
      }
      else if (value1 == 3) Serial.println(myDFPlayer.readEQ());
      else if (value1 == 4) Serial.println(myDFPlayer.readFileCounts());
      else if (value1 == 5) {
        Serial.println(myDFPlayer.readFolderCounts());
        //TitreMorceau; //morceau en cours de lecture (info du DFPlayer)
      }
      else if (value1 == 6) Serial.println(myDFPlayer.readCurrentFileNumber());
      else if (value1 == 7) Serial.println(myDFPlayer.readFileCountsInFolder(2));
      else if (value1 == 8) {
        Serial.print(myDFPlayer.readFileCountsInFolder(value2));
        Serial.print("morceaux avec le dossier numéro ");
        Serial.println(value2);
      }
      break;

    case'y':
      if (value1 == 1) {
        myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
        Serial.println("Equalizeur : réglage Normal");
        EQ = 1;
      }
      else if (value1 == 2) {
        myDFPlayer.EQ(DFPLAYER_EQ_POP);
        Serial.println("Equalizeur : réglage Pop");
        EQ = 2;
      }
      else if (value1 == 3) {
        myDFPlayer.EQ(DFPLAYER_EQ_ROCK);
        Serial.println("Equalizeur : réglage Rock");
        EQ = 3;
      }
      else if (value1 == 4) {
        myDFPlayer.EQ(DFPLAYER_EQ_JAZZ);
        Serial.println("Equalizeur : réglage Jazz");
        EQ = 4;
      }
      else if (value1 == 5) {
        myDFPlayer.EQ(DFPLAYER_EQ_CLASSIC);
        Serial.println("Equalizeur : réglage Classique");
        EQ = 5;
      }
      else if (value1 == 6) {
        myDFPlayer.EQ(DFPLAYER_EQ_BASS);
        Serial.println("Equalizeur : réglage Basses");
        EQ = 6;
      }
      break;

    default:
      Serial.println("Pas compris la commande...");
      break;
  }
  Serial.println("----------------On sort de la salle des machines ----------------");
  return ;
}


C'est tout

J'espère que ce projet trouvera un écho favorable parmi les internautes. Si vous voulez me contacter, voici mon email (à retaper, pour éviter la collecte automatique d'emails...)