Ich habe aktuell einen DF Player mini an meinem Arduino MEga 2560 angeschlossen.
Pin 1 auf 5,5 V
Pin 2 über 1k Ohm an TX2 Pin 16
Pin 3 an RX2 Pin 17
Pin 10 an GND
Lautsprecher an PIN 6 und 8
mp3 Sound auf einer normalen 32GB SD Karte
Ich habe den Beispiel Sketch GetStarted hochgeladen, aber es wird nichts abgespielt.
Der serielle Monitor gibt aus:
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!
Auch Ändern von #define FPSerial Serial auf Serial2 bringt nichts, falls das überhaupt notwendig sein sollte..
Und ich hoffe du hast im Sketch auch die serielle zum DFplayer auch richtig eingestellt.
Und hast du denn schon mal den Player manuell getestet ?
Also per druck auf einen Tastenpin.
#include "Arduino.h"
#include "DFRobotDFPlayerMini.h"
#if (defined(ARDUINO_AVR_UNO) || defined(ESP8266)) // Using a soft serial port
#include <SoftwareSerial.h>
SoftwareSerial softSerial(/*rx =*/4, /*tx =*/5);
#define FPSerial softSerial
#else
#define FPSerial Serial2
#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(9600);
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!"));
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;
}
}
Das passt dann.
Und im Sketch kann ich selbst keinen Fehler erkennen.
Somit tippe ich auf einen Fehler im Aufbau.
Wie hast du alles verkabelt ?
Poste doch ein Foto, auf dem alles gut zu erkennen ist.
So wie du es oben beschrieben hast, ist es richtig.
Im Bild kann ich den Verlauf der seriellen Kabel nicht verfolgen.
Wenn aber der manuelle Funktion nicht da ist, ist ein Fehler mit der Spannung, oder der Player kann die Datei nicht lesen. Wie hast du die Karte formatiert ?