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.
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.
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...
..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.
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.
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.
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 ...
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.
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.
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 ...
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. :)
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.
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
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.
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.
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.
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.
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
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.