Hello everyone, first post here.
I am currently experimenting with a DFPlayer module. I have it on a breadboard, connected to an ELEGOO Arduino Uno. The DFPlayer is then connected to a 3W 4Ohm speaker.
At first everything worked properly, but when i tried to power the board via a 9V battery, the player didn't seem to start (the red LED onboard wasn't turning on). Thus, i tried disconnecting the speaker, and as soon as i did that, the LED turned ON.
I read here that 9V batteries may not output enough power, so i put the board back on USB power. But now the DFPlayer controller seems to... "die" after a couple of seconds playing. The Serial Output reports a "Time Out!" event, followed by a "Card Online!" event after the DFPlayer (i assume) reboots. This cycle repeats after 6/7 seconds, until power is cut off from the UNO.
Any guess what might be happening? Before trying to go on battery power, everything worked fine, and i even managed to play a couple of songs uninterrupted.
I don't know if it is relevant, but ever since i tried to switch to batteries, the speaker now produces a "cracling pop" sound, until the DFPlayer is properly booted, which it didn't do before (in the testing where everything worked fine)
Following here i'm attaching the project schematics i'm following, as well as a photo of the whole contraption (i'm using the resistor with 2 DuPont F-M cables for ease-of-use. Apart from that, i've followed the schematic):

Here's my example code i'm using:
#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)"));
while (!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!"));
delay(500);
}
Serial.println(F("DFPlayer Mini online."));
myDFPlayer.volume(5); //Set volume value. From 0 to 30
myDFPlayer.play(2); //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!"));
myDFPlayer.play(2);
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;
}
}
