DFPlayer Mini ne démarre pas

Bonjour tout le monde,

Après quelques heures à tourner en rond, je m'en remets à la commu :

J'essaie de faire tourner un DFPlayer Mini sur un arduino mega (besoin d'une grande quantité de pins pour le reste de mon projet). Il ne parvient pas à démarrer. Je vous mets mon code et des photos de mon montage.


#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
static const uint8_t PIN_MP3_TX = 18; 
static const uint8_t PIN_MP3_RX = 19; 

SoftwareSerial mySoftwareSerial(PIN_MP3_RX, PIN_MP3_TX); // RX, TX

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


void setup() {
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);

  Serial.println();
  Serial.println(F("Lancement de DFRobot DFPlayer Mini..."));
  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){
      delay(0); // Code to compatible with ESP8266 watch dog.
    }
  }
  Serial.println(F("DFPlayer Mini online."));

  myDFPlayer.volume(20);  //Set volume value. From 0 to 30                                    // CUSTOM : modifiez ici le volume du son
}


void loop() {

        myDFPlayer.play(2);  
        delay(17000);  // xxx = la durée de la piste audio (ex : 1000 = 1 seconde)
}

Je précise que j'utilise un shield sur mon arduino mega. Merci d'avance pour vos contributions.

Pourquoi s'embêter avec SoftwareSerial alors que la mega dispose de 4 ports matériels?

La Mega fonctionne en 5V avec des I/O 5V il serait plus judicieux d'alimenter le module DFPlayer Mini en 5V.


Quels messages reçois-tu sur le moniteur série?

Pourquoi s'embêter avec SoftwareSerial alors que la mega dispose de 4 ports matériels?
-> J'ai maintenant modifié mon code pour utiliser le serial 1 (ports 16 et 17). Le voici modifié :


#include "Arduino.h"
#include "DFRobotDFPlayerMini.h"

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


void setup() {
  Serial1.begin(9600);
  Serial.begin(115200);

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

  if (!myDFPlayer.begin(Serial1)) {  //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); // Code to compatible with ESP8266 watch dog.
    }
  }
  Serial.println(F("DFPlayer Mini online."));

  myDFPlayer.volume(20);  //Set volume value. From 0 to 30                                    // CUSTOM : modifiez ici le volume du son
}


void loop() {

        myDFPlayer.play(2);  
        delay(17000);  // xxx = la durée de la piste audio (ex : 1000 = 1 seconde)
}

J'ai également branché le VCC sur 5V au lieu de 3.3V.
Les nouveaux branchements :

J'ai toujours la même erreur sur le moniteur, à savoir :

Initializing DFPlayer ... (May take 3~5 seconds)

Unable to begin:

1.Please recheck the connection!

2.Please insert the SD card!

16 et 17 c'est Serial2

D'accord, merci, du coup j'ai modifié mon code ici :


void setup() {
  Serial2.begin(9600);
  Serial.begin(115200);

J'ai toujours la même erreur

Bonjour hawleyomalley1

L'erreur ne dit pas forcément la liaison série, ça peut être aussi la carte SD qui pose problème.

Cordialement
jpbbricole

Merci JPB, c'est vrai que c'est une possibilité.
Je viens de changer la carte mini SD contre une autre dont je sais qu'elle fonctionne (je l'utilise au quotidien), sur laquelle j'ai versé mes audios.

J'ai malheureusement toujours le même message d'erreur.

Je précise également que la led du DFPlayer mini ne s'allume à aucun moment. Est-ce que le composant pourrait être mort ?

Dans le doute, je viens de changer le module DFPlayer mini pour un autre identique. Pas de changement au niveau du résultat. J'ai également utilisé les RX1 et TX1 de l'arduino mega et modifié le code et le branchement en fonction. Toujours pas de résultat.

Je récapitule les branchements actuels et le code actuel :


#include "Arduino.h"
#include "DFRobotDFPlayerMini.h"

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


void setup() {
  Serial1.begin(9600);
  Serial.begin(115200);

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

  if (!myDFPlayer.begin(Serial1)) {  //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); // Code to compatible with ESP8266 watch dog.
    }
  }
  Serial.println(F("DFPlayer Mini online."));

  myDFPlayer.volume(20);  //Set volume value. From 0 to 30                                    // CUSTOM : modifiez ici le volume du son
}


void loop() {

        myDFPlayer.play(2);  
        delay(17000);  // xxx = la durée de la piste audio (ex : 1000 = 1 seconde)
}

  • formatée FAT32?
  • taille ≤32Go ?
  • tu as bien respecté les règles de nommage des fichiers?

La carte fait 14Go, et je viens de la formater en FAT32 en suivant ton conseil.
Sur la carte, mes fichiers sont nommés :
1.mp3
2.mp3

et ainsi de suite jusqu'à 6.

Dans son wiki, DFRobot indique que les noms doivent être sur 4 digits commençant à 0001.mp3, 0002.mp3, et ainsi de suite.
De plus, l'ordre de copie est important ce qui donne à réfléchir sur leur manière de gérer la carte mémoire.

D'accord, j'ai modifié les noms des fichiers en conséquence. Je pense que ça n'a pas d'incidence sur le lancement du DFPlayer mini, étant donné qu'il ne démarre toujours pas après ce changement.

Je n'ai pas compris ce qu'implique ta deuxième phrase

Bonjour, il faut rajouter myDFPlayer.setTimeOut(1000);
Programme modifié:

#include "Arduino.h"
#include "DFRobotDFPlayerMini.h"

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


void setup() {
  Serial1.begin(9600);
  Serial.begin(115200);

  Serial.println();
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
  myDFPlayer.setTimeOut(1000);

  if (!myDFPlayer.begin(Serial1)) {  //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); // Code to compatible with ESP8266 watch dog.
    }
  }
  Serial.println(F("DFPlayer Mini online."));

  myDFPlayer.volume(20);  //Set volume value. From 0 to 30                                    // CUSTOM : modifiez ici le volume du son
}


void loop() {

        myDFPlayer.play(2);  
        delay(17000);  // xxx = la durée de la piste audio (ex : 1000 = 1 seconde)
}

Bonjour, merci pour votre réponse.

J'ai abandonné l'idée de faire fonctionner le DFPlayer mini, j'ai totalement changé mon layout et ai connecté un DFPlayer Pr. Ca ne marche pas plus, le DFPlayer Pro m'envoie un message comme quoi il ne parvient pas à démarrer. Même avec le code de test ici : DFPlayer Pro - A Mini MP3 Player for Arduino WiKi - DFRobot (sample code play que je colle ci-dessous :

/*!
 *@file play.ino
 *@brief Music Playing Example Program
 *@details  Experimental phenomenon: control MP3 play music, obtain song information
 *@copyright  Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
 *@license     The MIT license (MIT)
 *@author [fengli](li.feng@dfrobot.com)
 *@version  V1.1
 *@date  2021-10-15
 *@url https://github.com/DFRobot/DFRobot_DF1201S
 https://wiki.dfrobot.com/DFPlayer_PRO_SKU_DFR0768
*/


#include <DFRobot_DF1201S.h>
#include <SoftwareSerial.h>

SoftwareSerial DF1201SSerial(2, 3);  //RX  TX

DFRobot_DF1201S DF1201S;
void setup(void){
  Serial.begin(115200);
  DF1201SSerial.begin(115200);
  while(!DF1201S.begin(DF1201SSerial)){
    Serial.println("Init failed, please check the wire connection!");
    delay(1000);
  }
  /*Set volume to 20*/
  DF1201S.setVol(/*VOL = */20);
  Serial.print("VOL:");
  /*Get volume*/
  Serial.println(DF1201S.getVol());
  /*Enter music mode*/
  DF1201S.switchFunction(DF1201S.MUSIC);
  /*Wait for the end of the prompt tone */
  delay(2000);
  /*Set playback mode to "repeat all"*/
  DF1201S.setPlayMode(DF1201S.ALLCYCLE);
  Serial.print("PlayMode:");
  /*Get playback mode*/
  Serial.println(DF1201S.getPlayMode());
  
  //Set baud rate to 115200(Need to power off and restart, power-down save)
  //DF1201S.setBaudRate(115200);
  //Turn on indicator LED (Power-down save)
  //DF1201S.setLED(true);
  //Turn on the prompt tone (Power-down save) 
  //DF1201S.setPrompt(true);
  //Enable amplifier chip 
  //DF1201S.enableAMP();
  //Disable amplifier chip 
  //DF1201S.disableAMP();
}

void loop(){
  Serial.println("Start playing");
  /*Start playing*/
  DF1201S.start();
  delay(3000);
  Serial.println("Pause");
  /*Pause*/
  DF1201S.pause();
  delay(3000);
  Serial.println("Next");
  /*Play the next song*/
  DF1201S.next();
  delay(3000);
  Serial.println("Previous");
  /*Play the previous song*/
  DF1201S.last();
  delay(3000);
  Serial.println("Start playing");
  //Fast forward 10S
  DF1201S.fastForward(/*FF = */10);
  //Fast Rewind 10S
  //DF1201S.fastReverse(/*FR = */10);
  //Start the song from the 10th second 
  //DF1201S.setPlayTime(/*Play Time = */10);
  
  Serial.print("File number:");
  //Get file number
  Serial.println(DF1201S.getCurFileNumber());
  
  Serial.print("The number of files available to play:");
  //The number of files available to play
  Serial.println(DF1201S.getTotalFile());
  
  Serial.print("The time length the current song has played:");
  //Get the time length the current song has played 
  Serial.println(DF1201S.getCurTime());
  
  Serial.print("The total length of the currently-playing song: ");
  //Get the total length of the currently-playing song 
  Serial.println(DF1201S.getTotalTime());
  Serial.print("The name of the currently-playing file: ");
  //Get the name of the playing file 
  Serial.println(DF1201S.getFileName());
  delay(3000);
  //Play the file No.1, the numbers are arranged according to the sequence of the files copied into the U-disk 
  DF1201S.playFileNum(/*File Number = */1);
  //Play the test.mp3 file in test folder 
  //DF1201S.playSpecFile("/test/test.mp3");
  
  while(1);
  /*Delete the currently-playing file */
  //DF1201S.delCurFile();
}

J'ai tenté d'ajouter votre ligne de code

myDFPlayer.setTimeOut(1000);

en l'adaptant en

DF1201S.setTimeOut(1000);

mais l'IDE me renvoie une erreur et ne l'accepte pas.

Les câblages actuels :

pin RX du DFPlayer Pro -> pin 3 de l'arduino Mega
pin TX du DFPlayer Pro -> pin 2 de l'arduino Mega
pin GND du DFPlayer Pro -> GND de l'arduino Mega
pin VIN du DFPlayer Pro -> 5V de l'arduino Mega
pin R+ du DFPlayer Pro -> câble rouge du HP
pin R- du DFPlayer Pro -> câble noir du HP

Référence du HP
Le DFPlayer Pro est bien un original et non un clone chinois
L'arduino Mega est bien un original et non un clone chinois

J'ai changé l'arduino Mega pour un neuf
J'ai changé le shield pour un neuf

Lors du lancement, le moniteur affiche :
"Init failed, please check the wire connection!"

J'ai vérifié toutes mes connections avec un voltmètre, elles sont toutes OK.
A savoir, j'avais beaucoup d'autres branchements sur mon shield car mon code final est beaucoup plus complexe.
J'ai tenté également de retirer le shield et tous les autres branchements, sans succès.
Si vous trouvez l'erreur, je serais très reconnaissant que vous me le disiez ! Merci




Petite précision également : bien que le code me renvoie une erreur, le DFPlayer Pro "démarre" (clignote et lance un son "music" via le HP)

Bonjour hawleyomalley1

Si tu as un Mega, pourquoi ne pas utiliser les ports Serial1 ou Serial2 ou Serial3?

L'exemple de la bibliothèque DFRobot_DF1201S.h, play.ino, utilise le port Serial1.

Cordialement
jpbbricole

1 Like

Et il n'a pas tort


Cherchez l'erreur.

Erreur d'écriture ! Les pins connectées étaient bien les pins 2 et 3 (voir photo).

Je me penche sur la suggestion de @jpbbricole et je reviens vous en dire plus, merci à vous deux

Le DFPlayer a bien démarré en utilisant Serial1 !

Le code de test utilisé est celui-ci

Le branchement actuel, qui fonctionne :

pin RX du DFPlayer Pro -> pin 18 de l'arduino Mega
pin TX du DFPlayer Pro -> pin 19 de l'arduino Mega
pin GND du DFPlayer Pro -> GND de l'arduino Mega
pin VIN du DFPlayer Pro -> 5V de l'arduino Mega
pin R+ du DFPlayer Pro -> câble rouge du HP
pin R- du DFPlayer Pro -> câble noir du HP

Je tente maintenant d'intégrer tout ça au reste de mon code, et de réintégrer mes autres branchements et mon shield !

Merci mille fois !!

Bonjour hawleyomalley1

Avec plaisir!

Bonne continuation!
jpbbricole