mp3-Player mit dem DFPlay­er Mini

Lese­zeit: 8 Minu­ten
Navi­ga­ti­on

Der DFPlay­er­Mi­ni ist ein Modul, das mp3- und wav-Dateien 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-Karte kopiert, die For­ma­tie­rung muss FAT32 sein.

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) abge­spielt.

Über­blick über die Metho­den. Jeder Metho­de muss der Name des Play­ers (mp3Player) vor­an­ge­stellt wer­den:

DFRobotDFPlayerMini mp3Player;

Metho­den der Biblio­thek DFPlay­er­Mi­ni

Metho­de Funk­ti­onBei­spiel
begin()Play­er star­tenSoft­ware­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()Equa­li­zerEQ(DFPLAYER_EQ_NORMAL);
EQ(DFPLAYER_EQ_POP);
EQ(DFPLAYER_EQ_ROCK);
EQ(DFPLAYER_EQ_JAZZ);
EQ(DFPLAYER_EQ_CLASSIC);
EQ(DFPLAYER_EQ_BASS);
play(Nummer)spielt eine Datei aus dem Stamm­ver­zeich­nisplay(1)
pau­se()pau­siert die Wie­der­ga­be
start()star­tet die Wie­der­ga­be nach einer Pau­se
pre­vious()vor­he­ri­gen Titel spie­len
next()nächs­ten Titel spie­len
loopFolder(Ordner)wie­der­holt alle Titel im Ord­nerloopFolder(1)
alle Titel im Ord­ner 01 wer­den wie­der­holt
playFolder(Ordner, Num­mer)spielt den ange­ge­be­nen Titel aus dem Ord­nerplayFolder(2, 1);
spielt den ers­ten Titel aus dem Ord­ner 02
der Ord­ner darf maxi­mal 255 Datei­en ent­hal­ten
playLargeFolder(Ordner, Num­mer)spielt den ange­ge­be­nen Titel aus dem Ord­nerplayLargeFolder(2, 1);
spielt den ers­ten Titel aus dem Ord­ner 02
der Ord­ner darf bis zu 3000 Datei­en ent­hal­ten
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 ent­hal­ten
enab­le­Loo­pAll()alle Datei­en wie­der­ho­len
ran­dom­All()Datei­en zufäl­lig abspie­len
read­FileCounts()liest die Anzahl aller Datei­en auf der SD-Karte
readFileCountsInFolder(Ordner)liest die Anzahl der Datei­en im Ord­nernt Datei­en = mp3Player.readFileCountsInFolder(1);
Serial.print(String(Dateien);
lis­tet die Anzahl der Datei­en im Ord­ner 01 auf

Wei­te­re Infor­ma­tio­nen

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­ware­Se­ri­al ange­steu­ert.

Benö­tig­te Bau­tei­le:

  • DFPlay­er Mini
  • 2 Tas­ter
  • 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)

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

Benö­tig­te Biblio­thek:
Sketch → Biblio­thek ein­bin­den → Biblio­the­ken ver­wal­ten

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

# include <SoftwareSerial.h>
# include <DFRobotDFPlayerMini.h>

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

// Name des Players
DFRobotDFPlayerMini mp3Player;

// Nummer des Ordners, der Ordner muss Daten enthalten
int Ordner = 1;

Das Pro­gramm soll nur ein­mal lau­fen und benö­tigt des­halb nur den setup-Teil.

Beach­te die Kom­men­ta­re.

void setup()
{
  DFPlayerSoftwareSerial.begin(9600);
  Serial.begin(9600);
  
  mp3Player.begin(DFPlayerSoftwareSerial);
  Serial.println(mp3Player.readFileCounts());
  
  /*
    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);

  // Anzahl der Dateien im Ordner feststellen und anzeigen
  int AnzahlDateien = mp3Player.readFileCountsInFolder(Ordner);
  // wenn sich im Ordner keine Daten befinden
  if (AnzahlDateien == -1)
  {
    Serial.println("Der Ordner enth\u00e4lt keine Musikdateien!");
    Serial.println("Das Programm wird beendet!");
    while(1);
  }

  else
  {
    Serial.print(String(AnzahlDateien) + " Dateien im Ordner " + String(Ordner));
    mp3Player.loopFolder(Ordner);
  }
}

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

mp3-Player mit Tas­ten­pad

Der mp3-Player soll über das Tas­ten­pad gesteu­ert wer­den.

Die Tas­ten­be­le­gung:

Benö­tig­te Bau­tei­le:

  • 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 Kom­men­ta­re

# include <SoftwareSerial.h>
# include <DFRobotDFPlayerMini.h>

// wird für die Abfrage von Wertebereichen mit switch benötigt
# include <stdio.h>

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

// 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);

  /*
    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);

  // Anzahl der Dateien auf der SD-Karte feststellen und anzeigen
  int AnzahlDateien = mp3Player.readFileCounts();

  // wenn sich auf der SD-Karte keine Daten befinden
  if (AnzahlDateien == -1)
  {
    Serial.println("Der Ordner enth\u00e4lt keine Musikdateien!");
    Serial.println("das Programm wird beendet!");
    while (1);
  }

  // die SD-Karte enthält Daten
  else
  {
    Serial.println(String(AnzahlDateien) + " Dateien auf der SD-Karte ");
    Serial.println("Lautst\u00e4rke: " + String(mp3Player.readVolume()));

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

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

int Tasterabfrage() 
{ 
  Analogwert = analogRead(A0); 
  delay(200);    
  Serial.println(Analogwert);
  
  /* 
    für die Abfrage von Wertebereichen muss
    # include <stdio.h>
    im Kopf eingebunden werden
    A0 gibt je nach gedrückten Taster einen Wert aus  
    über den Seriellen Monitor wird dieser Wert angezeigt       
    und kann dann eventuell angepasst werden  
    die Zeile Serial.println … kann dann gelöscht werden 
    Taster 1 → links    
    Taster 2 → oben Mitte    
    Taster 3 → unten Mitte    
    Taster 4 → rechts    
    Taster 5 → außen   
  */  
  
  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 Kom­men­ta­re.

void loop()
{
  Taster = Tasterabfrage();

  // Taster links -> Lautstärke -
  if (Taster == 1)
  {
    if (Lautstaerke > 0) Lautstaerke = Lautstaerke - 2;
    mp3Player.volume(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();
    }
  }
}


Ver­wand­te Auf­ga­ben:


Letzte Aktualisierung: 3. Sep 2020 @ 14:09