Für eine wechselnde Ansage in einem Museums-Projekt will ich den DFPlayer Mini verwenden. Dafür gibt es mind. 6 verschieden Libs, auswählbar und installierbar direkt aus der Arduino-IDE ... Nach Datenblatt soll die verwendete SD-Karte (FAT32) mindestens einen Ordner mit dem Namen "01" haben und/oder einen Ordner "MP3" ... die Dateien darin heissen 0001.mp3, 0002.mp3 usw. Zusätzlich habe ich noch meine 9 Files einfach in das Rootverzeichnis kopiert. Langer Rede kurzer Sinn, ausser dem Befehl player.next() bzw. player.playNext() (heisst je nach Lib etwas anders) funktioniert quasi kein einziges der verfügbaren Kommandos. Kein einziger Befehl, um ein File direkt "anzuspringen", wie z.B. player.play(1,1) - soll das Abspielen von Datei 0001.mp3 im Ordner 01 bewirken. Auch player.playFromMP3(3) - soll File 0003.mp3 aus dem "Sonderverzeichnis" MP3 abslielen ... NICHTS! Selbst das Kommando player.volume(20) bewirkt, dass jede Datei nur noch mit einem extrem kurzen Zischlaut "wiedergegeben" wird. In Verbindung mit dem Komando player.next... wird es bestenfalls ignoriert. Es wird immer mit maximaler Lautstärke wiedergegeben. Es ist auch völlig egal, ob das Volumen-Kommando vor oder nach dem Play-Befehl steht. Ich habe einen kleinen 8-Ohm-Lautsprecher dran, für Testzwecke noch mit 10 Ohm Vorwiderstand, damit es mich auf dem Schreibtisch nicht so anbrüllt und um evtl. Fehler über die Stromversorgung (aus USB, parallel zum Arduno Nano) zu minimieren. Ich glaube ja nicht, dass all die Autoren der Libs alle blöd sind, aber ich finde die Ursache des Problems nicht. Notfalls verzichte ich auf die Libs und verpacke die par Befehlsbytes selber, aber man muss ja das Fahrrad nicht jedesmal neu erfinden. Die Verkabelung (z.B. 2x Ground am DF), RS232 ... alles dutzendfach geprüft, kein Fehler. Mehrere SD-Karten probiert, in FAT16 und FAT32 ... macht keinen Unterschied. Was könnte die Ursache für dieses Verhalten sein?
:
Bearbeitet durch User
Frank E. schrieb: > Ich glaube ja nicht, dass all die Autoren der Libs alle blöd sind, aber > ich finde die Ursache des Problems nicht. Das Hauptproblem ist, dass immer wieder andere Produkte unter dem Namen "DFPlayer" verkauft werden. Da kaufst du eine Katze im Sack. Man kann sich nicht einmal anhand von Fotos orientieren, weil die Firmware darauf nicht immer gleich ist.
Frank E. schrieb: > RS232 Das ist ja schon mal falsch! Eben weil Stefan F. schrieb: > immer wieder andere Produkte unter dem Namen "DFPlayer" verkauft werden. habe ich das direkt an einen FT232 angeschlossen und die Kommandos selber geschickt, bis es funktioniert hat. Dann weiss man was läuft! Und Checksumme nicht vergessen! Ich habe glaube ich habe sogar 68R vor dem Lautsprecher, sonst stürzt mir das Teil ab... Gruss Chregu Edit: PS: Hier meine verwendeten Befehle:
1 | 7E FF 06 03 00 00 01 FE F7 EF 1. Stück abspielen |
2 | 7E FF 06 03 00 00 02 FE F6 EF 2. Stück abspielen |
3 | |
4 | ^^ ^^ |
5 | Checksum: 0x1000- |
6 | (^^+^^+^^+^^+^^+^^) |
7 | |
8 | 7E FF 06 03 00 00 03 FE F5 EF 3. Stück abspielen |
9 | 7E FF 06 03 00 00 04 FE F4 EF 4. Stück abspielen |
10 | |
11 | 7E FF 06 08 00 00 01 FE F2 EF 1. Stück wiederholt abspielen |
12 | 7E FF 06 08 00 00 02 FE F1 EF 2. Stück wiederholt abspielen |
13 | 7E FF 06 08 00 00 03 FE F0 EF 3. Stück wiederholt abspielen |
14 | 7E FF 06 08 00 00 04 FE EF EF 4. Stück wiederholt abspielen |
15 | |
16 | 7E FF 06 06 00 00 1E FE D7 EF Volume 30 |
17 | 7E FF 06 06 00 00 1D FE D8 EF Volume 29 |
18 | 7E FF 06 06 00 00 1C FE D9 EF Volume 28 |
19 | 7E FF 06 06 00 00 1B FE DA EF Volume 27 |
20 | 7E FF 06 06 00 00 1A FE DB EF Volume 26 |
21 | 7E FF 06 06 00 00 19 FE DC EF Volume 25 |
22 | 7E FF 06 06 00 00 18 FE DD EF Volume 24 |
23 | 7E FF 06 06 00 00 17 FE DE EF Volume 23 |
24 | 7E FF 06 06 00 00 16 FE DF EF Volume 22 |
25 | 7E FF 06 06 00 00 15 FE E0 EF Volume 21 |
26 | 7E FF 06 06 00 00 14 FE E1 EF Volume 20 |
27 | 7E FF 06 06 00 00 13 FE E2 EF Volume 19 |
28 | 7E FF 06 06 00 00 12 FE E3 EF Volume 18 |
29 | 7E FF 06 06 00 00 11 FE E4 EF Volume 17 |
30 | 7E FF 06 06 00 00 10 FE E5 EF Volume 16 |
31 | 7E FF 06 06 00 00 0F FE E6 EF Volume 15 |
32 | 7E FF 06 06 00 00 0E FE E7 EF Volume 14 |
33 | 7E FF 06 06 00 00 0D FE E8 EF Volume 13 |
34 | 7E FF 06 06 00 00 0C FE E9 EF Volume 12 |
35 | 7E FF 06 06 00 00 0B FE EA EF Volume 11 |
36 | 7E FF 06 06 00 00 0A FE EB EF Volume 10 |
37 | 7E FF 06 06 00 00 09 FE EC EF Volume 09 |
38 | 7E FF 06 06 00 00 08 FE ED EF Volume 08 |
39 | 7E FF 06 06 00 00 07 FE EE EF Volume 07 |
40 | 7E FF 06 06 00 00 06 FE EF EF Volume 06 |
41 | 7E FF 06 06 00 00 05 FE F0 EF Volume 05 |
42 | 7E FF 06 06 00 00 04 FE F1 EF Volume 04 |
43 | 7E FF 06 06 00 00 03 FE F2 EF Volume 03 |
44 | 7E FF 06 06 00 00 02 FE F3 EF Volume 02 |
45 | 7E FF 06 06 00 00 01 FE F4 EF Volume 01 |
46 | 7E FF 06 06 00 00 00 FE F5 EF Volume 00 |
47 | |
48 | 7E FF 06 16 00 00 00 FE E5 EF Stop Playback |
:
Bearbeitet durch User
Frank E. schrieb: > Was könnte die Ursache für dieses Verhalten sein? Zeig uns einen VOLLSTÄNDIGEN Schaltplan und ein paar Bilder vom Aufabu.
Stefan F. schrieb: > weil die Firmware darauf > nicht immer gleich ist. ..habe ich bisher noch nicht bemerkt, habe aber auch nicht ALLE Befehle immer getestet. Abstürze werden vermieden wenn ein Abblockkondensator direkt an GND und Uv angeschlossen ist. Ein kleines Testprogramm ohne MP3 Lib ist schnell gemacht. MfG alterknacker
Frank E. schrieb: > Die Verkabelung (z.B. 2x Ground am DF), RS232 ... alles dutzendfach > geprüft, kein Fehler. Was meinst du mit RS232? DFPlayer verträgt 3.3V max. an Rx. Frank E. schrieb: > die Dateien darin heissen 0001.mp3, 0002.mp3 usw. Muss nicht sein. Nur die ersten 4 zeichen werden geprüft. Also, "0004.mp3" und "0004MySong.mp3" ist genau dasselbe. P.S. Und nicht der Name ist wichtig, sondern die Reihenfolge beim kopieren auf SD-card.
:
Bearbeitet durch User
Marc V. schrieb: > P.S. > Und nicht der Name ist wichtig, sondern die Reihenfolge beim > kopieren auf SD-card. Jaja, sagt der Oberexperte . . . Kleiner Tipp. Es soll Leute geben, die ein FAT gescheit lesen können und keine vermurksten Amateuerlösungen zu Stande bringen.
Falk B. schrieb: > Jaja, sagt der Oberexperte . . . Das du neidisch auf klügere bist, verstehe ich vollkommen... > Kleiner Tipp. Es soll Leute geben, die ein FAT gescheit lesen können und > keine vermurksten Amateuerlösungen zu Stande bringen. Kleiner Tipp: Kluge Leute, wenn sie schon keine Ahnung haben, melden sich erst gar nicht. Noch klügere, wenn sie schon nicht mit diesem IC gearbeitet haben, lesen erst das DaBla. Für solche, die nicht lesen können, hier ein Auszug aus DaBla: Here it works according to physical sequence when you copy the files from computer to SD card or USB flash drive. For example, when the module receives a command to play the track 0001.mp3, it will play the 1st track you copied from computer, probably 0001.mp3 or not (maybe it would play 0007.mp3 if it was the first one you copied from computer). Und jetzt ab in die Ecke und melde dich nicht wenn du keine Ahnung hast.
:
Bearbeitet durch User
Marc V. schrieb: > Und jetzt ab in die Ecke und melde dich nicht wenn du keine Ahnung hast. Ich habe die Files in der richtigen physischen Reihenfolge kopiert, bezüglich des jeweilgen Ordners. In meinem Post geht es übrigens nicht mal darum, dass die nicht in der richtigen Reihenfolge gespielt werden, sondern ausser mit player.next(), überhaupt nicht ...
Marc V. schrieb: > Frank E. schrieb: >> Die Verkabelung (z.B. 2x Ground am DF), RS232 ... alles dutzendfach >> geprüft, kein Fehler. > Was meinst du mit RS232? > DFPlayer verträgt 3.3V max. an Rx. Sorry, da habe ich meine Zweifel, mir war so, von 3,3...5V gelesen zu haben. Der CHip enthält ja auch einen Class-D-Verstärker, der 2,5...3W an 8 Ohm liefern soll. Der Chip hat keine 2 Vcc-Anschlüsse. Mit 3,3 statt 5V stelle ich mir das etwas schwierig vor. Aber ich sehe natürlich nochmal nach ...
Frank E. schrieb: > In meinem Post geht es übrigens nicht > mal darum, dass die nicht in der richtigen Reihenfolge gespielt werden, > sondern ausser mit player.next(), überhaupt nicht ... Und was genau hast du mit RS232 gemeint? RS232 schreibt +/-12V vor. DFPlayer verträgt aber maximal 3.3V am Rx. Hier:
:
Bearbeitet durch User
Marc V. schrieb: > Frank E. schrieb: >> In meinem Post geht es übrigens nicht >> mal darum, dass die nicht in der richtigen Reihenfolge gespielt werden, >> sondern ausser mit player.next(), überhaupt nicht ... > > Und was genau hast du mit RS232 gemeint? > RS232 schreibt +/-12V vor. > DFPlayer verträgt aber maximal 3.3V am Rx. Das Protokoll heisst schon RS232. Die konkrete Ausführung, die du meinst, ist V24 (wegen der Spannungsdifferenz +-12V). RS232 geht auch mit TTL-Pegel ...
Frank E. schrieb: > Das Protokoll heisst schon RS232. RS232 ist kein Protokoll. > RS232 geht auch mit TTL-Pegel ... Ja, nur heißt es dann üblicherweise nicht RS232, sondern Serielle Schnittstelle, UART oder USART. RS232 ist für positive/negative Pegel vorgesehen. P.S. Und Signalpegel zwischen −3 V und +3 V gelten als undefiniert.
:
Bearbeitet durch User
Frank E. schrieb: > Das Protokoll heisst schon RS232. Nein. Außerdem sind bei RS232 die Signale gegenüber UART invertiert.
> Das Protokoll heisst schon RS232.
Nein heisst es nicht. Vergleich auch mal mit RS485 oder RS422.
Allerdings hat es sich irgendwie eingebuergert weil RS232 in
Bastlerkreisen am verbreitesten ist und asyncrone serielle Uebertragung
so unangenehm nach Streber klingt. :)
Vanye
https://wiki.dfrobot.com/DFPlayer_Mini_SKU_DFR0299 Das Ding will eine UART SIgnal haben, das 3,3V hat. Also sowas, wie es aus einem FTDI232 oder ähnlichem kommt. Oder einem Arduino. Der läuft zwar meist mit 5V, da scheint die Kiste aber zu vertragen. "NOTE: The order you copy the mp3 into micro SD card will affect the order mp3 played , which means play(1) function will play the first mp3 copied into micro SD card. " Ohje! Noch welche, die nicht gescheit programmieren können oder wollen. Möglicherweise verschluckt sich die schlaffe Software an der vorhandenen FAT. Versuch mal die SD-Karte komplett zu formatieren und dann ein paar Dateien neu draufzukopieren. Also erst Verzeichnis MP3 anlegen und dann die Dateien reinkopieren.
Frank E. schrieb: > Ich glaube ja nicht, dass all die Autoren der Libs alle blöd sind, Es gibt von den DFPlayern verschiedene Firmwareversionen. Am besten liest Du mal die Firmware-Version aus, dafür gibt es einen gesonderten Befehl. Dann ist man schon mal einen Schritt weiter. Einige Firmawreversionen können nämlich nur platt vorliegende Dateien, andere beherrschen Ordnerstrukturen, andere können nur Dateien im Format 8.3, andere können nur Hochzähldateien. Typisch chinesisches Chaos halt. Hinzu kommt, dass es im Netz genauso viel voneinander abweichende Dokumentationen zu der DFPlayer-Software gibt. Verschlimmert wird die Situation dadurch, dass bestimmte Firmware-Versionen auch noch Bugs haben, die sich nur durch Drumherumprogrammieren lösen lassen. Ich kenne da zum Beispiel einen Kandidaten, dem man einen ganz bestimmten Befehl exakt zweimal schicken muss, damit er dann funktioniert. Andere Firmawareversionen allerdings reagieren darauf allergisch. > Dafür gibt es mind. 6 verschieden Libs Gehe mal davon aus, dass die 6 verschiedenen Libs auch 6 verschiedene Firmware-Versionen abfackeln. Es ist also nicht einfach, die für Dich passende zu finden - falls es die gibt. > Notfalls verzichte ich auf die Libs und verpacke die par Befehlsbytes > selber Jepp.
Keine Ahnung, was du falsch machst. Ich habe eine zufällige Bibliothek genommen, die mich ansprach. Dazu irgendein Board vom Chinesen. Die Beachaltung gemäß Vorgabe. SD Karte gemäß Vorgabe. Funktionierte auf Anhieb und läuft seit Jahren.
Armin K. schrieb: > Marc V. schrieb: >> Hier: > > Excel verwenden um Schaltplan zu zeichnen finde ich Oberklasse... Noch ein Klugscheißer? Hier noch einmal, nur für dich. Du verstehst natürlich sofort um was es da geht?
:
Bearbeitet durch User
Chris K. schrieb: > Keine Ahnung, was du falsch machst. Ich habe eine zufällige Bibliothek > genommen, die mich ansprach. Dazu irgendein Board vom Chinesen. Die > Beachaltung gemäß Vorgabe. SD Karte gemäß Vorgabe. Funktionierte auf > Anhieb und läuft seit Jahren. Toll, das hilft dem OP ungemein weiter! Danke für deinen wertvollen Beitrag!
Vielen Dank bis hierher. Im konkreten Projekt (was mal wieder gaaanz eilig ist), komme ich mit dem Befehl player.next() erstmal hin, weil die Ansagen tatsächlich pseudo-zufällig sein dürfen. Aber in ca. 3 Wochen brauche ich die gezielte Auswahl von Files ... Firmware-Version (falls der Befehl akzeptiert wird) versuche ich auszulesen und hier reinzuschreiben.
Hallo, zu der Aussage das bestimmte Firmware Versionen Bugs haben weil man jedes Kommando 2 x senden muss für die korrekte Antwort. ich weiß nicht mit welcher Library das getestet wurde und ob da vielleicht wirklich ein Firmware Bug vorliegt, aber für die "DFRobotDFPlayerMini" library hatte ich auch das Phänomen und es lag nicht am DFplayer, es lag an einem Bug in der Library Grund ist, das der Chip "AA20HFJ648" und auch andere ein Acknowledge senden, das kann man mit "mp3Player.begin(SoftwareSerial,false,true);" auch abstellen, das false ist für ack das true für reset Die library arbeitet aber an der Stelle nicht korrekt, weil nicht auf das Ack gewartet wird, stattdesssen wir beim nächsten Befehl gewartet bis alles gesendet ist, hier läuft es dann wild durcheinander weil mal timeout und mal die Antwort abgeholt werden. Ich habe hier eine Korrektur hochgeladen https://github.com/DFRobot/DFRobotDFPlayerMini/issues/55 und hier noch eine kurze Beschreibung der Änderungen https://forum.arduino.cc/t/dfplayer-mini-library-dfrobotdfplayermini/1193601
Lutz schrieb: > zu der Aussage das bestimmte Firmware Versionen Bugs haben Hier ein Bug, der speziell in der DFPLayer-Version 0x0005 auftritt: Der DFPlayer sendet hier seine Finished-Meldung zweimal, was dazu führt, dass die Anwendung meint, der nächste Track wäre schon vorbei, bevor er eigentlich abgespielt wurde. Den Bug kann man vermeiden, indem man, wenn die Version 0x0005 vorliegt, jede zweite Finished-Meldung ignoriert. Nachzulesen in https://github.com/ukw100/wordclock24h/blob/main/src/dfplayer/dfplayer.c, suche dort nach "version 0x0005".
Das soll jetzt kein Arduino-Gemecker werden, aber so ist das, wenn man sich auf Libs verläßt, anstatt selber ein bisschen nachzudenken. Die paar Bytes kann man doch selber ohne Lib senden oder?
1 | // $7E=Start, $03=Länge ohne Start/Stop, $01=Befehl, $02=CheckSum, $EF=Stop |
2 | // CheckSum= $03 XOR $01 XOR $02 |
3 | MP3CMD : Array[0..10, 0..4] of Byte = (($7E, $03, $01, $02, $EF), // 0 Play |
4 | ($7E, $03, $02, $01, $EF), // 1 Pause |
5 | ($7E, $03, $03, $00, $EF), // 2 Next song |
6 | ($7E, $03, $04, $07, $EF), // 3 On song |
7 | ($7E, $03, $05, $06, $EF), // 4 Volume + |
8 | ($7E, $03, $06, $05, $EF), // 5 Volume - |
9 | ($7E, $03, $07, $04, $EF), // 6 Standby/normal |
10 | ($7E, $03, $09, $0A, $EF), // 7 Reset |
11 | ($7E, $03, $0A, $09, $EF), // 8 Fast forward |
12 | ($7E, $03, $0B, $08, $EF), // 9 Rewind |
13 | ($7E, $03, $0E, $0D, $EF));// 10 Stop |
14 | // wie oben, aber + 2 Bytes Parameter |
15 | MP3Track : Array[11..13,0..6] of Byte = (($7E, $05, $41, $00, $01, $45, $EF), // Track001 |
16 | ($7E, $05, $41, $00, $02, $46, $EF), // Track002 |
17 | ($7E, $05, $41, $00, $03, $47, $EF));// Track003 |
18 | |
19 | Procedure SetMP3Command(CMD:Byte); |
20 | Begin |
21 | If CMD in [0..10] |
22 | then |
23 | SerOutBlock_P(USARTE1,@MP3CMD[CMD,0],5); |
24 | elsif |
25 | CMD in [11..13] |
26 | then |
27 | SerOutBlock_P(USARTE1,@MP3Track[CMD,0],7); |
28 | EndIf; |
29 | End SetMP3Command; |
30 | |
31 | |
32 | Procedure SetMP3Volume(Volume:Byte); |
33 | Var CheckSum : LongWord; |
34 | Begin |
35 | CheckSum:=0; |
36 | If Volume in [0..30] |
37 | then |
38 | MP3Volume[0]:=$7E; |
39 | MP3Volume[1]:=$04; |
40 | MP3Volume[2]:=$31; |
41 | MP3Volume[5]:=$EF; |
42 | MP3Volume[3]:=Volume; |
43 | CheckSum:=LongWord(MP3Volume[1]) Xor LongWord(MP3Volume[2]) Xor LongWord(MP3Volume[3]); |
44 | MP3Volume[4]:=Lo(CheckSum); |
45 | SerOutBlock_P(USARTE1,@MP3Volume[0],6); |
46 | EndIf; |
47 | End SetMP3Volume; |
Crazy H. schrieb: > Die paar Bytes kann man doch selber ohne Lib senden oder Sollte man meinen, ja. Allerdings fürchte ich, dass die Haupt-Intelligenz der guten Bibliotheken darin besteht, Workarounds für die unterschiedlichen DfPlayer Versionen zu enthalten. Kennt noch jemand jquery? Ist ein ähnliches Thema.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.