MP3 Player mit ESP32 erstellen

Hier möchte ich zeigen wie ich einen einfachen MP3-Player mit einem ESP32 erstellt habe.
Der ESP32 verfügt über einen integrierten Codec (Codierer/Decodierer) für die Verarbeitung von Audio-Daten und in diesem Fall wird er sich um die Decodierung der MP3-Dateien kümmern.
Diese dekodierten digitalen Daten müssten dann noch in analoge Signale gewandelt werden. Der ESP32 besitzt zwar einen integrierten DAC (Digital-Analog-Wandler). Da dieser aber lediglich 8 Bit (256 Pegel) unterstützt, verwende ich lieber das von ESP32 unterstütze i2s Protokoll, um digitale Audiodaten an den wesentlich leistungsfähigeren MAX98357a Modul zu übertragen. Er nimmt die digitalen Daten des serieller I2S-Strang auf und wandelt ihn nicht nur in analog, sondern verstärkt ihn auch direkt für einen Lautsprecher. Wer eine Stereo Ausgabe realisieren möchte, benötigt zwei davon.
Als Datenquelle wird ein SD-Kartenleser mit einer bis maximal 32GB großen und mit FAT32 formatierten SD Karte an den ESP32 angeschlossen. Als Lautsprecher wird ein  3 Watt 8 Ohm Mini-Speaker verwendet.

Hardware:
Adafruit ADA3006 MAX98357 (Qualitativ besser)
Youmile MAX98357 (Günstiger)
SD-Kartenleser
Speaker 3Watt
ESP32 WROOM

Anschluss Empfehlung:
Wiki/pschatzmann/MAX98357a
Abweichend zur Anschluss Empfehlung zum MAX98357a aus der Wiki, hat bei mir diese Pinbelegung zum Erfolg geführt:

DAC – MAX98357ESP32 – Wroom
LRC15
BCLK14
DIN22
GAIN
SD
GNDGND
VIN 5Volt5V

Bibliothek und Quellcode:
Die von Phil Schatzmann zu Verfügung gestellte Bibliothek „Arduino Audio Tools“ die ESP32 und RP2040 Boards unterstützt, bringt neben einer einsteigerfreundlichen Wiki, auch noch eine große Vielfalt an Beispiel-Sketche mit, die ohne große Anpassungen schnell zum Erfolg führen. Ich habe diese in der Arduino IDE Entwicklungsumgebung Version 1.8.19 und 2.04 erfolgreich anwenden können.

https://github.com/pschatzmann

Der verwendete Beispielcode aus der Bibliothek: player-sdfat-i2s.ino

/**
 * @file player-sdfat-i2s.ino
 * @brief see https://github.com/pschatzmann/arduino-audio-tools/blob/main/examples/examples-player/player-sdfat-i2s/README.md
 * 
 * @author Phil Schatzmann
 * @copyright GPLv3

 * Beispielcode Version Maerz2023 getestet von prilchen.de
 */


#include "AudioTools.h"
#include "AudioLibs/AudioSourceSDFAT.h"
#include "AudioCodecs/CodecMP3Helix.h"


const char *startFilePath="/";
const char* ext="mp3";
AudioSourceSDFAT source(startFilePath, ext);
I2SStream i2s;
MP3DecoderHelix decoder;
AudioPlayer player(source, i2s, decoder);


void printMetaData(MetaDataType type, const char* str, int len){
  Serial.print("==> ");
  Serial.print(toStr(type));
  Serial.print(": ");
  Serial.println(str);
}

void setup() {
  Serial.begin(115200);
  AudioLogger::instance().begin(Serial, AudioLogger::Info); // Nur zum Testen diese Zeile Aktivieren, um Details im Serial Monitor zu sehen
  // AudioLogger::instance().begin(Serial, AudioLogger::Warning);  // Im Betrieb diese Zeile aktivieren

  // setup output
  auto cfg = i2s.defaultConfig(TX_MODE);
  i2s.begin(cfg);

  // setup player
  //source.setFileFilter("*Bob Dylan*");
  player.setMetadataCallback(printMetaData);
  player.begin();
}

void loop() {
  player.copy();
}

Youtube-Video:


, ,