7.3 Bluetooth-Audio-Player

Das Ziel des Projekts ist es, eine einfache Lösung für das Abspielen von Audio von einem Bluetooth-fähigen Gerät mithilfe des eingebauten DAC des ESP32 bereitzustellen.

Das Projekt umfasst die Verwendung der ESP32-A2DP-Bibliothek, um Audiodaten von einem Bluetooth-fähigen Gerät zu empfangen. Die empfangenen Audiodaten werden dann an den internen DAC des ESP32 über die I2S-Schnittstelle übertragen. Die I2S-Schnittstelle ist konfiguriert, um im Master-Modus, Sendemodus und mit eingebautem DAC zu arbeiten. Die Audiodaten werden dann über den Lautsprecher, der an den DAC angeschlossen ist, wiedergegeben.

Beim Verwenden des internen DAC des ESP32 ist zu beachten, dass das Ausgangsspannungsniveau auf 1,1 V begrenzt ist. Daher wird empfohlen, einen externen Verstärker zu verwenden, um das Ausgangsspannungsniveau auf das gewünschte Niveau zu erhöhen. Es ist auch wichtig, sicherzustellen, dass die Audiodaten im richtigen Format und mit der richtigen Abtastrate vorliegen, um Verzerrungen oder Geräusche während der Wiedergabe zu vermeiden.

Benötigte Komponenten

Für dieses Projekt benötigen wir folgende Komponenten.

Es ist definitiv praktisch, ein komplettes Set zu kaufen. Hier ist der Link:

Name

ARTIKEL IN DIESEM KIT

LINK

ESP32 Starter Kit

320+

ESP32 Starter Kit

Sie können sie auch einzeln über die untenstehenden Links kaufen.

KOMPONENTENVORSTELLUNG

KAUF-LINK

ESP32 WROOM 32E

BUY

ESP32-Kameraerweiterung

-

Steckbrett

BUY

Überbrückungsdrähte

BUY

Widerstand

BUY

Audio-Modul und Lautsprecher

-

Betriebsschritte

  1. Bauen Sie den Schaltkreis auf.

    Da dies ein Mono-Verstärker ist, können Sie IO25 an den L- oder R-Pin des Audioverstärkermoduls anschließen.

    Der 10K-Widerstand wird verwendet, um hochfrequentes Rauschen zu reduzieren und die Lautstärke des Audios zu verringern. Er bildet zusammen mit der parasitären Kapazität des DAC und des Audioverstärkers einen RC-Tiefpassfilter. Dieser Filter verringert die Amplitude von Hochfrequenzsignalen und reduziert so effektiv hochfrequentes Rauschen. Das Hinzufügen des 10K-Widerstands macht die Musik weicher und eliminiert unerwünschtes Hochfrequenzrauschen.

    Wenn die Musik auf Ihrer SD-Karte bereits leise ist, können Sie den Widerstand entfernen oder durch einen kleineren Wert ersetzen.

    ../../_images/7.3_bluetooth_audio_player_bb.png
  2. Öffnen Sie den Code.

    • Öffnen Sie die Datei 7.3_bluetooth_audio_player.ino unter dem Pfad esp32-starter-kit-main\c\codes\7.3_bluetooth_audio_player.

    • Nachdem Sie das Board (ESP32 Dev Module) und den passenden Port ausgewählt haben, klicken Sie auf den Upload-Knopf.

    • „Unbekanntes COMxx“ wird immer angezeigt?

    • Hier wird die ESP32-A2DP-Bibliothek verwendet, siehe Manuelle Installation für eine Anleitung zur Installation.

  3. Nachdem Sie das richtige Board und den Port ausgewählt haben, klicken Sie auf den Hochladen-Button.

  4. Sobald der Code erfolgreich hochgeladen wurde, schalten Sie das Bluetooth-fähige Gerät ein und suchen Sie nach verfügbaren Geräten, dann verbinden Sie sich mit dem ESP32_Bluetooth.

    ../../_images/connect_bluetooth.png
  5. Spielen Sie Audio auf dem Gerät ab, und der Ton sollte über den Lautsprecher, der an den ESP32 angeschlossen ist, wiedergegeben werden.

Code-Erklärung

  1. Der Code beginnt mit dem Einbinden der Bibliothek BluetoothA2DPSink.h, die verwendet wird, um Audiodaten von dem Bluetooth-fähigen Gerät zu empfangen. Das BluetoothA2DPSink-Objekt wird dann erstellt und mit den Einstellungen der I2S-Schnittstelle konfiguriert.

    #include "BluetoothA2DPSink.h"
    
    BluetoothA2DPSink a2dp_sink;
    
  2. In der Setup-Funktion initialisiert der Code eine i2s_config_t struct mit der gewünschten Konfiguration für die I2S (Inter-IC Sound)-Schnittstelle.

    void setup() {
    const i2s_config_t i2s_config = {
        .mode = (i2s_mode_t) (I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_DAC_BUILT_IN),
        .sample_rate = 44100, // corrected by info from bluetooth
        .bits_per_sample = (i2s_bits_per_sample_t) 16, // the DAC module will only take the 8bits from MSB
        .channel_format =  I2S_CHANNEL_FMT_RIGHT_LEFT,
        .communication_format = (i2s_comm_format_t)I2S_COMM_FORMAT_STAND_MSB,
        .intr_alloc_flags = 0, // default interrupt priority
        .dma_buf_count = 8,
        .dma_buf_len = 64,
        .use_apll = false
    };
    
    a2dp_sink.set_i2s_config(i2s_config);
    a2dp_sink.start("ESP32_Bluetooth");
    
    }
    
    • Die I2S-Schnittstelle wird verwendet, um digitale Audiodaten zwischen Geräten zu übertragen.

    • Die Konfiguration umfasst den I2S mode, sample rate, bits per sample, channel format, communication format, interrupt allocation flags, DMA buffer count, DMA buffer length und ob der APLL (Audio PLL) verwendet wird oder nicht.

    • Die i2s_config_t struct wird dann als Argument an die set_i2s_config-Funktion des BluetoothA2DPSink-Objekts übergeben, um die I2S-Schnittstelle für die Audiowiedergabe zu konfigurieren.

    • Die start-Funktion des BluetoothA2DPSink-Objekts wird aufgerufen, um den Bluetooth-Audioempfänger zu starten und die Audiowiedergabe über den eingebauten DAC zu beginnen.