ich bin Anfänger im Thema Arduino-Programmierung und hoffe hier von den Experten einen Tipp zu bekommen.
Ich möchte mit einem ESP32-Modul einen Webstream eines Radiosendender empfangen und an einem externen Bluetooth-Lautsprecher senden.
Folgendes sollte bereits funktionieren:
-Verbindung mit W-lan
-Verbindung mit Host der Website
-Verbindung mit Bluetooth-Lautsprecher (wird akustisch vom Lautsprecher bestätigt)
Folgendes Problem:
-auf dem Lautsprecher hört man nur ein zyklisches Knacken
Mögliche Ursachen:
-die client.print "Get" - Anfrage an den Webserver hat einen Fehler oder funktioniert nicht. (ich weiß auch nicht genau wie ich das überprüfen kann.
-der client.read Datensatz passt nicht zu dem was ich an den Bluetooth lautsprecher senden muß. Evtl. müssen die Daten noch bearbeitet werden. Wenn ja wäre ich für einen Tipp dankbar wie man das machen muss.
Für ein paar Tipps wie ich den Webstream auf den Bluetooth Lautsprecher bekomme wäre ich sehr Dankbar.
Infos:
-ESP32 AZ-Delivery Dev Kit C V2 WROOM-32
-Arduino IDE 2.3.4
Hallo, wenn du danach "esp32 wlan bluetooth gleichzeitig" googelst, wirst du sehr viel Beiträge finden, die dir sagen, dass es nicht funktioniert.
Mein Tipp, verwende einen zweiten ESP32 für Bluetooth oder WLan.
danke für deine Antwort. Das erklärt dass ich immer nur Artikel entweder für das Abrufen des Webstreams oder für das versenden via Bluetooth gefunden habe und nie für beides zusammen.
Abgesehen davon das der ESP32 das wohl Hardware technisch nicht kann, wäre der Code so ok? Vor allem die Zeile:
int32_t result = client.read(data, size);
Spricht was dagegen das mit einem HC-06 zu realisieren oder ist das zu Zeitkritisch?
Kann ich dann die A2DPStream lib noch nutzen?
Hmm... Du benutzt eine TCP Verbindung und machst da von Hand ein unverschlüsseltes HTTP drauf.
Deine URL fängt mit HTTPS an. Also verschlüsseltes HTTP. Es könnte durchaus sein, das der Service nicht unverschlüsselt angeboten wird und du deshalb keine Daten für den Decoder bekommst.
Lass dir mal den Response Header nach den client.connect() auf der Seriellen Schnittstelle ausgeben.
Jetzt weiß ich nicht ob a2dp_source einen MP3 Stream verarbeiten kann oder ob der erst zu PCM dekodiert werden muss.
Muss der ESP-32 eigentlich vom Lautsprecher weg stehen. ??
Wenn nein, wieso kaufst du dir für 2-3 Euro kein i2s-VERSTÄRKER Modul. Hängst da die Lautsprecher per Kabel dran und versteckst den ESP32 in der Nähe des Lautsprechern.
Steuern kann man das sicher mit einen einfachen WEB-Interface.
(Bis auf das Web-Interface habe ich das nämlich genau SO gebaut, bei meinen Virtuellen Plattenspieler)
Naja....da ich selbst noch keine derartige Sache nachgebaut habe, kann ich mich nur auf die entsprechenden Beiträge beziehen.
Die besagen, es gibt nur ein Funkmodul (Transceiver) im Chip und das kann bedeuten:
Gleichzeitiges Funken auf unterschiedlichen Kanälen nicht möglich.
@Rintin, die URL wird im Code nicht benutzt. Ich hatte die Ausgabe mit der Audio lib und dem MAX98357A auf einen Lautsprecher versucht. Das hatte auch funktioniert allerdings möchte ich gern mein Bluetooth Lautsprecher nutzen. Im Code wird nur der host, port und path weiterverwendet. Die Header Ausgabe werde ich nachher mal versuchen.
@Pucki007, ich habe so ein Retro-Bluetooth Radio. Das soll im Gäste WC stehen weil es dort schön reinpassen würde. Das Radio hat nur nur FM und Bluetooth keinen Externen Lautsprecheranschluß. Da ich gerade einen Spiegelschrank für das WC baue hatte ich mir gedacht ich bau einfach einen ESP32 mit rein der den Webstream zu mein BT-Radio sendet. Ich hatte gedacht das es nicht so kompliziert sein kann, da der ESP ja Wlan und BT an Board hat. Die Module werde ich mir mal näher anschauen.
@Rintin & Hotsystems
Es wäre schön wenn der ESP32 das ohne Anbauteile könnte. Da ich aber noch nicht genau weiß wo der Fehler liegt, kann ich aber auch nicht sagen ob der ESP32 BT und Wlan zeitgleich kann. Was ich aber sagen kann ist, dass die Wlan verbindung zum Host steht und er dann noch die Verbindung zum Bluetooth Radio aufgebaut hat. Das hätte dann ja auch nicht funktionieren dürfen, oder?
Das ist wohl so. Aber Wifi und BT senden ja nicht durchgehend. Vielmehr hast du arbeiten die Paketorientiert und zwischen den Paketen ist "nichts auf der Leitung los". Da kann das Framework ja auf ein anderes Protokoll umschalten.
Ok, so hatte ich die Ausgabe über den MAX98357A mit angeschlossenen Lautsprecher gemacht. Ich weiß nur nicht wie ich das im A2DP Format über Bluetooth ans Radio gesendet bekomme.
BluetoothA2DPSource und Audio zusammen benötigen zu viel RAM. Der ESP32 landet in einer Bootloop weil das FreeRTOS seine Strukturen nicht initialisieren kann.
Streamen einer unkomprimierten WAV mit Ausgabe über BT geht zwar, aber abhängig davon was die Nachbarn gerade durch die Luft pusten geht die Datenrate vom WIFI soweit in den Keller, das es Bufferunderruns gibt.
Mein Fazit an der Stelle ist: Es könnte funktionieren, ist dann aber nicht so trivial.