DFPlayer Mini mit USB Stick betreiben

Hallo zusammen,
nachdem unsere “Noninoni” (so sagt mein Sohn) nach einem Umbau nach jedem Track stoppte bin ich auf die Suche gegangen. Ich habe statt der Mikro-SD Karte eine USB Buchse an die entsprechenden Ports des DFPlayers angeschlossen und nach aussen geführt. Nach ein wenig Recherche habe ich den Fehler in der Lib DFMiniMP3 entdeckt. In Zeile 407 (Stand heute) wird der Return Code für das Ende eines Lieds ausgewertet. Das ist eine Bytekette, in der für die Mikro-SD-Karte das Byte 0x3d vorkommt. Wird von USB Stick oder sogar von internem Flash-Speicher (???) gespielt muss auf weitere Codes gehört werden, um den nächsten Track zu starten.

UPDATE: Die Änderungen sind inzwischen via Library Manager verfügar. Die Handarbeit entfällt.

Ich habe Michael “Makuna” Miller eine Nachricht mit der Bitte zukommen lassen seinen Code zu erweitern. Wer das alles sofort möchte ergänzt den Code folgendermaßen:

Aus
case 0x3d:

mach
case 0x3d: // micro sd
case 0x3c: // usb

Anschließend muss die Lib neu kompiliert werden. Da ich nicht sicher bin, wie genau die Arduino IDE Dateien, die durch anderen Editoren geändert wurden überwacht, habe ich einmal ein anderes Board ausgewäht, kompiliert, zurück auf Arduino Nano gestellt und noch einmal kompiliert. Fertig ist der Lack.

Viel Spass mit USB Sticks,
Martin

5 „Gefällt mir“

Guter Fund! Ich habe zwar hier noch niemanden getroffen, der USB oder gar externes Flash verwendet, aber wenn Makuna die zwei case hinzufügt - warum nicht. Wer weiß wofür es mal gut ist. Ich habe allerdings keinen Pullrequest gesehen. Hast du ihn ausserhalb von GitHub kontaktiert und die Anpassung nicht selbst gemacht?

Ich hatte ihm erst einmal per Mail geschrieben. Ich habe jetzt ein Pull-Request erstellt.

Ich finde die interne Lösung mit der Micro-SD-Karte zu fummelig, um die Musik auf der Box zu tauschen. Die Verlängerung mit so einem Extender-Kabel lässt sich nur schwierig in die Box integrieren. Ein Mini-USB-Stick ist da eine hervorragende Angelegenheit.

Für einen übersichtlichen Obolus gibt’s gut verlötbare und integrierbare USB-Buchsen. Die Belegung geht so:
Schwarz = GND
Rot = +5V
Weiß = USB- / Data-
Grün = USB+ / Data+

Diese Mini-USB Verlängerung für die Stromversorgung passt nachdem man einen halben Millimeter auf jeder Seite entfernt hat super in den Schacht des originalen Lautsprecheranschlusses.

2 „Gefällt mir“

Perfekt! Danke.

Ist echt ne sehr gute Idee, allerdings nicht 100% „tamper proof“ oder? Wie verhinderst du, das $Kind den Stick abzieht? Und was mich interessieren würde, in Hinblick auf automatische Abschaltung einer evtl. vorhandenen Powerbank, wirkt sich der USB Stick Einsatz gegenüber der SD Karte negativ auf den Stromverbrauch aus? So daß die Powerbank nicht abschaltet? Hast du da Erfahrungen?

Es ist nicht 100% sicher, das stimmt. Der USB-Stick geht dafür aber auch nicht ganz so schnell verloren, wie eine Micro-SD-Karte. Sollte es mein Kind schaffen ihn da rauszuziehen (sitzt straff und ist durch die kompakte Größe schwer zu greifen) , denke ich mir noch eine zusätzliche Sicherung aus.

Bezüglich der Autoabschaltung habe ich noch keine Erfahrung, an dieses “kostenlos” Feature der Powerbanks habe ich bishr noch nicht mal gedacht ^^ . Ich probiere es aus und gebe noch einmal Feedback.

Kannst du dabei mal die Stromstärke messen (TonUINO einmal in Idle und einmal in Standby)?

Evtl. wäre die Verwendung eines USB-Stick statt einer SD-Karte ja die Lösung für SD-Verlängerungskabel verhindert Poweroff

Danke für dein Update!!!
Habe gerade das DFMiniMP3 -Master bei Git runter geladen und das ZIP neu eingebunden.
Leider bekomme ich beim Kompilieren folgenden Fehler für alle USB Einträge
error: ‘OnUSBInserted’ is not a member of ‘Mp3Notify’ T_NOTIFICATION_METHOD::OnUSBInserted(replyArg);

Wo mache ich einen Fehler.
Finde die Idee mit dem mini USB Stick TOP!

Ohne jetzt 100% sicher zu sein klingt es danach, dass du zwar die Lib neu eingespielt hast, aber die 3 neu definierten Methoden nicht implementiert hast. In Zeile 33 des aktuellen Tonuino Masters beginnt die Klasse MP3Notify. Die sollte nach deiner Bearbeitung in etwa so aussehen:

class Mp3Notify {
public:
  static void OnError(uint16_t errorCode) {
    // see DfMp3_Error for code meaning
    Serial.println();
    Serial.print("Com Error ");
    Serial.println(errorCode);
  }
  static void OnPlayFinished(uint16_t track) {
    Serial.print("Track beendet");
    Serial.println(track);
    delay(100);
    nextTrack(track);
  }
  static void OnCardOnline(uint16_t code) {
    Serial.println(F("SD Karte online "));
  }
  static void OnUSBOnline(uint16_t code) {
    Serial.println(F("USB Stick online "));
  }
  static void OnCardInserted(uint16_t code) {
    Serial.println(F("SD Karte bereit "));
  }
  static void OnUSBInserted(uint16_t code) {
    Serial.println(F("USB Stick bereit "));
  }
  static void OnCardRemoved(uint16_t code) {
    Serial.println(F("SD Karte entfernt "));
  }
  static void OnUSBRemoved(uint16_t code) {
    Serial.println(F("USB Stick entfernt "));
  }
};

Gruß, Martin

1 „Gefällt mir“

DANKE das war es!
Dachte die muss ich nur einfügen wenn ich auch einen USB nutzen möchte.

Super, danke.
Ich habe die Library geändert, neue DEV geändert und hochgeladen, einen USB Stick genommen. Die SD Karte entfernt.
Alles ok.

Makuna hat den PR mittlerweile gemerged. Du kannst die Library hier runterladen:

Über den Library-Manager bekommt man noch nich die Version mit der Anpassung, da muss erst ein neues Release gemacht werden. Wenn die Änderung ordentlich getestet wurde werde ich Makuna darum bitten.

2 „Gefällt mir“

Bezüglich der Autoabschaltung habe ich noch keine Erfahrung, an dieses “kostenlos” Feature der Powerbanks habe ich bishr noch nicht mal gedacht ^^ . Ich probiere es aus und gebe noch einmal Feedback.

Gibt es mittlerweile Erfahrungen bezüglich Selbsabschaltung mit Nutzung eines USB Sticks.
Wie immer DANKE schon mal!!!

Das USB Feature ist nun den Library-Manager verfügbar. Makuna hat v1.0.3 released. Es kann also ein Update über den Library-Manager durchgeführt werden.

2 „Gefällt mir“

Habe gerade die neue Platine bekommen die den DFplayer mit USB-Stick versorgt.
Da hab ich den Salat.
Das Auto Poweroff der Powerbank klappt nicht, mit SD Karte aber schon.
Nach dem ich gemessen habe war alles klar.

mit USB-Stick Intenso mini 32Gb 70mA nach Shutdown -> Abschaltung Powerbank klappt nicht.
mit SD Karte 32Gb 40mA nach Shutdown -> Abschaltung Powerbank klappt

USB hängt direkt an Vcc/GND, spricht was dagegen ihn über einen Pin zu versorgen, den ich abschalten kann?

Hat sonst schon jemand das ganze am laufen mit Powerbank Autoabschaltung?

Habe das Messgerät direkt in den USB-Stick gesteckt, Musik läuft aber es zeigt 0,00mA.
Ziehe ich jedoch den GND vom USB-Stick ab dann sinkt der Strom um besagte 30mA vom Gestamt Strom.

Jetzt bin ich total überfragt

Hab jetzt über D7 den USB-Stick gechaltet und die Abschaltung klappt mit der Intenso 10000s sowie mit einer aus drei PB-260

Es könnte Probleme geben, wenn Geräte einen zu hohen Strom benötigen. Wenn ich es richtig im Kopf habe, können die Pins 40mA liefern (und das möglichst nicht dauerhaft). Wenn also ein Stick zu viel Strom zieht oder jemand eine externe Festplatte an den USB-Anschluss anschließt, könnte es ein Problem geben. Ob dauerhafte 30mA über den IO-Pin ein Problem sind, weiß ich nicht.

Ich habe auch im Kopf, 20mA recommended und 40mA max (nicht dauerhaft nur peak). Ich würds nicht machen. Schon gar nicht weil es für die Abschaltung ja auch andere Lösungen gibt (pololu usw.).

Ich habe gerade die master Version des Tonuino Projekts heruntergeladen und die zugehörigen Libs. Mit der aktuellen, gepatchten DFPlayer Mini lib von Makuhita gibt die auch schon weiter oben genannte Fehlermeldung:

`
D:\Arduino\libraries\DFPlayer_Mini_Mp3_by_Makuna\src/DFMiniMp3.h:443:64: error: 'OnUsbRemoved' is not a member of 'Mp3Notify'
T_NOTIFICATION_METHOD::OnUsbRemoved(replyArg);

                                                            ^
exit status 1
Fehler beim Kompilieren für das Board Arduino Nano.

Nehme ich hingegen die Version 1.0.2 der Library, kompiliert das Tonuino Projekt korrekt durch.

Daher sollte im Stable Branch entweder ein kurzer Hinweis beim include hin, dass die Version 1.0.2 der DFPlayer Mini Library benötigt wird, oder die entsprechenden Anpassungen wie von mrmaddin empfohlen auch im aktuellen master Branch einfließen.

Ansonsten wird es für einen Anfänger ein ziemlich schwer zu überwindendes Hindernis werden.

1 „Gefällt mir“

Aus sicherer Quelle weiß ich, daß die DEV unmittelbar bevor steht zur Master zu werden. Ich werde aber versuche dafür sorgen das der Fix dafür vorher noch in die DEV wandert. Momentan baut keine FW mehr mit der 1.0.3 der Library weil in der class Mp3Notify drei Einträge für USB fehlen:

+    static void OnUsbOnline(uint16_t code) {
+      Serial.println(F("USB online "));
+    }
+    static void OnUsbInserted(uint16_t code) {
+      Serial.println(F("USB bereit "));
+    }
+    static void OnUsbRemoved(uint16_t code) {
+      Serial.println(F("USB entfernt "));
+    }

Fügt man das hinzu baut es wieder einwandfrei. Danke für den Hinweis!

EDIT: Pull request in schon gemerged. In DEV ist es also gefixt.

1 „Gefällt mir“

@stephan und @nanos Danke

20mA ein Pin und 200mA max auf allen Pins hatte ich noch im Kopf, deshalb habe ich einfach mal probiert :wink:
An eine Festplatte SSD habe ich natrürlich nicht gedacht. soll da aber nicht ran.
Ich lasse mir was einfallen.

Was mich wundert ist das direkt am USB-Stick 0mA gemessen werden im Betrieb, aber 30mA mehr Gesamt.
Kann doch nur eine undichte Stelle in der Isolierung sein :wink: ???
Ich schau mal weiter was ich finde.

https://www.sparkfun.com/datasheets/Components/SMD/ATMega328.pdf#G1.1185755

siehe 26.1

DC Current per I/O Pin … 40.0 mA
DC Current VCC and GND Pins … 200.0 mA

auf eigene Gefahr lasse ich es erstmal so, bin ja im grünen Bereich

Gerade probiert.
Im DEV sind die USB in der Class drin.
Über den Libery Manager die Version 1.0.3 geupdatet, das Kompilieren und flashen bricht ab.
Die ältere Version 1.0.2 wieder geupt und es geht wieder.