Nr | Pin | Beschreibung | Funktion |
---|---|---|---|
1 | VCC | Betriebsspannung | 3,3V - 5V |
2 | RX | UART serieller Eingang | |
3 | TX | UART serieller Ausgang | |
4 | DAC_R | Audio-Ausgang (rechter Kanal) | für Kopfhörer oder Verstärker |
5 | DAC_L | Audio-Ausgang (linker Kanal) | für Kopfhörer oder Verstärker |
6 | SPK2 | Lautsprecher (-) | für passive Lautsprecher bis zu 3 Watt |
7 | GND | Ground | |
8 | SPK1 | Lautsprecher (+) | für passive Lautsprecher bis zu 3 Watt |
9 | IO1 | Trigger port 1 | Short press to play previous (long press to decrease volume) |
10 | GND | Ground | |
11 | IO2 | Trigger port 2 | Short press to play next(long press to increase volume) |
12 | ADKEY1 | AD Port 1 | Trigger play first segment |
13 | ADKEY2 | AD Port 2 | Trigger play fifth segment |
14 | USB+ | USB+ DP | USB Port |
15 | USB- | USB- DM | USB Port |
16 | BUSY | Play status | LOW: Geräte spielt; HIGH: Geräte in Ruhe |
Zum Steuern des MP3-Moduls steht eine serielle Schnittstelle zur Verfügung. Eine Befehlssequenz besteht immer aus zehn Byte:
Byte | Bedeutung |
---|---|
0x7E | Startbyte |
0xFF | Versionsbyte |
0x06 | Anzahl der Bytes beginnend mit dem Versionsbyte bis einschließlich dem LSB des Parameters, immer 0x06 |
CMD | Befehlsbyte (siehe Steuerbefehle) |
FB | Feedback, 0x01: Gibt Feedback zurück, 0x00: kein Feedback |
PMSB | Höherwertiges Byte des Parameters |
PLSB | Niederwertiges Byte des Parameters |
CMSB | Höherwertiges Byte der Prüfsumme |
CLSB | Niederwertiges Byte der Prüfsumme |
0xEF | Endbyte |
Die Prüfsumme berechnet sich aus der folgenden Formel:
0 - Versionsbyte - Anzahl der Bytes - Commandbyte - Feedback - Parameter_MSB - Parameter_LSB
Wenn dann das Ergebnis im Hexadezimalformat vorliegt, ergeben die rechten vier Stellen der Hexadezimalzahl die
Prüfsumme. Aus diesen nunmehr vier Stellen ergeben die linken zwei Stellen (ein Byte) das Checksum_MSB und die
rechten zwei Stellen (ein Byte) das Checksum_LSB.
Audiodateien, die direkt im Hauptverzeichnis des Speichermediums (SD-Karte oder USB-Flash) gespeichert sind
(maximal 3000 Dateien), müssen in 0001.mp3 / 0001.wav, 0002.mp3 / 0002.wav, 0003.mp3 / 0003.wav, .......
3000.mp3 / 3000.wav usw. umbenannt werden.
Nach dem vierstelligen numerischen Wert kann weiterer Text entsprechend dem verwendeten FAT-Format verwendet
werden (z.B. 0001_Testdatei.MP3)
Grundsätzlich unterstützt das Modul auch verschiedene Unterverzeichnisse \00 bis \99 mit dreistelligen
Dateinamen (001.MP3 bis 255.MP3).
In den Ordnern "/MP3" und/oder "/ADVERT" können jeweils bis zu 9999 Dateien gespeichert
werden. Die oben genannten Namensregeln gelten aber auch hier.
Hinweis: Es ist wichtig zu wissen, dass in der Folge beim Absetzen eines Befehls keine tatsächlichen Dateinamen übergeben werden, sondern eine Platznummer welche sich aber auf die tatsächliche physikalische Position in der Dateizuordnungstabelle (FAT) des Mediums bezieht und nichts mit dem Dateinamen zu tun hat. Von daher ist es von essentieller Bedeutung in welcher Reihenfolge die Dateien auf das Speichermedium übertragen werden.
Hinweis: Es kann sein, dass nicht jeder Befehl bei jedem Modul funktioniert oder plausible Daten zurück gibt.
Befehlsbyte | Funktion | Parameter (16bit) |
---|---|---|
0x01 | Spielt die nächste Datei | - |
0x02 | Spielt die vorherige Datei | - |
0x03 | Spielt eine bestimmte Datei aus dem Hauptverzeichnis | [0..2999] bzw. [1..3000] |
0x04 | Lautstärke um 1 erhöhen | - |
0x05 | Lautstärke um 1 verringern | - |
0x06 | Lautstärke auf bestimmten Wert setzen | [0..30] |
0x07 | Equalizer auf Preset setzen | [0..5] = [Normal, Pop, Rock, Jazz, Klassik, Bass] |
0x08 | Abspielmodus setzen | [0..3] = [repeat, folder repeat, single repeat, random] |
0x09 | Setzt die Datenquelle fest | [0..4] = [U, TF, AUX, SLEEP, FLASH] |
0x0A | Modul in Standby-Modus versetzen | - |
0x0B | Modul in den Normal-Modus versetzen (aufgeweckt) | - |
0x0C | Modul zurücksetzen und gibt den Status zurück | - |
0x0D | Spielt einen pausierten Track weiter oder startet den aktuellen Track | - |
0x0E | Pausiert den gerade abgespielten Track | |
0x0F | Spielt eine Datei aus dem Ordner | [1..10] bzw. [1..99] |
0x10 | Schaltet den Verstärker ein oder aus und setzt den Verstärkungsfaktor | DH=1: Open volume adjust; DL: set volume gain [0..31] |
0x11 | Schaltet das wiederholende Abspielen aller Datein ein oder aus | 1: einschalten; 0: auschalten |
0x12 | Spielt eine Datei aus dem Ordner "/MP3" ab | [1..9999] |
0x13 | Unterbricht die laufende Datei, spielt eine Werbeunterbrechung aus "/ADVERT" und setzt das Abspielen fort | [1..9999] |
0x14 | Spielt eine Datei aus einem "großen" Ordner ab | [1..15] |
0x15 | Beendet das Abspielen einer ADVERT-Datei und setzt danach das abspielen der zuvor unterbrochenen Datei wieder fort | |
0x16 | Beendet das Abspielen des laufenden Tracks | |
0x17 | Wiederholt die Dateien aus dem Ordner | [1..99] |
0x18 | Spielt alle Dateien des Mediums in zufälliger Reihenfolge | |
0x19 | Spielt eine laufende Datei wiederholend ab | |
0x1A | Schalte den Verstaerker stumm |
Befehlsbyte | Funktion | Parameter (16bit) |
---|---|---|
0x3F | Gibt das aktuelle Speichermedium zurück | [1..4] |
0x42 | Gibt den aktuellen Status zurück | |
0x43 | Gibt den aktuellen Lautstärkepegel zurück | |
0x44 | Gibt den aktuellen Equalizer-Modus zurück | |
0x45 | Gibt den aktuellen Abspiel-Modus zurück | |
0x46 | Gibt die aktuelle Softwareversion zurück | |
0x47 | Gibt die Anzahl der Dateien vom Medium USB-Speicherstick zurück | |
0x48 | Gibt die Anzahl der Dateien vom Medium SD-Karte zurück | |
0x49 | Gibt die Anzahl der Dateien vom Medium Flash zurück | |
0x4B | Gibt die momentan gespielte Datei vom Medium SD-Karte zurück | |
0x4C | Gibt die momentan gespielte Datei vom Medium USB-Speicherstick zurück | |
0x4D | Gibt die momentan gespielte Datei vom Medium Flash zurück | |
0x4E | Gibt die Anzahl der Dateien im abgefragten Ordner zurück | |
0x4F | Gibt die Anzahl der Ordner auf dem Medium zurück |
Der folgende Sketch ist eine Demo, die auf der Library DFRobotDFPlayerMini basiert:
#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(9600);
Serial.println();
Serial.print(F("Init DFPlayer..."));
if (!myDFPlayer.begin(mySoftwareSerial)) {
Serial.println(F("Error!"));
while(true);
}
Serial.println(F("[ok]"));
//Set volume value. From 0 to 30
myDFPlayer.volume(17);
myDFPlayer.play(1); // Play the first mp3
}
void loop()
{
static unsigned long timer = millis();
//Play next mp3 every 10 seconds
if (millis() - timer > 10000) {
timer = millis();
myDFPlayer.next();
}
if (myDFPlayer.available()) {
printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different
}
}
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 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;
}
break;
}
}
zurück