mp3-Play­er mit dem DFPlayerMini

Lese­zeit: 7 Minu­ten

Lösung
Seite als PDF

Der DFPlay­er­Mi­ni ist ein Modul, das mp3- und wav-Datei­en abspie­len kann. Der Laut­spre­cher wird über Steck­ver­bin­dun­gen mit dem Modul ver­bun­den.
Außer­dem kön­nen noch zwei Tas­ter ange­schlos­sen wer­den, mit denen die Laut­stär­ke ver­än­dert und ein Vor- und Rück­sprung der Musik­da­tei­en aus­ge­führt wer­den kann.

Die Musik­da­tei­en wer­den auf eine maxi­mal 32 GB gro­ße Mini-SD-Kar­te kopiert, die For­ma­tie­rung muss FAT32 sein.

Ordneransicht SD-Karte

Es kön­nen ver­schie­de­ne Ord­ner ange­legt wer­den. Zunächst kön­nen alle Datei­en natür­lich in das Stamm­ver­zeich­nis kopiert wer­den. Die Namen müs­sen der 4+3-Konvention (4 Zif­fern, Punkt und die Datei­endung mp3 oder wav) ent­spre­chen und durch­num­me­riert wer­den:
0001.mp3 0002.mp3 … 3000.mp3

Nach den vier Zif­fern dür­fen auch Buch­sta­ben ver­wen­det wer­den, die eine Iden­ti­fi­zie­rung des Titels ermög­li­chen (0001_Deep_Purple_Child_in_Time.mp3).
Außer­dem kön­nen auch wei­te­re Ver­zeich­nis­se ange­legt wer­den, die von 01 bis maxi­mal 99 bezeich­net wer­den kön­nen. In jedes die­ser Ver­zeich­nis kön­nen wie­der­um höchs­tens 3000 Datei­en abge­legt wer­den.

Wei­ter­hin gibt es das Son­der­ver­zeich­nis mp3. Datei­en in die­sem Ver­zeich­nis wer­den mit einem beson­de­ren Befehl (playMp3Folder) abgespielt.

Über­blick über die Funk­tio­nen. Jeder Funk­ti­on muss der Name des Play­ers (mp3Player) vor­an­ge­stellt werden:

DFRobotDFPlayerMini mp3Player;

Funk­tio­nen der Biblio­thek DFPlayerMini

Funk­ti­onAkti­onParameter/Beispiel
begin()Play­er startenSoft­wa­re­Se­ri­al DFPlayerSoftwareSerial(RX, TX); 
mp3Player.begin(DFPlayerSoftwareSerial);
volume(Wert)Laut­stär­ke
mög­li­che Wer­te 1 -30
volume(20);
EQ(Parameter)Equa­li­zerMög­li­che Parameter:
DFPLAYER_EQ_NORMAL
DFPLAYER_EQ_POP
DFPLAYER_EQ_ROCK
DFPLAYER_EQ_JAZZ
DFPLAYER_EQ_CLASSIC
DFPLAYER_EQ_BASS
play(Nummer)spielt eine Datei aus dem Stammverzeichnisplay(1)
pau­se()pau­siert die Wiedergabe
start()star­tet die Wie­der­ga­be nach einer Pause
pre­vious()vor­he­ri­gen Titel spielen
next()nächs­ten Titel spielen
loopFolder(Ordner)wie­der­holt alle Titel im OrdnerloopFolder(1)
alle Titel im Ord­ner 01 wer­den wiederholt
playFolder(Ordner, Num­mer)spielt den ange­ge­be­nen Titel aus dem OrdnerplayFolder(2, 1);
spielt den ers­ten Titel aus dem Ord­ner 02
der Ord­ner darf maxi­mal 255 Datei­en enthalten
playLargeFolder(Ordner, Num­mer)spielt den ange­ge­be­nen Titel aus dem OrdnerplayLargeFolder(2, 1);
spielt den ers­ten Titel aus dem Ord­ner 02
der Ord­ner darf bis zu 3000 Datei­en enthalten
playMp3Folder(Nummer)spielt die Titel aus dem Ord­ner mp3playMp3Folder(1);
spielt den ers­ten Titel aus dem Ord­ner mp3
der Ord­ner darf bis zu 3000 Datei­en enthalten
enab­le­Loo­pAll()alle Datei­en wiederholen
ran­dom­All()Datei­en zufäl­lig abspielen

 🔗Wei­te­re Infor­ma­tio­nen auf der Sei­te des Her­stel­lers (abge­ru­fen am 03.03.23)

MP3-Play­er im Seri­el­len Monitor

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

// RX/TX Port definieren
SoftwareSerial DFPlayerSoftwareSerial(3, 4);

// Name des Players
DFRobotDFPlayerMini mp3Player;

int Lautstaerke = 15;
/*
  Schalter für die Pausenfunktion
  Pause == true -> Wiedergabe gestoppt
  Pause == false -> Wiedergabe neu starten
*/
bool Pause = false;

void setup() 
{
  DFPlayerSoftwareSerial.begin(9600);
  Serial.begin(9600);

  delay(1000);
  
  // Player starten
  // falls die Parameter true, true nicht funktionieren
  // mp3Player.begin(DFPlayerSoftwareSerial, false, true);
  mp3Player.begin(DFPlayerSoftwareSerial, true, true);
  /*
    Equalizer:
    mp3Player.EQ(DFPLAYER_EQ_NORMAL);
    mp3Player.EQ(DFPLAYER_EQ_POP);
    mp3Player.EQ(DFPLAYER_EQ_ROCK);
    mp3Player.EQ(DFPLAYER_EQ_JAZZ);
    mp3Player.EQ(DFPLAYER_EQ_CLASSIC);
    mp3Player.EQ(DFPLAYER_EQ_BASS);
  */
  mp3Player.EQ(DFPLAYER_EQ_ROCK);

  // Lautstärke 1 .. 30
  mp3Player.volume(Lautstaerke);
  
  // zufällige Wiedergabe starten
  mp3Player.randomAll();

  // Menü
  Serial.println("-----------------------------");
  Serial.println("n   = nächster Titel");
  Serial.println("v   = voheriger Titel");
  Serial.println("+   = Laustärke +");
  Serial.println("-   = Lautstärke -");
  Serial.println("s   = Stopp/Weiter");
  Serial.println("z   = zufällige Wiedergabe");
  Serial.println("m   = Menü anzeigen");
  Serial.println("1-9 = Verzeichnis 1-9 spielen");  
  Serial.println("-----------------------------");
}

void loop() 
{
  // auf serielle Eingabe warten
  while (Serial.available() > 0) 
  {
    // Eingabe im Seriellen Monitor lesen
    char Zeichen = Serial.read();

    // wenn die Eingabe eine Zahl ist
    if (isdigit(Zeichen))
    {
      // char in String umwandeln, anschließend zu int konvertieren
      String Zahl = String(Zeichen);
      int Nummer = Zahl.toInt();
      Serial.println("Spiele Verzeichnis " + String(Nummer));
      mp3Player.loopFolder(Nummer);
      Pause = false;
    }

    // - -> Lautstärke -
    if (Zeichen == '-') 
    {
      if (Lautstaerke > 2) Lautstaerke = Lautstaerke - 2;
      mp3Player.volume(Lautstaerke);
      Serial.println("Lautst\u00e4rke: " + String(Lautstaerke));
    }

    // + -> Lautstärke +
    if (Zeichen == '+') 
    {
      if (Lautstaerke <= 28) Lautstaerke = Lautstaerke + 2;
      mp3Player.volume(Lautstaerke);
      Serial.println("Lautst\u00e4rke: " + String(Lautstaerke));
    }

    // n -> nächster Titel
    if (Zeichen == 'n') 
    {
      mp3Player.next();
      Serial.println("Nächster Titel");
    }

    // v -> vorheriger Titel
    if (Zeichen == 'v') 
    {
      mp3Player.previous();
      Serial.println("Vorheriger Titel");
    }

    // s -> Pause/Weiter
    if (Zeichen == 's') 
    {
      if (!Pause) 
      {
        mp3Player.stop();
      }
      if (Pause) 
      {
        mp3Player.start();
      }
      Pause = !Pause;
      if (Pause) Serial.println("Wiedergabe angehalten");
      if (!Pause) Serial.println("Wiedergabe fortgesetzt");
    }

    // z -> zufällige Wiedergabe Titel
    if (Zeichen == 'z') 
    {
      mp3Player.randomAll();
      Serial.println("Zufällige Wiedergabe gestartet");
      Pause = false;
    }

    // m -> Menü anzeigen
    if (Zeichen == 'm') 
    {
      Serial.println("-----------------------------");
      Serial.println("n   = nächster Titel");
      Serial.println("v   = voheriger Titel");
      Serial.println("+   = Laustärke +");
      Serial.println("-   = Lautstärke -");
      Serial.println("s   = Stopp/Weiter");
      Serial.println("z   = zufällige Wiedergabe");
      Serial.println("m   = Menü anzeigen");
      Serial.println("1-9 = Verzeichnis 1-9 spielen");  
      Serial.println("-----------------------------");
    }
  }
}
Pinbelegung DFPlayer Mini

Die Pins RX und TX kön­nen an belie­bi­gen Ports außer 0 und 1 ange­schlos­sen wer­den. Sie wer­den mit der Biblio­thek ➨Soft­wa­re­Se­ri­al angesteuert.

Benö­tig­te Bauteile:

  • DFPlay­er Mini
  • 2 Tas­ter
  • Lei­tungs­dräh­te
  • Laut­spre­cher

Baue die Schal­tung auf.
(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

Soll­te das Pro­gramm nicht funk­tio­nie­ren, ver­tau­sche die Pins für RX und TX.

Benö­tig­te Bibliothek:

Bin­de die benö­tig­ten Biblio­the­ken ein und defi­nie­re die Varia­blen.
Das Pro­gramm soll nur ein­mal lau­fen und benö­tigt des­halb nur den setup-Teil.

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

// RX/TX Port definieren
SoftwareSerial DFPlayerSoftwareSerial(3, 4);

// Name des Players
DFRobotDFPlayerMini mp3Player;

void setup()
{
  DFPlayerSoftwareSerial.begin(9600);
  Serial.begin(9600);

  // Player starten
  // mp3Player.begin(DFPlayerSoftwareSerial, false, true);
  mp3Player.begin(DFPlayerSoftwareSerial, true, true);

  /*
    Equalizer: mögliche Werte
    mp3Player.EQ(DFPLAYER_EQ_NORMAL);
    mp3Player.EQ(DFPLAYER_EQ_POP);
    mp3Player.EQ(DFPLAYER_EQ_ROCK);
    mp3Player.EQ(DFPLAYER_EQ_JAZZ);
    mp3Player.EQ(DFPLAYER_EQ_CLASSIC);
    mp3Player.EQ(DFPLAYER_EQ_BASS);
  */
  mp3Player.EQ(DFPLAYER_EQ_ROCK);

  // Lautstärke 1 .. 30
  mp3Player.volume(15);

  // alle Titel in zufälliger Reihenfolge spielen
  mp3Player.randomAll();
}

void loop()
{
  // bleibt leer, Programm läuft nur einmal
}

mp3-Play­er mit Tastenpad

Der mp3-Play­er soll über das Tas­ten­pad gesteu­ert werden.

Die Tas­ten­be­le­gung:

Tastenpad DFPlayer Tastenbelegung

Benö­tig­te Bauteile:

  • Laut­spre­cher
  • Tas­ten­pad
  • DFPlay­er Mini 
  • Lei­tungs­dräh­te

Baue die Schal­tung auf:
(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

Bin­de die benö­tig­ten Biblio­the­ken ein und defi­nie­re die Varia­blen.
Beach­te die Kommentare.

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

// RX/TX Port definieren
SoftwareSerial DFPlayerSoftwareSerial(3, 4);

// Name des Players
DFRobotDFPlayerMini mp3Player;
int Taster;
int Analogwert = 0;
int Lautstaerke = 10;
/*
  Schalter für die Pausenfunktion
  Pause == true -> Wiedergabe gestoppt
  Pause == false -> Wiedergabe neu starten
*/
bool Pause = false;

Der setup-Teil:

void setup()
{
  DFPlayerSoftwareSerial.begin(9600);
  Serial.begin(9600);

  // Player starten
  mp3Player.begin(DFPlayerSoftwareSerial, false, true);

  /*
    Equalizer:
    mp3Player.EQ(DFPLAYER_EQ_NORMAL);
    mp3Player.EQ(DFPLAYER_EQ_POP);
    mp3Player.EQ(DFPLAYER_EQ_ROCK);
    mp3Player.EQ(DFPLAYER_EQ_JAZZ);
    mp3Player.EQ(DFPLAYER_EQ_CLASSIC);
    mp3Player.EQ(DFPLAYER_EQ_BASS);
  */
  mp3Player.EQ(DFPLAYER_EQ_ROCK);

  // Lautstärke 1 .. 30
  mp3Player.volume(Lautstaerke);

  // Wiedergabe starten
  mp3Player.enableLoopAll();
}
Download

Die Abfra­ge des Tas­ten­pads erle­digt die Funk­ti­on Tasterabfrage().

int Tasterabfrage()
{
  int Analogwert = analogRead(A0);
  
  // kurzes delay() -> doppelten Tastendruck so weit wie möglich verhindern
  delay(200);

  // Serial.println(Analogwert);

  /* 
     A0 gibt je nach Taster einen Wert aus
     über den Seriellen Monitor wird dieser Wert angezeigt
     und kann dann eventuell angepasst werden
  */
  switch (Analogwert)
  {
    case 0 ... 20:
      Taster = 1;
      break;
    case 30 ... 60:
      Taster = 2;
      break;
    case  70 ... 120:
      Taster = 3;
      break;
    case 150 ... 200:
      Taster = 4;
      break;
    case 300 ... 400:
      Taster = 5;
      break;
    default:
      return 0;
  }

  // gedrückten Taster zurückgeben
  return Taster;
}

Der loop-Teil. Beach­te die Kommentare.

void loop()
{
  Taster = Tasterabfrage();

  // Taster links -> Lautstärke -
  if (Taster == 1)
  {
    if (Lautstaerke > 0) Lautstaerke = Lautstaerke - 2;
    mp3Player.volume(Lautstaerke);
    Serial.println("Lautst\u00e4rke: " + String(Lautstaerke));

  }

  // Taster oben Mitte -> nächster Titel
  if (Taster == 2)
  {
    mp3Player.next();
  }

  // Taster unten Mitte -> vorheriger Titel
  if (Taster == 3)
  {
    mp3Player.previous();
  }

  // Taster rechts -> Lautstärke +
  if (Taster == 4)
  {
    if (Lautstaerke < 30) Lautstaerke = Lautstaerke + 2;
    mp3Player.volume(Lautstaerke);
    Serial.println("Lautst\u00e4rke: " + String(Lautstaerke));
  }
  
  // Taster außen -> Pause/Weiter
  if (Taster == 5)
  {
    if (!Pause)
    {
      Pause = !Pause;
      mp3Player.stop();
    }
    if (Pause)
    {
      Pause = !Pause;
      mp3Player.start();
    }
  }
}

Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Aufgaben:


Letzte Aktualisierung: 3. Apr 2024 @ 19:38