Es gibt ein günstiges MP3 Modul Namens "FN-M16P Embedded MP3 Audio Module" (http://www.flyrontech.com/eproducts/84.html) (Datenblatt) (http://www.flyrontech.com/edownload/6.html). Oft wird es unter dem Namen DFPlayer Mini angeboten.
Dieses ist in China für unter 2€ zu bekommen und hat u. a. folgende Eigenschaften:
- Steuerbar über serielle Schnittstelle und/oder Tasten
- Kann mehrere tausend mp3/wav Dateien von SD-Karte und USB-Stick abspielen
- Enthält einen eingebauten 3W Verstärker für den direkten Anschluss eines Lautsprechers
- Hat einen Kopfhörerausgang an den auch ein externer Verstärker angeschlossen werden kann
Es gibt auch negative Punkte:
- hohe Ruhestromaufnahme von 20mA, daher ohne weitere Maßnahmen nicht für Batteriebetrieb geeignet
- etwas merkwürdige/inkonsistente Kommandos
- kein Streaming möglich, die Dateien müssen auf dem angeschlossenen Speichermedium vorhanden sein
Ich habe dafür ein Modul geschrieben, mit dem der Player vollständig gesteuert werden kann. Außerdem unterstützt es dabei das Speichermedium mit mp3 Dateien zu füllen und diese einfach abzuspielen.
Anwendungsfall ist hauptsächlich Sprachausgabe von vorgefertigten Sprachkonserven.
Durch eine Anbindung an das Text2Speech Modul unterstützt das Modul bei der Erzeugung dieser Sprachkonserven.
Getestet habe ich die Anbindung
- direkt an einer seriellen Schnittstelle bzw. per USB2Seriell-Wandler
- über TCP/IP mittels einer transparenten seriellen Bridge (z. B. ESPEasy Ser2Net)
- als MySensors Node mit Hilfe eines speziellen Sketches
Die ersten beiden Möglichkeiten sind sehr einfach, Beispiele:
define dfp_usb DFPlayerMini /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A9ED9FNB-if00-port0@9600
define dfp_easy DFPlayerMini 192.168.2.28:23
Die Anbindung an MySensors ist etwas komplizierter:
- Das MySensors Gateway muss bereits in fhem vorhanden sein
- Anhängenden Sketch auf einen Arduino flashen, der RX-Pin des DFPlayers muss über einen 1kOhm Widerstand an Pin 3, der TX-Pin an Pin 4
- MySensors GW in den inclusion-mode versetzen
- Arduino starten, danach sollte per autocreate ein neues MySensors Device angelegt worden sein, dieses in mys_dfp umbenennen
- DFPlayer Device ohne direkte Hardwareanbindung erstellen (define dfp_mys DFPlayerMini none)
- Antworten von der Hardware die im MySensors Device ankommen müssen an das dfp_mys Device weitergeleitet werden, das macht ein notify
(define ntfy_dfp_mys_receive notify mys_dfp:value11:.* set dfp_mys response $EVTPART1)
- Das dfp Device muss die Kommandos über das MySensors Device an die Hardware schicken, dafür das Attribut sendCmd setzen
(attr dfp_mys sendCmd set ntfy_dfp_mys_receive inactive; set mys_dfp value11 $msg; set ntfy_dfp_mys_receive active)
Weitere Dokumentation findet sich in der commandref des Moduls.
Das Kopieren der mp3 Dateien mit Hilfe dieses Moduls wird aktuell wohl nur auf einem Unix System funktionieren, weil ein bash-Script erzeugt wird das dem Text2Speech Modul als MPlayer Kommando untergeschoben wird.Das Modul und der Sketch sind noch im Alpha-Stadium und könnten weitere Tests brauchen.
Fragen beantworte ich hier natürlich gerne.
Edit 12.3.2017:
Aktualisierte Version des Moduls.
- Bugfixes
- Bessere Einbindung von Text2Speech, braucht die aktuellste Version von 98_Text2Speech
- neue Sets tts, uploadTTScache
Kann man eigentlich auch per nanoCul einen Code senden und diesen per Arduino/Attiny mit 433 Empfänger empfangen? Damit wäre eine Funksteuerung des MP3 Players möglich.
Gesendet von meinem Wileyfox Swift mit Tapatalk
Die Funksteuerung ist jetzt schon möglich.
Entweder per WLAN mit einem ESP8266 und ESPEasy Firmware oder mit MySensors.
MySensors kann man auf 2,4GHz, 868 und 433MHz nutzen, je nachdem welches Funkmodul man einsetzt. Den passenden Sketch habe ich ja auch veröffentlicht.
Prinzipiell unterstützt mein Modul auch jede andere Art von Übertragung, dafür ist das Attribut sendCmd und das set response gedacht.
MySensors habe ich so angebunden, siehe das Beispiel im 1. Post.
Theoretisch kann auch ein nanoCUL verwendet werden. Was dann noch fehlt ist ein passendes Übertragungsprotokoll mit Unterstützung in der culfw das 10 Bytes Nutzdaten übertragen kann und sich um die Adressierung, Acknowledge, Fehlerkorrektur, Signierung, Verschlüsselung kümmert.
Die 10 Bytes könnte man noch auf die wirklich wichtigen 4 Bytes verkürzen, siehe Datenblatt Kapitel 3.1.
Wahrscheinlich könnte man das IT-Protokoll nutzen, wenn man ein passendes Programm auf Empfängerseite hat das die übertragenen Daten wieder in das Format konvertiert was der DFPlayer versteht.
Besser wäre noch AskSin (Homematic), dafür gibt es ja verschiedene Opensource Implementierungen und das bietet viele der oben angesprochenen Protokolleigenschaften.
Ich habe mich selbst noch nicht tief genug damit beschäftigt.
Hast du für Arduino/Attiny mit 433 Empfänger ein bestimmtes Protokoll im Sinn? Dann kann ich dich evtl. bei der Umsetzung unterstützen.
Oder eben MySensors (http://www.mysensors.org), das bietet alle oben genannten Punkte und war für mich sehr einfach zu implementieren.
Mit MySensor hatte ich mich ganz am Anfang mal beschäftigt, habe damit aber nichts erreichen können. Dann hat hier jemand Eigenbau Sensoren veröffentlicht und habe darum einen nanoCul gebaut.
Muss ich mir mal ansehen.
Gesendet von meinem Wileyfox Swift mit Tapatalk
Danke für das Modul! Ich habe es heute nachgebaut mit
- NodeMCU V0.9
- ESPeasy Build 147
- DFPlayer
Die MP3 files habe ich auf die Speicherkarte kopiert in einem Verzeichnis namens "mp3". Das abspielen funktioniert problemlos!
Was ich nicht verstehe ist das Attribut uploadpath. Kann mir jemand dies erklären?
Danke nochmals! Ich nutze das Teil als Signalgeber. Jetzt bastle ich das ganze in ein Gehäuse...
Gruss Dani
Zitat von: eppi am 05 März 2017, 16:51:42
Danke für das Modul! Ich habe es heute nachgebaut mit
Schön, dass es jemand außer mit noch brauchen kann.
Zitat
Was ich nicht verstehe ist das Attribut uploadpath. Kann mir jemand dies erklären?
Das Modul unterstützt auch dabei das Speichermedium (i.A. eine Micro-SD Karte) passend für den Player zu befüllen.
Dazu muss die SD-Karte auf dem FHEM-Rechner gemounted werden.
D.h. Karte aus dem Player entnehmen, in einen geeigneten Cardreader stecken und mit dem Rechner verbinden.
Wie die Karte dann in dem FHEM-Rechner sichtbar gemacht werden kann hängt vom Betriebssystem ab, unter Linux geht das mit dem Kommando mount.
Danach ist die SD-Karte in einem bestimmten Verzeichnis ansprechbar.
Genau dieses Verzeichnis muss bei uploadPath eingetragen werden.
Anschließend können dann z. B. mit
set <dfp> readFiles
die Dateien auf der SD-Karte die vom Player ansprechbar sind eingelesen werden.
Diese werden dann als Reading angelegt.
Das kann dann z. B. so aussehen:
Internals:
DEF /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A9ED9FNB-if00-port0
DevState initialized
DeviceName /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A9ED9FNB-if00-port0@9600
FD 4
LAST_RECV_TS 1487982260.61949
LAST_SEND_TS 1488737616.53276
NAME dfp_usb
NOTIFYDEV global,tts
NR 113
NTFY_ORDER 50-dfp_usb
PARTIAL
STATE opened
TYPE DFPlayerMini
storage
PLAYQUEUE:
QUEUE:
Readings:
2017-02-21 20:06:46 File_99/001 _null
2017-02-21 20:06:46 File_99/002 _ein
2017-02-21 20:06:46 File_99/003 _zwei
2017-02-21 20:06:46 File_99/004 _drei
2017-02-21 20:06:46 File_99/005 _vier
2017-02-21 20:06:46 File_99/006 _fünf
2017-02-21 20:06:46 File_99/007 _sechs
2017-02-21 20:06:46 File_99/008 _sieben
2017-02-21 20:06:46 File_99/009 _acht
2017-02-21 20:06:46 File_99/010 _neun
2017-02-21 20:06:46 File_99/011 _zehn
2017-02-21 20:06:46 File_99/012 _elf
2017-02-21 20:06:46 File_99/013 _zwölf
2017-02-21 20:06:46 File_99/014 _zwanzig
2017-02-21 20:06:46 File_99/015 _dreissig
2017-02-21 20:06:46 File_99/016 _vierzig
2017-02-21 20:06:46 File_99/017 _fünfzig
2017-02-21 20:06:46 File_99/018 _sechzig
2017-02-21 20:06:46 File_99/019 _siebzig
2017-02-21 20:06:46 File_99/020 _achtzig
2017-02-21 20:06:46 File_99/021 _neunzig
2017-02-21 20:06:46 File_99/022 _hundert
2017-02-21 20:06:46 File_99/023 _sechzehn
2017-02-21 20:06:46 File_99/024 _siebzehn
2017-02-21 20:06:46 File_99/025 _und
2017-02-21 20:06:46 File_99/026 _hundert
2017-02-21 20:06:46 File_99/027 _tausend
2017-02-21 20:06:46 File_99/028 _million
2017-02-21 20:06:46 File_99/029 _millionen
2017-02-21 20:06:46 File_99/030 _komma
2017-02-21 20:06:46 File_99/031 _minus
2017-02-24 22:58:16 currentTrackSD 5
2017-02-22 21:00:15 equalizerMode Jazz
2017-02-22 21:00:42 noFolders 4
2017-03-05 19:12:36 state opened
2017-02-24 22:36:09 storage SD
2017-02-24 22:57:45 volume 9
TTSQUEUE:
Helper:
BUFFER ����
LAST_RESPONSE @
Keepalive:
ok 0
retry 1
Attributes:
TTSDev tts
cmdIcon prev:rc_PREVIOUS play:rc_PLAY next:rc_NEXT pause:rc_PAUSE stop:rc_STOP
requestAck 0
room Player
uploadPath /run/media/kai/VELOMAP_D
verbose 5
webCmd volumeStraight:prev:play:next:pause:stop
Alle Readings die mit File anfangen entsprechen einer Datei.
Diese Readings kann man dann beim play Kommando nutzen um die Datei abzuspielen, und zwar sowohl über den Namens des Readings als auch über den Readingswert.
set <dfp> play File_99/030
und
set <dfp> play _komma
spielen beide die Datei 030 im Order 99 ab.
Das geht für alle vom Player unterstützten Order (., MP3, ADVERT, 00, ..., 99).
Es wird jeweils das passende Player Kommando automatisch ermittelt, da es für die Order unterschiedliche Kommandos gibt, siehe Datenblatt.
Es ist auch möglich (für Sprachausgabe) passende MP3 Dateien auf die SD-Karte zu kopieren.
Dafür sind die Kommandos uploadTTS, uploadNumbers und uploadTTScache gedacht.
Den Teil überarbeite ich aber gerade, da das mit der neuesten Version des Text2Speech Moduls einfacher geworden ist.
Danke vielmals für die ausführliche Beschreibung! Jetzt ist mir klar, für was das steht. Ich werde es heute Abend versuchen und berichten, falls etwas nicht klappen sollte.
Nochmals Danke und viele Grüsse Dani
Im ersten Post gibt es eine aktualisierte Version des Moduls.
Der DFPlayerMini lässt sich übrigens auch direkt per USB mit einem PC verbinden und man hat dann Zugriff auf die SD-Karte.
Dazu muss man die Anschlüsse USB-, USB+, GND mit einem USB-Kabel/-Buchse verbinden.
Solange die USB Verbindung besteht kann allerdings der DFP nichts mehr von der SD-Karte abspielen.
Du gibst ja richtig Gas :D Danke vielmals für das Update!
Ich habe noch eine Frage: Ich habe mir einen Mini-Lautsprecher gekauft, 8 Ohm, 2.5W. Obwohl ich die Lautstärke auf 30 gestellt habe, ist er ziemlich leise. Hast du einen Tipp, wie man es lauter machen kann oder eine Mini-Lautsprecher Empfehlung?
Danke und viele Grüsse Dani
Ich habe verschiedene Lautsprecher ausprobiert, alle von Pollin.
Die Lautstärke wird durch den Typ maßgeblich bestimmt.
Kleinlautsprecher, 8 Ω, 29 mm (http://www.pollin.de/shop/dt/OTU5OTUzOTk-/Unterhaltungselektronik/Lautsprecher/Lautsprecher_Chassis/Kleinlautsprecher_8_29_mm.html)
Sehr leise, nur bei voller Lautstärke halbwegs zu hören
Mini-Lautsprecherbox (http://www.pollin.de/shop/dt/MzMwOTUzOTk-/Unterhaltungselektronik/Lautsprecher/Lautsprecherboxen/Mini_Lautsprecherbox.html)
Um einiges lauter und besser verständlich. Verzerrt bei höchster Lautstärkeeinstellung
Lautsprecherbox mit 2 Mini-Lautsprechern, 10 W (http://www.pollin.de/shop/dt/MjI5ODUzOTk-/Unterhaltungselektronik/Lautsprecher/Lautsprecherboxen/Lautsprecherbox_mit_2_Mini_Lautsprechern_10_W.html)
Bester Klang, allerdings auch ziemlich groß.
Bester Kompromiss ist für mich der zweite.
Finde das Ganze nun sehr interessant, was mir aber nicht ganz klar ist, ist wie ich das Ganze in's W-LAN bekomme.
Da fallen ja sicherlich Lötarbeiten an, oder? Wenn ja, bin ich leider raus ::)
Hey, hey, das hier ist fhem. Nicht so schnell aufgeben. Dafür gibt es einen Thread Löthilfe:
https://forum.fhem.de/index.php/topic,44057.msg359268.html#msg359268
Gruß Arnd
Diverse RasperryPi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, WifiLight ...
Zitat von: szoller am 14 März 2017, 08:18:55
Finde das Ganze nun sehr interessant, was mir aber nicht ganz klar ist, ist wie ich das Ganze in's W-LAN bekomme.
Da fallen ja sicherlich Lötarbeiten an, oder? Wenn ja, bin ich leider raus ::)
Zumindest für einen Prototypen muss man nicht löten, das kann man auch zusammenstecken.
Hier mal das Bild (https://www.dropbox.com/s/071zlwhzkrsntyx/IMG_20170314_203513.jpg?dl=0) von der MySensors-Variante. Ein Arduino Uno mit einem Prototype-Shield.
Auf diesem Bild (https://www.dropbox.com/s/bihdcoekgt2y3bs/IMG_20170314_203613.jpg?dl=0) ist oben die direkte Anbindung per USB2Seriell Wandler und unten die WLAN Variante mit einem Wemos D1. Darauf kann man auch das Prototype-Shield setzen.
Auf den Bildern sieht man auch die Lautsprecher die ich im Einsatz habe.
Ich habe das Modul jetzt in svn eingecheckt, es wird also ab morgen per update ausgeliefert.
Aktuell arbeite ich an Version der Hardware die mit Batterien funktioniert, momentan auf Basis von MySensors.
Mit fehlt noch der passende MOSFET, um den DFPlayer zum Energiesparen abzuschalten.
Zitat von: kaihs am 27 März 2017, 20:57:50
Ich habe das Modul jetzt in svn eingecheckt, es wird also ab morgen per update ausgeliefert.
Aktuell arbeite ich an Version der Hardware die mit Batterien funktioniert, momentan auf Basis von MySensors.
Mit fehlt noch der passende MOSFET, um den DFPlayer zum Energiesparen abzuschalten.
Cool, Danke!
Ich habe jetzt eine erste batteriebetriebene Version (mit zusätzlicher Signal-LED) fertig.
Mehr dazu findet man hier (https://www.openhardware.io/view/373).
Hi,
kannst du mir sagen wo ich die von dir verwendete MYSLog.h für den Arduino (MySensors) finde.
Vielen Dank
Ralf
Ich weiß nicht mehr woher ich die habe, daher hier im Anhang.
Danke, sobald die Bauteile da sind werde ich es testen.
Gruss
Ralf
Hi,
heute auch mal getestet mit nem Nodemcu und EspEasy.
Verbringung wird aufgebaut und ich kann den Player bedienen.
Aber nach 4-10 Sekunden wird die Verbindung getrennt und ich muss ständig reopen drücken.
Ist das normal? wie sehen deine ESP Serial Server Einstellungen aus?
Grüße
Pascal
Hallo noch jemand hier der das Modul unterstützt?
;D
2018.02.16 13:20:34 3: dfp_easy device opened
2018.02.16 13:20:36 5: dfp_easy SW: 7eff063f000000febcef
2018.02.16 13:20:36 5: current cmd waitForAck 0
2018.02.16 13:20:36 3: dfp_easy/init: get storage, retry = 0
2018.02.16 13:20:36 5: dfp_easy SW: 7eff063f000000febcef
2018.02.16 13:20:36 5: current cmd waitForAck 0
2018.02.16 13:20:46 3: dfp_easy/init: get storage, retry = 1
2018.02.16 13:20:46 5: dfp_easy SW: 7eff063f000000febcef
2018.02.16 13:20:46 5: current cmd waitForAck 0
2018.02.16 13:20:47 5: dfp_easy SW: 7eff063f000000febcef
2018.02.16 13:20:47 5: current cmd waitForAck 0
2018.02.16 13:20:56 3: dfp_easy/init: get storage, retry = 2
2018.02.16 13:20:56 5: dfp_easy SW: 7eff063f000000febcef
2018.02.16 13:20:57 5: current cmd waitForAck 0
2018.02.16 13:21:07 3: dfp_easy/init: get storage, retry = 3
2018.02.16 13:21:07 2: dfp_easy/init retry count reached. Closed
2018.02.16 13:21:07 2: dfp_easy closed
Ich Habe immer noch das Problem das ich die verbindung verliere...
Grüße
Pascal
Zitat von: raiderxxl am 16 Februar 2018, 13:04:41
Ich Habe immer noch das Problem das ich die verbindung verliere...
Hallo
Deine Einstellungen sind nicht korrekt des Serial Servers. Data bits müssen 8 sein, nicht 0.
Versuchs mal, bei mir läuft es so!
Gruss Eppi
Danke für die info... funktioniert aber auch nicht conect ist da aber nach 3-7 Sekunden wieder disconnect...
*Edit*
Habe jetzt ESPEasy_R147_RC8 installiert schein so das es jetzt funktioniert. ESPEasy_v2.0 wird dann wohl noch nicht unterstützt...
Vielleicht kommt ja noch ein Update vom Modulentwickler.... (schade das er sich noch nicht gemeldet hat)
Grüße
Pascal
Hi,
zufällig über diesen Thread gestolpert. Ich habe auch zwei DF Player und ein paar Wemos D1 mini hier liegen. Finde ich ja interessant.
Allerdings gibt es inzwischen (zumindest in der Testing Branche) von ESPEasy 2 direkt eine Unterstützung für den DF Player. Da würde doch ggf. ein Umweg über ser2net entfallen können? Oder meint Ihr, dass das vieleicht als ESPEasy Device zu träge für TTS ist?