3D-Drucker

DFPlayer Mini-MP3-Player für Arduino

Der DFPlayer Mini-MP3-Player für Arduino* ist ein kleines und preisgünstiges MP3-Modul mit direktem Ausgang für einen Lautsprecher. Das Modul kann als eigenständiges Modul mit angeschlossenem Akku, Lautsprecher und Drucktasten oder in Kombination mit einem Arduino UNO oder jedem anderen Controller mit RX/TX-Fähigkeiten verwendet werden. Die Musik-Daten werden auf einer Micro-SD-Karte gespeichert.

Hersteller ist Flyrontech und das Modul ist auch unter der Bezeichnung FN-M19P erhältlich.

Spezifikation

  • Unterstützte Abtastraten (kHz): 8/11.025/12/12/16/22.05/24/32/44.1/48
  • 24 -Bit-DAC-Ausgang, Unterstützung für Dynamikbereich 90dB , SNR-Unterstützung 85dB
  • Unterstützt vollständig FAT16 , FAT32-Dateisystem, maximale Unterstützung 32GB der TF-Karte, Unterstützung 32G der U-Disc, 64M Bytes NORFLASH
  • Eine Vielzahl von Steuermodi, E/A-Steuermodus, serieller Modus, AD-Tasten-Steuermodus
  • Werbeton-Wartefunktion, die Musik kann unterbrochen werden. wenn die Werbung vorbei ist, wird die Musik weiter abgespielt
  • Audiodaten nach Ordnern sortiert, unterstützt bis zu 100 Ordner, jeder Ordner kann bis zu 255 Lieder aufnehmen
  • Lautstärke auf 30 Stufen einstellbar, EQ auf 6 Stufen einstellbar

Anwendung

  • Sprachübertragung der Autonavigation
  • Sprachanweisungen an Bahnhöfen und in Fahrzeugen
  • Sprachanweisungen in den Bereichen Elektrizität, Kommunikation und Finanzen
  • Sprachaufforderungen der öffentlichen Sicherheit
  • Mehrkanal-Sprachalarm oder Bedienungsanleitung der Ausrüstung
  • Sprachhinweise zum sicheren Fahren mit dem Elektro-Touristenauto
  • Alarm bei Ausfall der elektromechanischen Ausrüstung
  • Sprachanweisungen für Feueralarm
  • Automatische Sendeanlagen, regelmäßige Ausstrahlung.

Pin-Belegung

PinBeschreibungHinweis
vccEingangsspannungDC3,2~5,0V;Typ: DC4,2V; TYP: DC4,2V
RXSerieller UART-Eingang
TXSerieller UART-Ausgang
DAC_RAudioausgang rechter KanalKopfhörer und Verstärker
DAC_LAudioausgang linker KanalKopfhörer und Verstärker
SPK2Lautsprecher –Lautsprecher kleiner als 3 W
GNDGNDGND
SPK1Lautsprecher +Lautsprecher kleiner als 3 W
IOlTrigger-Anschluss 1Kurzes Drücken zum Abspielen des vorherigen Titels, lang drücken zum Verringern der Lautstärke
GNDGNDGND
102Trigger-Anschluss 2Kurzes Drücken zum Abspielen des nächsten Titels,  lang drücken zum Erhöhen der Lautstärke
ADKEY1AD-Anschluss 1Erstes Segment auslösen
ADKEY2AD-Anschluss 2Fünftes Segment auslösen
USB+USB* DPUSB-Anschluss
USB-USB- DMUSB-Anschluss
BUSYAbspiel-StatusLOW bedeutet abspielen, HIGH bedeutet nicht abspielen

Verwendung mit dem Arduino

Der DFPlayer Mini hat unterschiedliche Arbeitsmodi. Dazu zählt der Serielle Modus, in dem Kommandos über die Serielle Schnittstelle des Computers empfangen werden können, der AD Key Modus (Stand Alone), in dem viele Taster mit spezifischen Vorwiderständen ausgelesen werden können, sowie der I/O Modus, der bei der Verwendung mit dem Arduino-Board genutzt wird. Im folgenden geht dieses Tutorial auf den letzteren Fall ein.

I/O Modus mit Arduino

Im I/O Modus des DFPlayer Mini wird eine serielle Kommunikation zwischen Arduino und DFPlayer verwendet. Über eine spezielle Programmbibliothek lassen sich dann Steuersignale direkt an den Player senden.

Schaltplan: DFPlayer Mini mit Arduino

DFPlayer Mini mit Arduino Schaltung

Der DFPlayer wird erstmal mit 5V+ und GND verbunden, danach werden seine RX und TX Pins mit den Arduino Pins 10 und 11 verbunden. Um die nativen RX und TX Pins des Arduinos (0 und 1) nicht zu blockieren, verwenden wir die Software-Serial-Bibliothek. Sie ermöglicht es, eine zweite serielle Schnittstelle auf anderen Pins zu nutzen. Als letztes wird ein Lautsprecher an den DFPlayer angeschlossen. Alternativ wäre es auch möglich, anstelle des Lautsprechers einen Vorverstärker oder Kopfhörer and die Pins DAC_L, DAC_R und GND anzuschließen. Hier wäre also auch eine Stereo-Ausgabe möglich.

Bauteile

SD-Karte

Die SD-Karte im FAT16 oder FAT32-Format formatiert werden. Auf dem Mac wird zusätzlich noch die Einstellung der Partitionstabelle auf Master-Boot-Record benötigt. Hat man diese Einstellung nicht vorgenommen, wird die SD-Karte nicht erkannt und das DFPlayer-Modul nicht initialisiert.

Ist die Karte formatiert, lassen sich MP3-Dateien darauf kopieren. Abgespielt werden sie in der Reihenfolge, in der sie auf die Karte kopiert wurden. Der DFPlayer soll bis zu 100 Ordner mit bis zu 255 MP3s verwalten können. Getestet hab ich das nicht ;-)

Software-Vorbereitung

Für die Verwendung des DFPlayers muss die Programmbibliothek DFRobotDFPlayerMini installiert werden. Gehe dafür in der Arduino-Software ins Menü Sketch>Programmbibliotheken einbinden>Programmbibliotheken verwalten … und gib im Suchfeld DFPlayer ein. Installiere die erwähnte Bibliothek DFRobotDFPlayerMini.

Beispiel-Code

Der folgende Code ist der Beispielcode, den du nach der Installation der Programmbibliothek im Menü unter Datei>Beispiele>DFRobotDFPlayerMini>GetStarted finden kannst. Er spielt alle MP3s auf der SD-Karte für jeweils drei Sekunden ab und geht dann zur nächsten Datei.

/***************************************************
DFPlayer - A Mini MP3 Player For Arduino
 <https://www.dfrobot.com/product-1121.html>
 
 ***************************************************
 This example shows the basic function of library for DFPlayer.
 
 Created 2016-12-07
 By [Angelo qiao](Angelo.qiao@dfrobot.com)
 
 GNU Lesser General Public License.
 See <http://www.gnu.org/licenses/> for details.
 All above must be included in any redistribution
 ****************************************************/

/***********Notice and Trouble shooting***************
 1.Connection and Diagram can be found here
 <https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299#Connection_Diagram>
 2.This code is tested on Arduino Uno, Leonardo, Mega boards.
 ****************************************************/

#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;
  }
  
}

Willst du noch mehr über Arduino erfahren, damit du so richtig durchstarten kannst?
Oder suchst du spannende Projekte zum Nachbauen?
Dann sieh' dir unbedingt die E-Books von StartHardware an.


Bevor du gehst, würdest du mir helfen, diese Website besser zu machen, indem du ganz kurz an einer Umfrage teilnimmst? Sind nur zehn Fragen und das würde mir sehr viel bedeuten.

Ich hoffe, der Beitrag hilft dir weiter. Und falls du weitere Fragen hast, stelle sie gern hier im Arduino-Forum.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

 

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.