Neues Feature: Bluetooth (a2dp-sink)

Super!

Besten Dank auch an @elmar-ops und @Harry .

Die Box wird echt immer mehr zu Allrounder!

Gute Arbeit.

Top Top Top, bin begeistert!
Da zeigt sich jetzt das die Hardware-Auswahl hier viel besser ist als anderen Projekten.
„Mal eben“ Bluetooth Anbindung, einfach Klasse!

Ich bin begeistert , wieder ein tolles Feature . Dickes Lob und danke an die „Erfinder“

Habe gestern nen Update gemacht, funktioniert wunderbar! Vielen Dank dafür!

1 „Gefällt mir“

Langsam muss man sich ne Batch schreiben, die automatisch mind. 2 mal am Tag einen git pull macht :wink:

Da schon paar mal gefragt wurde, warum Bluetooth und Wifi nicht gleichzeitig gehen hier die Erklärung:
Technisch können beide parallel laufen. Allerdings ist der Ram-Bedarf bei Bluetooth sehr hoch. Laut Doku sind es 140kb, siehe hier.
PSRAM würde die Sache wahrscheinlich besser machen. Allerding glaube ich, dass die meisten ESPuino Nutzer keinen PSRAM haben. Deswegen habe ich das Design ohne PSRAM ausgelegt. Wifi funktionierte prinzipiell zusamen mit Bluetooth auch bei meinen Tests. Aber der Webserver war nicht mehr zuverlässig erreichbar. Um sicher zu sein, das es stabil läuft, habe ich mich dazu entschieden Wifi ganz rauszunehmen.
@elmar-ops hat ja auch diese Entscheidung getroffen und wird wohl ähnliche Erfahrungen gemacht haben.

Der Neustart ist ein weiterer unschöner Punkt, den ich nicht gelöst bekommen habe. Ich wollte zumindest den Neustart beim Wechsel von Bluetooth nach Normal wegbekommen. Weil dann würde beim Auflegen einer Musikkarte im Bluetooth-Modus die Musik sofort losspielen, nachdem er im Normal-Modus ist. Beim Neustart muss man die Karte kurz wegnehmen und wieder auflegen.
Aber das Deinitialisieren des Bluetooth-Controllers und das Freigeben des Speichers habe ich nicht hinbekommen.
Vielleicht bekommt jemand anderes das besser hin :smiley:

1 „Gefällt mir“

Mir sind 2 Sachen mit Bluetooth aufgefallen

  1. Mit iPhone streamen , am iPhone den Stream nicht beenden sondern die Tonausgabe direkt auf das iPhone schalten . Ergebnis > die Box brummt sehr laut . Am iPhone wieder zurück zu Bluetooth > Musik spielt weiter . Wenn man den Stream pausiert und dann umschaltet gibt es kein Brummen .
  2. Mit iPhone streamen , es kommt ein Anruf an > gleicher Effekt , lautes Brummen der Box

Haben andere das auch , evtl. Android ?

Schau mal hier. Das gleiche Phänomen beschreibt ein anderer auch. Ein anderer hat Probleme in Zusammenhang mit nem Pcm5102. Ich weiß nicht mehr, ob du diesen nutzt…
Grundsätzlich lohnt es sich bei Problemen mal beim Git Repo von pschatzman vorbeizuschauen. Sehr wahrscheinlich hatte jemand anderes auch dieses Problem

Warum muss ich mich wieder über mich selbst ärgern ? Ich hatte dort gestöbert aber glatt überlesen . Danke für den Hinweis.

Was ist mit einer NVS Setting playOnNextBoot mit dem Inhalt des RFID Track Strings .
Die nach dem auslesen geleert wird.

Das Brummen ist mit der Änderung #24 in beiden Fällen weg . Getestet mit iPhone und MAX98357 .
Beim Anruf 100 %ig ok , beim Aus/Einschalten ist beim Einschalten für den Bruchteil einer Sekunde noch etwas zu hören . Ich empfinde das nicht mehr als störend .

2 „Gefällt mir“

Wolle hat am WE m4a hinzugefügt . Ich habe nach Tipp von @biologist 2 Zeilen hinzugefügt . Funktioniert , .wav macht wenig Sinn , aber falls es jemand braucht …

// Check if file-type is correct
bool fileValid(const char *_fileItem) {
const char ch = ‚/‘;
char *subst;
subst = strrchr(_fileItem, ch); // Don’t use files that start with .

return (!startsWith(subst, (char *) "/.")) &&
    (endsWith(_fileItem, ".mp3") || endsWith(_fileItem, ".MP3") ||
     endsWith(_fileItem, ".aac") || endsWith(_fileItem, ".AAC") ||
     endsWith(_fileItem, ".m3u") || endsWith(_fileItem, ".M3U") ||
     endsWith(_fileItem, ".asx") || endsWith(_fileItem, ".ASX") ||
     endsWith(_fileItem, ".m4a") || endsWith(_fileItem, ".M4A") ||
     endsWith(_fileItem, ".wav") || endsWith(_fileItem, ".WAV"));

}

1 „Gefällt mir“

Cool! Dann werde ich das natürlich aufnehmen.

zu a2dp : wieder ein Fehler weniger , pschatzmann hat aktuell die Änderung zur Beseitigung des Störgeräusches hinzugefügt .

1 „Gefällt mir“

Mit der Firmware vom 2.4. funktionierte Bluetooth hervorragend, seit den letzten Commits kann ich mich nicht mehr verbinden. Kann das jemand bestätigen?

Habe schon probiert einen älteren Stand wieder aufzuspielen, das hat es aber nicht gefixt, daher hat es vielleicht auch gar nichts mit den Commits zu tun, allerdings habe ich an dem Setup auch keine Änderungen vorgenommen. Den NVS hab ich noch nicht gelöscht, geht das nur mit idf.py?

Update: Jetzt geht’s plötzlich wieder! Werde es mal noch genauer beobachten …

Es gab diesbzgl. tatsächlich einen Fehler, weswegen man nicht mehr in den BT-Mode kam. Den habe ich glaube ich letzte Woche gefixt.

1 „Gefällt mir“

Nice wäre noch, wenn man das sendende Gerät steuern kann, wie bei einer Bluetooth-Box, so dass die Kommandos Zurück, Play/Pause und Weiter übertragen werden. Die Unterstützung dafür wurde auch vor kurzem noch zu der Bluetooth-Lib hinzugefügt: GitHub - pschatzmann/ESP32-A2DP: A Simple ESP32 Bluetooth A2DP Library (to implement a Music Receiver or Sender) that supports Arduino, PlatformIO and Espressif IDF

Die einfachen Knöpfe wie Play/Pause, Forward etc. lassen sich so auch einfach implementieren. Leider fehlt aber noch eine wichtige Funktion: Die Kontrolle der Lautstärke. Dazu benötigt man das IDF >= 4.0. Der Build läuft aber auf 3.3.
Mit der Alpha für arduino-esp32 wurde die IDF passend angehoben, ich habe es aber nicht geschafft ESPuino damit lauffähig zu bekommen.

1 „Gefällt mir“

Hast du die Steuerung von Play/Pause usw schon umgesetzt? Wie hast du das implementiert? Magst du den Codeausschnitt dafür teilen?

In der Funktion
void doCmdAction(const uint16_t mod)

case CMD_PLAYPAUSE: {
	if (operationMode == TOperationMode::Bluetooth) {
		if (a2dp_sink->get_audio_state() == ESP_A2D_AUDIO_STATE_STARTED)
		{
			a2dp_sink->pause();
		}
		else
		{
			a2dp_sink->play();
		}
	}
	else
	{
		trackControlToQueueSender(TTrackControl::PausePlay);
	}
	break;
}
case CMD_PREVTRACK: {
	if (operationMode == TOperationMode::Bluetooth) {
		a2dp_sink->previous();
	}
	else
	{
		trackControlToQueueSender(TTrackControl::PreviousTrack);
	}
	break;
}
case CMD_NEXTTRACK: {
	if (operationMode == TOperationMode::Bluetooth) {
		a2dp_sink->next();
	}
	else
	{
		trackControlToQueueSender(TTrackControl::NextTrack);
	}
	break;
}
1 „Gefällt mir“