Defective DFPlayer?

My dfplayer worked just a few weeks ago, but then I left it alone to work on another project and now it doesn’t work. The dfplayer’s led light does not come on at all. (It should come on, right?) I do get some static when I connect/disconnect the ground or power pins, but that’s all.

So, I went back to the basics to test everything.

I am using a simple schematic (attached). White wire (RX) is pin 10 with 1k resistor. Blue wire (TX) is pin 11.

And the GetStarted code from DFRobotDFPlayerMini:

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

SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

void setup()
{
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);
  
  Serial.println();
  Serial.println(F("DFRobot DFPlayer Mini Demo"));
  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(10);  //Set volume value. From 0 to 30
  myDFPlayer.play(1);  //Play the first mp3
}

void loop()
{
  static unsigned long timer = millis();
  
  if (millis() - timer > 3000) {
    timer = millis();
    myDFPlayer.next();  //Play next mp3 every 3 second.
  }
  
  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;
  }
  
}

My multimeter says the arduino is putting out 3.8V.

The Serial Monitor says:

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!

I have 2 dfplayer modules and neither works. The micro SD has a mp3 folder with 1 file: 0001.mp3

This all worked perfectly just 2 weeks ago!! What am I missing?

I do get some static when I connect/disconnect the ground or power pins, but that’s all.

You should never wire up a circuit with the power on. Removing the ground on a chip while the +Ve is connected and signals are being sent to it can cause damage to both devices.

Having said that if it was working and now does not it sounds like it is not wired like it was. This sort of things happens all the time if you are using Solderless bread board. Connections that were once being made no longer make contact.

Grumpy_Mike:
You should never wire up a circuit with the power on. Removing the ground on a chip while the +Ve is connected and signals are being sent to it can cause damage to both devices.

Lesson learned, thanks.

Having said that if it was working and now does not it sounds like it is not wired like it was. This sort of things happens all the time if you are using Solderless bread board. Connections that were once being made no longer make contact.

I’ve tried 3 different breadboards, 3 different arduino UNO’s (clones), 2 different dfplayers and I’ve even connected female pins directly to the dfplayer pins… no luck.

What’s the easiest way to make sure the dfplayers aren’t fried?

Aaaaarrrggghh!!! I figured it out... how stupid of me!

Never assume anything! There were 2 things wrong:

  • I was using the wrong sd card. (I could have sworn I had put the right one in.)
  • The RX and TX pins were backwards. Again, I could have sworn that the RX pin from dfplayer should be in the 10 slot, but nope. The TX should be in 10, RX in 11.

But, I'm confused... going off of dfrobot's example: (DFPlayer_Mini_SKU_DFR0299-DFRobot)

This photo shows that on the dfplayer the RX and TX are the 2nd and 3rd pins, respectively.

And, this photo shows him connecting RX to 11 and TX to 10:

But, the code says that RX should be 10 and TX should be 11:

SoftwareSerial mySoftwareSerial(10, 11); // RX, TX

What gives??

A TX pin can be an input or an output depending on how the equipment is classified. Same goes for the RX pin. But you must always connect an input to an output. So that means sometimes connecting a TX to an RX and sometimes connecting a TX to a TX.

Confuses the heck out of me even after 50 years.