Hi,
ich möchte Euch ein neues Feature vorstellen, ESPuino kann jetzt Musik über einen Bluetooth-Kopfhörer abspielen. Dazu ist keine weitere Hardware notwenig, wie das hier schon mal gemacht wurde.:
Es gibt einen neuen Modus OPMODE_BLUETOOTH_SOURCE. Dieser kann über eiine Modifier-Karte in der Weboberfläche oder über ein CMD an einer Taste aktiviert werden. Der Ablauf ist genau gleich zum bestehenden BT-Sink (ESPuino als BT-Lautsprecher) Modus. Der ESP startet neu und versucht sich mit dem angegebenen Device zu verbinden. Der Name muss derzeit noch in settings.h eingetragen werden im Wert nameBluetoothSourceDevice[] PROGMEM = "My POGS Wireless Headphone" . Kann später evt. auch über die Weboberfläche eingetragen werden, das ist bereits vorgesehen.
Beim Start in diesem Modus blinken die LEDs blau-violett, nach dem Pairing wechseln die auf Blau. Legt man jetzt eine Musikkarte auf wird der Sound auf den Kopfhörer gestreamt…
Vielen Dank auch an @Wolle der die Möglichkeit dazu in seiner Bibliothek geschaffen hat!
Freue mich auf Feedback…
Ohne Gehäuse (hier liegt mein Test Lolin D32 Pro offen herum) komme ich mit dem POGS Kinder-Kopfhörer auf 3 Meter ruckelfreie Übertragung. Also etwas weniger als „normale“ Bluetooth Verbindungen, da geht’s 5-6 Meter je nach Gerät). Das sollte aber für den Betrieb reichen…
Ein Gedanken/eine Idee
Könnte man die RFID-karte mit der ID des Bluetooth-Empfängers verknüpfen und dadurch z.B. den Kopfhörer mit einem RFID-Tag versehen, um das pairing „Kinderleicht“ zu machen?
@tueddy Habe das Feature versucht zu testen. Bin dann zuerst in einen Compile-Fehler gelandet, weil constexpr für SinkDevice gefehlt hat. Hab’s dann gefixt und kompiliert. Karte habe ich angelernt und konnte auch in den BT-Source-Modus wechseln. Habe dann meinen „Jabra Evolve2 65“ angelernt und sowas ESP32 als auch der Kopfhörer haben „connected“ gesagt.
Es kam allerdings weiterhin die Musik nur aus dem Lautsprecher und nicht aus dem Kopfhörer. Weiterhin war der Neopixel ziemlich dunkel.
Könnte man machen, aber ob’s die Arbeit wert ist? Geht bei Kindern der Trend schon zum Zweit-BT-Kopfhörer?
Es ist halt so, dass der Wechsel in einen BT-Modus als Modkarte läuft und dort ist es bisher unüblich, dass man Parameter eingibt. Das müsste man dafür dann umbauen. Und wenn man im BT-Source-Modus (Kopfhörer) ist und eine andere BT-Karte auflegt, dann wird man vermutlich, damit das auch sicher klappt, einen Neustart brauchen. Legt man die gleiche BT-Karte erneut drauf, wechselt man wieder in den „normalen“ Modus.
So oder so: Ich könnte das Feature nicht testen, weil ich nur einen BT-Kopfhörer im Haus habe.
Die Idee kam mir, weil meine Enkel das Gerät im Wechsel verwenden und mit ihren eigenen Kopfhörern verbinden. Das gibt es ja auch im „profi“-Bereich, wo über NFC direkt gekoppelt wird. War nur ein Gedanke, weil ich die derzeitige Lösung (setting.h Eintrag) für zu inflexible halte. Bin mal gespannt, wie es sich weiter entwickelt. Auf jeden Fall tolles Gerät mit vielen Möglichkeiten.
Da hast du auch absolut Recht. @tueddy hat ja schon in Aussicht gestellt, dass man das über die GUI konfigurieren könnte. Das machen wir dann auch. Für die ersten Wurf finde ich es aber absolut in Ordnung, dass man es so macht. Zumal @sonovice ja eh an der GUI rumbaut. Da macht es nicht so viel Sinn, sich nochmal Arbeit mit der aktuellen GUI zu machen.
@biologist Im Log müsste eine Meldung "Bluetooth source => audio: started" erscheinen, erst dann fängt das Streaming an und der Lautsprecher verstummt.
Ohne dieses Ereignis wird Audio normal weiter auf dem Lautsprecher ausgegeben. Evt. kannst Du mir den Log einmal zusenden.
Mit build_flags = -DCORE_DEBUG_LEVEL=5 bekommt man auch die detailierten Ereignisse auf Bluetooth Ebene.
@hnymphius Gute Idee, ich schaue mal ob das machbar ist. Änderungen an der Weboberfläche möchte ich aber aufgrund des laufenden Refactoring nicht machen…
@biologist hat mir von heftigen Streaming-Aussetzern berichtet die jetzt auch nachvollziehen konnte:
Der Audio-Task muss den Puffer ja ständig füttern den der Bluetooth-Task dann durch das Senden verbraucht.
Nun scheint der ESP32 in diesem Modus ziemlich am Anschlag zu sein. Der Puffer läuft immer wieder leer und das Audiosignal unterbricht. Das Problem tritt in Arduino 1.0.6 auf (Die vom ESPuino derzeit verwendete Version). Mit Arduino 2.0.x scheint der BT-Stack oder was auch immer optimiiert zu sein, so dass die Tasks mehr Rechenzeit bekommen, das Streaming läuft unterbrechungsfrei.
Einen Bugfix dazu habe ich hochgeladen, außerdem leuchten die LED auch im Pause-Modus blau. Mit den Korrekturen bekomme ich in 1.0.6 nur minimale Aussetzer zum Start der Übertragung. Bei 2.0.x überhaupt keine.
Wäre schön wenn sich hier noch ein Early-Adapter findet der das so bestätigen kann. Zum Testen reicht auch ein normaler BT-Lautsprecher. Wichtig das Ihr vor dem Test die Audio-Bibliothek auf den aktuellen Stand bringt.
So, ich habe meine Faulheit jetzt endlich mal überwunden und jetzt gerade deinen aktuellen Master-Branch mit dem heutigen Commit am Start. Und tatsächlich kann ich bestätigen, dass die Übertragung ohne Aussetzer funktioniert. Auch bei mp3s mit 320 kBit/s. Cool!
Getestet habe ich das mit einem Jabra Evolve2 65, also einem recht hochwertigen Headset, und damit kann ich problemlos hier in unserem EFH auch ein Stockwerk höher gehen. In den Stahlbeton-Keller jedoch nur ein Stück weit. Das deckt sich allerdings mit der Performance, die ich auch sonst habe, wenn ich das mit meinem Laptop gekoppelt habe.
Anmerkungen:
a) Beim Start von einem Titel gibt’s kurz ein komisches Geräusch. Passiert aber nicht bei allen Files. Find’s jetzt nicht dramatisch, aber man hört es deutlich.
b) Bei mir kommt weiterhin ein Compile-Fehler, weil nameBluetoothSinkDevice in der Settings.h fehlt. Hab’s eingetragen, dann geht’s.
c) Funktioniert mit 1.0.6 und auch mit 2.0.5. Mit 2.0.5 dauert der Connect zum Headset allerdings manchmal länger.
Hab’s in meinen Hauptzweig aufgenommen. Vielen Dank @tueddy für deine Arbeit!
ich bin gerade dabei meine Box komplett neu aufzusetzen und würde gerne auch Bluetooth für Kopfhörer einbinden. Jedoch ist meine Kleine noch zu klein um das hinzubekommen mit der Modifikationskarte. Das würde sie nicht verstehen warum sie immer wechseln muss wenn sie normal hören möchte. Gibt es eine Möglichkeit beide Modi zu aktivieren und wenn sich ein BT Gerät verbindet, dass die Musik dann nur dort abgespielt wird?
Hab einen D1 mini pro. Geht das (mit ggfls. anderen Einschränkungen) mit diesem oder auch gerne mit einem anderen Gerät? Speicher sollte beim Pro ja wesentlich mehr vorhanden sein als beim normalen.
Der D32 pro besitzt einen ESP32 Wrover. Der hat zwar mehr Flash-Speicher, aber hier geht’s um den RAM. Und der ist gleich. Das Problem ist halt, dass die BT-Lib sehr viel Speicher braucht.
Aber @tueddy kann dazu bestimmt was sagen .
Das wird klappen wenn Du immer im Modus OPMODE_BLUETOOTH_SOURCE startest:
Solange kein BT-Kopfhörer verbunden ist spielt der Player normal über Lautsprcher ab. Erst wenn eine Kopfhörer Verbindung da ist wird der Lautsprecher ausgeschaltet. Wird die Kopfhörer-Verbindung getrennt spielt die Musik wieder über den Lautsprecher.
Allerdings hatte ich in meinen Tests auch schon „Hänger“ beobachtet, d.h. die Umschaltung klappte nicht mehr.
WLAN ist in diesem Modus deaktiviert! Ob das dann praktikabel ist musst Du mal ausprobieren…
Hi,
ich habe jetzt auch mal versucht einen Bluetooth Kopfhörer anzumelden. Es ist ein günstiger aus dem Actionmarkt (10 Euro). Mit Windows und meinem iPhone funktioniert er ganz gut, nur leider bekomme ich den nicht an die ESPuino Box gebunden…
Firmware ist Stand von heute
Karte eingerichtet und aufgelegt
LEDs wechseln die Farbe auf weiß-lila
der Kopfhörer ist im Pairing Mode und an kein anderes Gerät angemeldet
Dann gehts aber leider nicht weiter… keine Verbindung zwischen Box und Kopfhörer…
Danke für die Antwort.
Für Serial muss ich die Box dann erstmal auseinander nehmen… da komme ich leider im eingebauten Zustand nicht dran. Melde mich wenn ich ein Log habe.
ja genau dieser Kopfhörer ist das. Klang ist ganz ok. Mein Sohn findet ihn auf jeden Fall gut. Ist halt nicht vergleichbar mit nem 100€+ Kopfhörer. Die maximale Lautstärke finde ich auf kindergerecht. Und USB-C Ladebuchse und auch noch n Klinkeneingang.
Ich habe den debuglevel angepasst und das hier ist die Ausgabe, wenn ich die Kopfhörer Karte drauf lege (Kopfhörer liegt eingeschaltet neben der Box):
Action - Meine Frau hat bereits zugeschlagen und ich habe den Maxxter hier bereits liegen.
Im Vergleich zum MyPogs-BT Kopfhörer ist der nicht so wertig aber kostet eben auch nur 1/6…
Dein Log enthält leider nicht die gewünschten Bluetooth-Ausgaben. Hast Du das Projekt mit „build“ neu erzeugt?
[ 1709 ] Bluetooth source started, connect to device: ‚ACT-BHP-JR‘
Das sagt nur mit welchem BT-Device sich die Box verbinden möchte, Logging könnte für diese Fehlersuche noch verbessert werden.
Ich werde mal schauen ob wann ich das testen kann…