Nano + DFPlayerMini

Hi everyone,

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.

Any help you can offer, I would be grateful :slight_smile:

Can you post a picture of your actual project and a copy of the code you are working on? There can be inconsistencies.

Hello, thanks for your reply.

Picture and code below:

#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.

Ah thank you - Hope it goes well for you! Haha!

I'll keep this thread up to date in case I have any luck in the meantime!

According to the datasheet the range of inputs for the select track function is 0-2999 so I think the first track is 0, not 1.

Also, comment out all the code in your loop and run it again.

Heya,

I just tried both recomendations but no luck.

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 am still looking into this as well.

How many mp3 are on the SD?
I didn't say add 0000.mp3, what I said was call play(0) instead of play(1)

Wire the player for button mode and use Arduino to trigger DF button pins.
1 song, maybe just pull 1 pin.

DF Robot doc online.

Heya,

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.