Problème Lecture des fichiers DFPlayer Mini

Bonjour tout le monde,
Avant de vous posez ma question, je tiens à préciser que je suis nouveau sur le forum.
J'ai un problème de lecture des fichiers mp3 de DFPlayer Mini j'arrive pas à lire le fichier FOLDER_titre et FOLDER_vitesse

#define FOLDER_titre          1
#define FOLDER_vitesse     2


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

void setup() {
SoftwareSerial mySoftwareSerial(0, 11);

 Serial.println();
 if (!myDFPlayer.begin(mySoftwareSerial, true, false)) {  //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){
      delay(0); 
    }
  }
  Serial.println(F("DFPlayer Mini en ligne."));
  myDFPlayer.setTimeOut(500);
  myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);
  myDFPlayer.volume(30);  //Set volume value. From 0 to 30
}
void loop(){
      myDFPlayer.volume(30);  //Set volume value. From 0 to 30
      Lecture();
}

void Lecture() {
  
    myDFPlayer.playFolder(FOLDER_titre, 1);
    delay(1000);
    myDFPlayer.playFolder(FOLDER_vitesse, 6);
    delay(1000);
   

if (myDFPlayer.available()) {
printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
 } 
     
 }

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 DFPlayerUSBInserted:
      Serial.println("USB Inserted!");
      break;
    case DFPlayerUSBRemoved:
      Serial.println("USB Removed!");
      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;
  }
}

merci pour votre aide

Avez-vous un message d’erreur qui s’affiche ?

@J-M-L Non y'a pas de message d'erreur

Est-ce que votre montage fonctionne pas jouer de la musique simplement ?

oui ça fonctionne quand je fais myDFPlayer.play();

Vérifiez qu’il n’y a pas de répertoires ou fichiers cachés sur votre carte SD (si vous êtes sur Mac vous aurez potentiellement un fichier d’indexation Spotlight par exemple qui bien sûr ne pourra pas être joué)

Sur la carte SD y'a deux fichiers différents 1 pour les titres et un autre pour la vitesses et dans ces fichiers y'a des audios mp3

Que dit la doc de la fonction dans la bibliothèque que vous appelez ?

Est-ce que le répertoire doit s’appeler d’une façon spéciale comme par exemple 001 ou 01?

le fichier audio doit s'appeler je pense 0001

Mais le répertoire pour lequel vous demandez de jouer tous les morceaux, quel nom doit il avoir ?

myDFPlayer.playFolder(FOLDER_titre, 1);

Dans ce cas c'est FOLDER_titre

non, vous avez défini

#define FOLDER_titre          1

donc l'appel de fonction qui est dans le code est transformé en

myDFPlayer.playFolder(1, 1);

donc vous passez deux nombres entiers à la fonction.

je ne sais pas quelle est votre bibliothèque mais est-ce cohérent avec ce qu'attend la fonction et quel est le nom sous jacent que la puce va aller chercher sur la carte SD

C'est correct, par contre il me semble que les répertoires de la µSD doivent être formatés avec 2 digits : 01 et 02.
Les noms de fichiers doivent être formatés avec 3 digits, et peuvent contenir d'autres caractères :
001-sonnerie.mp3 par exemple.

oui c'était ma question

1 Like

Page 8.
Oui c'est bien ça : 2 digits pour les répertoires, 3 pour les fichiers.

1 Like

@J-M-L @hbachetti effectivement ça marche je vous remercie.
bonne journée :grinning:

super bonne continuation !

1 Like

N'écrivez pas un 0 en début de nombre dans le code, ça voudrait dire que vous êtes en octal (base 8) - par exemple 012base 8 ce serait 10base 10

Quand vous appelez

myDFPlayer.playFolder(55, vitesseVentMax)

il faut que vitesseVentMax soit un entier (par exemple 14) et avec le 55 ça veut dire jouer le mp3 dans SD:/55/014.mp3

ne postez pas de snippets ((Snippets R Us!)) car on ne sait pas de quoi vous parlez. Par exemple quand vous faites

myDFPlayer.playFolder(55, vitesseVentMax)

c'est quoi vitesseVentMax ??

Le code que vous proposez a une variable entière directVentMoy et vous imprimez ** vitesseVentMax** c'est complètement incohérent...

int directVentMoy = doc["vitesseVentMax"];
Serial.println(F("vitesseVentMax:"));
Serial.println(vitesseVentMax);

➜ il faut la variable entière dans l'appel à myDFPlayer.playFolder()

postez le code. TOUT le code

Quand on demande qu'est ce qu'une variable, on parle généralement de son type, comment elle est déclarée et/ou définie.

si c'est la chaîne de caractère extraite d'un JSON, ce n'est pas le bon type puisqu'il faut un int.

c'est un int

#define FOLDER_titre          1
#define FOLDER_vitesse     2


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

void setup() {
SoftwareSerial mySoftwareSerial(0, 11);

 Serial.println();
 if (!myDFPlayer.begin(mySoftwareSerial, true, false)) {  //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){
      delay(0); 
    }
  }
  Serial.println(F("DFPlayer Mini en ligne."));
  myDFPlayer.setTimeOut(500);
  myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);
  myDFPlayer.volume(30);  //Set volume value. From 0 to 30
}
void loop(){
StaticJsonDocument<1024> doc;

  while (client.available()) {
    if (client.peek() != '{')
      client.read(); 
    else
      break;  
  }

  DeserializationError error = deserializeJson(doc, client);
  if (error) {
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.f_str());
    client.stop();
    return;
  }
     
      int idBalise = doc["idBalise"]; 
      int  vitesseVentMax = doc["vitesseVentMax"];


      myDFPlayer.volume(30);  
      Lecture();
}

void Lecture() {
  
   myDFPlayer.playFolder(01, 001);
   delay(1500);
  myDFPlayer.playFolder(55, vitesseVentMax);
  delay(1500);
   

if (myDFPlayer.available()) {
printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
 } 
     
 }

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 DFPlayerUSBInserted:
      Serial.println("USB Inserted!");
      break;
    case DFPlayerUSBRemoved:
      Serial.println("USB Removed!");
      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;
  }
}

[/quote]