7.5 Reproductor MP3 con Soporte de Tarjeta SD¶
¡Bienvenido al emocionante mundo de la música con tu ESP32! Este proyecto lleva el poder del procesamiento de audio a tus manos, convirtiendo tu ESP32 no solo en un microcontrolador increíble para la computación, sino también en tu reproductor de música personalizado. Imagina entrar a tu habitación y tener tu pista favorita sonando directamente desde este pequeño dispositivo. Ese es el poder que estamos trayendo a tus manos hoy.
Componentes Necesarios
En este proyecto, necesitaremos los siguientes componentes.
Es definitivamente conveniente comprar todo el kit, aquí está el enlace:
Nombre |
ARTÍCULOS EN ESTE KIT |
ENLACE |
---|---|---|
Kit de inicio ESP32 |
320+ |
También puedes comprarlos por separado en los siguientes enlaces.
INTRODUCCIÓN DE COMPONENTES |
ENLACE DE COMPRA |
---|---|
- |
|
- |
Pasos Operativos
Inserta tu tarjeta SD en la computadora usando un lector de tarjetas, y luego formátela. Puedes referirte al tutorial en ¿Cómo formatear la tarjeta SD?.
Copia tu archivo MP3 favorito a tu tarjeta SD.
Inserta la tarjeta SD en la ranura para tarjetas SD de la placa de expansión.
Construye el circuito.
Como esto es un amplificador mono, puedes conectar IO25 al pin L o R del módulo de amplificador de audio.
La resistencia de 10K se utiliza para reducir el ruido de alta frecuencia y bajar el volumen del audio. Forma un filtro pasa bajos RC con la capacitancia parasitaria del DAC y el amplificador de audio. Este filtro disminuye la amplitud de las señales de alta frecuencia, reduciendo efectivamente el ruido de alta frecuencia. Por lo tanto, agregar la resistencia de 10K hace que la música suene más suave y elimina el ruido de alta frecuencia no deseado.
Si la música de tu tarjeta SD ya es suave, puedes quitar o reemplazar la resistencia por un valor menor.
Conecta el ESP32-WROOM-32E a la computadora usando el cable USB.
Modifica el código.
Modifica la línea de código
file = new AudioFileSourceSD_MMC("/To Alice.mp3")
; para reflejar el nombre y ruta de tu archivo.Nota
Abre el archivo
7.5_mp3_player_sd.ino
bajo la ruta deesp32-starter-kit-main\c\codes\7.5_mp3_player_sd
. O copia este código en Arduino IDE.Después de seleccionar la placa (ESP32 Dev Module) y el puerto apropiado, haz clic en el botón Subir.
La biblioteca
ESP8266Audio
se utiliza aquí, consulta Instalación Manual para un tutorial de instalación.
Selecciona el puerto y la placa apropiados en el IDE de Arduino y sube el código a tu ESP32.
Después de subir exitosamente el código, escucharás tu música favorita sonando.
¿Cómo funciona?
El código utiliza varias clases de la biblioteca
ESP8266Audio
para reproducir un archivo MP3 desde una tarjeta SD a través de I2S:#include "AudioFileSourceSD_MMC.h" #include "AudioOutputI2S.h" #include "AudioGeneratorMP3.h" #include "SD_MMC.h" #include "FS.h"
AudioGeneratorMP3
es una clase que decodifica audio MP3.AudioFileSourceSD_MMC
es una clase que lee datos de audio desde una tarjeta SD.AudioOutputI2S
es una clase que envía datos de audio a la interfaz I2S.
En la función
setup()
, inicializamos la tarjeta SD, abrimos el archivo MP3 desde la tarjeta SD, configuramos la salida I2S en el DAC interno del ESP32, configuramos la salida a mono y comenzamos el generador MP3.void setup() { // Start the serial communication. Serial.begin(115200); delay(1000); // Initialize the SD card. If it fails, print an error message. if (!SD_MMC.begin()) { Serial.println("SD card mount failed!"); } // Open the MP3 file from the SD card. Replace "/To Alice.mp3" with your own MP3 file name. file = new AudioFileSourceSD_MMC("/To Alice.mp3"); // Set up the I2S output on ESP32's internal DAC. out = new AudioOutputI2S(0, 1); // Set the output to mono. out->SetOutputModeMono(true); // Initialize the MP3 generator with the file and output. mp3 = new AudioGeneratorMP3(); mp3->begin(file, out); }
En la función
loop()
, verificamos si el generador MP3 está funcionando. Si es así, continuamos en bucle; de lo contrario, lo detenemos e imprimimos «MP3 terminado» en el monitor serial.void loop() { // If the MP3 is running, loop it. Otherwise, stop it. if (mp3->isRunning()) { if (!mp3->loop()) mp3->stop(); } // If the MP3 is not running, print a message and wait for 1 second. else { Serial.println("MP3 done"); delay(1000); } }