I have been looking around the web for a solution to my problem but I cannot find anything, so please help me out.
I want to simply connect a DFPlayerMIni to an Arduino Nano which I want to trigger an mp3 file when it powers on. That's it.
I have been using the exact schematic and code from DFRobot themselves (only for Nano)
However I am getting this error:
23:46:18.568 -> Initializing DFPlayer ...
23:46:19.545 -> DFPlayer Mini online.
23:46:20.049 -> Time Out! 23:46:20.182 -> DFPlayerError:Get Wrong Stack
23:46:20.553 -> Time Out!
I find the lack of error codes explanation disturbing. I have no clue what "Get Wrong Stack" means and I am unable to find any documentation that discloses that information.
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
int serial1 = 10;
int serial2 = 11;
SoftwareSerial mySoftwareSerial(serial1, serial2); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);
void setup()
{
pinMode(serial1, INPUT);
pinMode(serial2, OUTPUT);
mySoftwareSerial.begin(9600);
Serial.begin(115200);
Serial.println(F("Initializing DFPlayer ..."));
if (!myDFPlayer.begin(mySoftwareSerial)) {
Serial.println(F("Unable to begin:"));
Serial.println(F("1.Please recheck the connection!"));
Serial.println(F("2.Please insert the SD card!"));
}
else
{
Serial.println(F("DFPlayer Mini online."));
}
myDFPlayer.volume(10); //Set volume value. From 0 to 30
myDFPlayer.play(1); //Play the first mp3
}
void loop()
{
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 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;
}
}
As it happens I need to use these for a project I'm doing right now. In the next day or two I'll put this together and test it on my end. Maybe we can solve your issue at the same time.
Adding the 0000.mp3 made no difference, and commenting the code had the same behaviour with the exceptin that the MP3 player was not returning any messages back to the Serial Monitor.
I managed to actually reproduce sound just by using the DFplayer without the Arduino as a standalone.
So that would probably indicate there is an error on the code or the wiring which I need to figure out. I am just baffled a bit because I am doing what DFRobot advise.