ESP32-Projekt: Bluetooth Lautsprecher erstellen

In diesem Tutorial beschreibe ich, den Bau eines Bluetooth-Lautsprechers mit einem ESP32 Mikrocontroller, einem MAX98357 I2S Digital-Analog-Wandler und einem 4 Ohm Lautsprecher.
Der MAX98357 fungiert als externer Digitaler Analog Converter (DAC) mit integriertem Audioverstärker und mischt zwei Audiokanäle zu einem Mono-Ausgang.
Dieser gebaute Lautsprecher kann dann Audio von deinem Smartphone oder anderen Bluetooth fähigen Geräten abspielen.

Im Detail läuft das so ab:

Kopplung mit Bluetooth Sender: Sender sucht per Bluetooth nach ESP32 „Sendenamen“ und koppelt

Bluetooth-Empfang: Der ESP32 empfängt den Audio-Stream von einem Bluetooth-Gerät.

I2S-Datenübertragung: Der ESP32 sendet die digitalen Audiodaten über die I2S-Schnittstelle an den MAX98357 in einem Datenformat , das typischerweise 16, 24 oder 32 Bit pro Audiosample umfasst.

Digital-Analog-Wandlung: Der MAX98357 wandelt die digitalen Audiodaten in analoge Signale um.

Verstärkung: Der MAX98357 verstärkt das analoge Signal.

Audioausgabe: Das verstärkte analoge Signal wird an den 4-Ohm-Lautsprecher gesendet, wodurch der Ton hörbar wird.


Hardware:
ESP32 WROOM —> Belegungsplan
MAX98357A DAC Modul 2,7 V bis 5,5 V
Lautsprecher 4 Ohm (3 W oder mehr empfohlen)
Powerbank oder 5V-Stromversorgung
Jumper-Kabel und Steckbrett
Computer mit installierter Entwicklungsumgebung Arduino IDE

Verdrahtung:

Verbinde den ESP32 mit dem MAX98357:

  • DIN des MAX98357 → IO27 (ESP32)
  • BCLK des MAX98357 → IO25 (ESP32)
  • LRC des MAX98357 → IO26 (ESP32)
  • GND und VCC (3.3V oder 5V) entsprechend verbinden.

Schließe den Lautsprecher an den SPK+ und SPK- des MAX98357 an.
Stelle sicher, dass alle Verbindungen stabil sind, und teste das Setup mit einem Steckbrett, bevor du lötest.

Bibliothek / Library:

Installiere die benötigten Bibliothek DFRobot_MAX98357A von DFRobot in der Arduino IDE 2.x

Öffne den Beispielcode aus der Library, prüfe ob die GPIO PIN passen und laden den Code auf des Entwicklungsboard. Dieser Quellcode Auszug habe ich verwendet:

#include <DFRobot_MAX98357A.h>

DFRobot_MAX98357A amplifier;   // instantiate an object to control the amplifier

void setup(void)
{
  Serial.begin(115200);

  while( !amplifier.begin(/*btName=*/"prilchensBTBox", /*bclk=*/GPIO_NUM_25, /*lrclk=*/GPIO_NUM_26, /*din=*/GPIO_NUM_27) ){
    Serial.println("Initialize failed !");
    delay(3000);
  }
  Serial.println("Initialize succeed!");
}

void loop(void)
{
//kann leer bleiben
}

Quellcode auch auf GitHub

Danach habe ich an meinem Smartphone nach Bloutooth Geräten gesucht und die dort zu findende prilchensBTBox ausgewählt. Sobald ich nun Audio abspiele höre ich diese aus dem Bluetooth Lautsprecher 🙂


Optionale Erweiterung mit Display
zur Anzeige des Interpreten und Songtitel

Bei mir wird jetzt der Bluetooth Lautsprecher noch um eine OLED Anzeige erweitert, die zwei von drei optionalen Informationen anzeigt.
Bei der I2S-Musikübertragung werden die Audiodaten in einem festen Datenformat übertragen.
Die I2S-Schnittstelle selbst überträgt jedoch keine Metadaten wie Interpret und Songtitel.
Diese Informationen werden über separate Protokolle wie Bluetooth AVRCP (Audio/Video Remote Control Profile) übertragen.
Titel, Artist und Album sind somit möglich, während der Wiedergabe zu sehen.

Weitere Hardware:
OLED Display I2C zB. 0,96 oder 1,3 Zoll

Verdrahtung:

Bibliothek / Library:

Benötigt wird die Library SSD1306 von Adafruit

Quellcode:
Entsprechend des gewählten Display ggf. noch die Pixel weite und Höhe anpassen.

#include <Wire.h>  //für I2C-Kommunikation
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#include <DFRobot_MAX98357A.h>

#define SCREEN_WIDTH 128  // OLED display width
#define SCREEN_HEIGHT 64  // OLED display height
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

DFRobot_MAX98357A amplifier;  // instantiate an object to control the amplifier

void setup(void) {
  Serial.begin(115200);

 display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // Initialisiere I2C mit Addr 0x3C
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  delay(2000);

  while (!amplifier.begin(/*btName=*/"PrilchensBTBox", /*bclk=*/GPIO_NUM_25, /*lrclk=*/GPIO_NUM_26, /*din=*/GPIO_NUM_27)) {
    Serial.println("Initialize failed !");
    delay(3000);
  }
  Serial.println("Initialize succeed!");
}

void loop(void) {
  String Title, Artist, Album;
  /**
   * @brief Get "metadata" through AVRC command
   * @param type - The type of metadata to be obtained, and the parameters currently supported:
   * @n     ESP_AVRC_MD_ATTR_TITLE   ESP_AVRC_MD_ATTR_ARTIST   ESP_AVRC_MD_ATTR_ALBUM
   * @return The corresponding type of "metadata"
   * @note Return "NULL" if timeout occurs when requesting metadata
   */
  Title = amplifier.getMetadata(ESP_AVRC_MD_ATTR_TITLE);
  if (0 != Title.length()) {
    Serial.print("Music title: ");
    Serial.println(Title);
  }
  Artist = amplifier.getMetadata(ESP_AVRC_MD_ATTR_ARTIST);
  if (0 != Artist.length()) {
    Serial.print("Music artist: ");
    Serial.println(Artist);
  }
  Album = amplifier.getMetadata(ESP_AVRC_MD_ATTR_ALBUM);
  if (0 != Album.length()) {
    Serial.print("Music album: ");
    Serial.println(Album);
  }

display.clearDisplay();
  display.setCursor(0, 5);
  display.print("Prilchens BL Box");
  display.setCursor(0, 18);
  display.print("Musik Title: ");
  display.setCursor(0, 27);
  display.print(Title);
  display.setCursor(0, 36);
  display.println("Musik Artist: ");
  display.setCursor(0, 45);
  display.println(Artist);
  display.display();

  delay(3000);
}

Je nach Anwendung, Anbieter oder Musiklösung steht nicht immer unter Titel oder Artist das gewünschte Ergebnis. Auch hatte ich auch schon mal deutlich längere Artistenbezeichnungen die dann eben nicht komplett angezeigt werden. Sollte sich jeder so anpassen wie er mag.

Video:

3D – Druck Vorlagen:

Das im Video zu sehende Gehäuse. Eine einfache, aber doch effektvolle Lösung um aus den kleinen 40mm Lautsprecher deutlich besseren Sound zu erhalten.
Größe: 50x50x50mm, Wandstärke 2mm, Bohrung Durchmesser: 36,8mm

Download bei Makerworld oder bei Thingiverse


Nicht im Video zu sehen:

Hier habe ich aus einen ausrangierten Echo Show mit 5 Zoll, nur das Lautsprechermodul, an diese vorgestellte Bluetooth Lösung angeschlossen, funktioniert sehr gut und hört sich prima an.
Jetzt hat die Box endlich wieder eine Funktion 🙂


Ein weiterer Versuch eine kleine Bluetooth Musikbox ohne Microcontroller zu bauen, habe ich mit diesem Bluetooth 5.0 Verstärkermodul Stereo PAM8403 2X5W erstellt.
Es wird mit 5 Volt versorgt.
Der Speaker hat 4 Ohm und kann mit einer Leistung von bis zu 3 Watt betrieben werden.
Im Smartphone in der Bluetooth Geräte Anzeige taucht es unter „HCW Musik“ auf.

Diese Lösung ist nicht laut, aber gut verständlich und kann für kleine Räume genutzt werden


Bluetooth Adapter

Wer einfach nur seine alten PC Lausprecher simpel mit Bluetooth erweitern möchte oder zB. seinen alten Fernseher an der Klinken Buchse um Bluetooth erweitern, um per Kopfhörer zuzuhören, sollte sich mal diesen Bluetooth Transmitter Empfänger Adapter von UGREEN anschauen. Hiermit kann man ohne Tüftelei direkt eine schnelle Lösung finden.
Der verbaute Akku soll laut Hersteller 16 bis 18 Stunden halten. Er ist umschaltbar von Sender Modus auf Empfänger Modus. Was leider fehlt ist ein Klinke Buchse zu Buchse Adapter. Ansonsten ein vielseitiger Adapter mit vielen Anwendungsmöglichkeiten.

,
Datenschutz-Übersicht

Diese Website verwendet Cookies, damit wir dir die bestmögliche Benutzerkomfort bieten können. Cookie-Informationen werden in deinem Browser gespeichert und führen Funktionen aus, wie das Wiedererkennen von dir, wenn du auf unsere Website zurückkehrst und hilft uns zu verstehen, welche Abschnitte der Website für dich am interessantesten und nützlichsten sind.