I’m having problems getting past initialization with my DFPlayer Mini project.
(I apologize in advance for any vagueness.)
Frustratingly, I had it working - at least it played individual files - but then I changed something trying to play all the files, and it wouldn’t initialize. So then I changed it back (I think!) but I still get can’t past this:
DFRobot DFPlayer Mini Demo Initializing DFPlayer ... (May take 3~5 seconds) Unable to begin: 1.Please recheck the connection! 2.Please insert the SD card! Time Out!
…and the red LED on the player is not coming on, which it was when it was working.
I am using the original DFRobot libraries (not the popular DFPlayer_Fast ones).
I have tried three different Unos (including two brand new R4s), and three different players. The players claim to be HW-247As, but I’m told that claim isn’t always true. And they were working earlier.
So either
- I’m did something stupid with my wiring
- I did something stupid with my code that I didn’t change back
Things I’ve tried:
- checking the wiring many times
- different h/w (as above)
- different SD card (in case it failed)
- going back to “known working” software
- switching the RX and TX wires in case I confused them
I believe my wiring is:
- Arduino TX on pin 8 to DFPlayer RX via 1K resistor
- Arduino RX on pin 9 to DFPlayer TX
- 3V3 to top left, GND to 2nd from bottom left (between the two SPKR connections).
I tried to take some pics in case that helps. In these:
- black is GND, white is 3V3
- Green and Orange are the speaker wires, offstage
- Yellow is pin 10
- Purple is pin 11
Any suggestions welcome.
And here’s the code. It is lightly modified from the DFRobot example code.
#include "Arduino.h"
#include "DFRobotDFPlayerMini.h"
#if (defined(ARDUINO_AVR_UNO) || defined(ESP8266)) // Using a soft serial port
#include <SoftwareSerial.h>
SoftwareSerial softSerial(/*rx =*/8, /*tx =*/9);
#define FPSerial softSerial
#else
#define FPSerial Serial1
#endif
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);
void setup() {
#if (defined ESP32)
FPSerial.begin(9600, SERIAL_8N1, /*rx =*/D3, /*tx =*/D2);
#else
FPSerial.begin(9600);
#endif
Serial.begin(19200);
while (!Serial)
;
Serial.println();
Serial.println(F("DFRobot DFPlayer Mini Demo"));
Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
if (!myDFPlayer.begin(FPSerial, /*isACK = */ true, /*doReset = */ true)) { //Use serial 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!"));
printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
while (true) {
delay(0); // Code to compatible with ESP8266 watch dog.
}
}
Serial.println(F("DFPlayer Mini online."));
myDFPlayer.volume(30); //Set volume value. From 0 to 30
myDFPlayer.play(1); //Play the first mp3
delay(3000);
}
void loop() {
}
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;
}
}


