ESP32 - Reproductor de MP3

En esta guía, descubriremos cómo crear un reproductor de MP3 utilizando un ESP32, un módulo reproductor de MP3, una tarjeta microSD y un altavoz. Los archivos MP3, que pueden ser música o audio grabado, se guardan en la tarjeta microSD. El ESP32 será programado para enviar comandos para controlar el módulo reproductor de MP3, indicar qué canción seleccionar de la tarjeta SD, convertirla en sonido y luego enviar ese sonido al altavoz. Profundizaremos en los siguientes aspectos:

Después, puedes llevar el código un paso más allá incorporando un potenciómetro o un codificador rotatorio para ajustar el volumen.

Hardware Requerido

1×Módulo de Desarrollo ESP32 ESP-WROOM-32
1×Cable USB Tipo-A a Tipo-C (para PC USB-A)
1×Cable USB Tipo-C a Tipo-C (para PC USB-C)
1×Módulo Reproductor MP3 Serial
1×Tarjeta Micro SD
1×Altavoz Aux 3.5mm
1×Protoboard
1×Cables Puente
1×(Recomendado) Placa de Expansión de Terminales de Tornillo para ESP32
1×(Recomendado) Breakout Expansion Board for ESP32
1×(Recomendado) Divisor de Alimentación para ESP32

Or you can buy the following kits:

1×DIYables ESP32 Starter Kit (ESP32 included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgación: Algunos de los enlaces proporcionados en esta sección son enlaces de afiliado de Amazon. Podemos recibir una comisión por las compras realizadas a través de estos enlaces sin costo adicional para usted. Apreciamos su apoyo.

Acerca del módulo de reproductor MP3 en serie y del altavoz

Pinout del módulo reproductor MP3 en serie

Un módulo reproductor de MP3 en serie tiene tres interfaces:

  • La interfaz con el ESP32 incluye 4 pines:
    • Pin RX: pin de datos; debe conectarse a un pin TX del ESP32
    • Pin TX: pin de datos; debe conectarse a un pin RX del ESP32
    • Pin VCC: pin de alimentación; debe conectarse a VCC (3,3V o 5V)
    • Pin GND: pin de alimentación; debe conectarse a GND (0V)
  • La interfaz para el altavoz es una toma hembra de salida auxiliar de 3,5 mm.
  • La interfaz para la tarjeta Micro SD es un zócalo de tarjeta Micro SD en la parte posterior del módulo.
Pinout del módulo reproductor MP3 en serie

Pinout del altavoz

Un altavoz suele tener dos interfaces:

  • Interfaz de señal de audio: es un conector macho auxiliar de 3,5 mm que se conecta al módulo reproductor de MP3
  • Interfaz de alimentación: puede ser USB, un adaptador de corriente de 5 V u otra interfaz de alimentación

Cómo funciona

Para empezar, asegúrate de tener lo siguiente:

  • Reúne una colección de canciones o grabaciones de audio que quieras reproducir y guárdalas en una tarjeta microSD.
  • Inserta la tarjeta microSD en el módulo reproductor MP3.
  • Conecta el módulo reproductor MP3 al ESP32 y conecta el altavoz al módulo reproductor MP3. Además, asegúrate de que el altavoz esté conectado a una fuente de alimentación.

Cada archivo MP3 en la tarjeta microSD obtiene un identificador, comenzando desde 0. Luego, puedes decirle al ESP32 que haga varias cosas con el módulo reproductor de MP3, como:

  • Reproducir: Comienza a reproducir la canción seleccionada.
  • Pausar: Pausa la canción.
  • Reproducir la siguiente: Ir a la siguiente canción.
  • Volver a la canción anterior: Regresa a la canción anterior.
  • Ajustar Volumen: Ajusta qué tan alto está el volumen de la música.

Cuando el módulo reproductor de MP3 recibe un comando, lee el archivo MP3 de la tarjeta microSD, lo convierte en una señal de audio y envía esa señal al altavoz utilizando una conexión auxiliar de 3,5 mm.

Diagrama de Cableado

Diagrama de cableado del módulo reproductor MP3 para ESP32

This image is created using Fritzing. Click to enlarge image

Si no sabe c\u00f3mo alimentar ESP32 y otros componentes, encuentre instrucciones en el siguiente tutorial: C\u00f3mo alimentar ESP32.

Cómo conectar el ESP32 y un reproductor de MP3

Código ESP32 - Reproducir música

El código de abajo reproduce la primera canción almacenada en la tarjeta microSD.

/* * Este código de ESP32 fue desarrollado por es.newbiely.com * Este código de ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/esp32/esp32-mp3-player */ #define CMD_PLAY_NEXT 0x01 #define CMD_PLAY_PREV 0x02 #define CMD_PLAY_W_INDEX 0x03 #define CMD_SET_VOLUME 0x06 #define CMD_SEL_DEV 0x09 #define CMD_PLAY_W_VOL 0x22 #define CMD_PLAY 0x0D #define CMD_PAUSE 0x0E #define CMD_SINGLE_CYCLE 0x19 #define DEV_TF 0x02 #define SINGLE_CYCLE_ON 0x00 #define SINGLE_CYCLE_OFF 0x01 void setup() { Serial.begin(9600); Serial2.begin(9600, SERIAL_8N1, 16, 17); delay(500); // wait chip initialization is complete mp3_command(CMD_SEL_DEV, DEV_TF); // select the TF card delay(200); // wait for 200ms mp3_command(CMD_PLAY, 0x0000); // Play mp3 //mp3_command(CMD_PAUSE, 0x0000); // Pause mp3 //mp3_command(CMD_PLAY_NEXT, 0x0000); // Play next mp3 //mp3_command(CMD_PLAY_PREV, 0x0000); // Play previous mp3 //mp3_command(CMD_SET_VOLUME, 30); // Change volume to 30 } void loop() { } void mp3_command(int8_t command, int16_t dat) { int8_t frame[8] = { 0 }; frame[0] = 0x7e; // starting byte frame[1] = 0xff; // version frame[2] = 0x06; // the number of bytes of the command without starting byte and ending byte frame[3] = command; // frame[4] = 0x00; // 0x00 = no feedback, 0x01 = feedback frame[5] = (int8_t)(dat >> 8); // data high byte frame[6] = (int8_t)(dat); // data low byte frame[7] = 0xef; // ending byte for (uint8_t i = 0; i < 8; i++) { Serial2.write(frame[i]); } }

Pasos R\u00e1pidos

Código ESP32 - Reproducir música con botones de control

El código a continuación es una mejora del código anterior. Añade cuatro botones para que puedas interactuar con el reproductor de MP3.

/* * Este código de ESP32 fue desarrollado por es.newbiely.com * Este código de ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/esp32/esp32-mp3-player */ #include <ezButton.h> #define CMD_PLAY_NEXT 0x01 #define CMD_PLAY_PREV 0x02 #define CMD_PLAY_W_INDEX 0x03 #define CMD_SET_VOLUME 0x06 #define CMD_SEL_DEV 0x09 #define CMD_PLAY_W_VOL 0x22 #define CMD_PLAY 0x0D #define CMD_PAUSE 0x0E #define CMD_SINGLE_CYCLE 0x19 #define DEV_TF 0x02 #define SINGLE_CYCLE_ON 0x00 #define SINGLE_CYCLE_OFF 0x01 ezButton button_play(32); // create ezButton object that attach to ESP32's pin GPIO32 ezButton button_pause(33); // create ezButton object that attach to ESP32's pin GPIO33 ezButton button_next(25); // create ezButton object that attach to ESP32's pin GPIO25 ezButton button_prev(26); // create ezButton object that attach to ESP32's pin GPIO26 void setup() { Serial.begin(9600); Serial2.begin(9600, SERIAL_8N1, 16, 17); delay(500); // wait chip initialization is complete mp3_command(CMD_SEL_DEV, DEV_TF); // select the TF card delay(200); // wait for 200ms button_play.setDebounceTime(50); // set debounce time to 50 milliseconds button_pause.setDebounceTime(50); // set debounce time to 50 milliseconds button_next.setDebounceTime(50); // set debounce time to 50 milliseconds button_prev.setDebounceTime(50); // set debounce time to 50 milliseconds } void loop() { button_play.loop(); // MUST call the loop() function first button_pause.loop(); // MUST call the loop() function first button_next.loop(); // MUST call the loop() function first button_prev.loop(); // MUST call the loop() function first if (button_play.isPressed()) { Serial.println("Play mp3"); mp3_command(CMD_PLAY, 0x0000); } if (button_pause.isPressed()) { Serial.println("Pause mp3"); mp3_command(CMD_PAUSE, 0x0000); } if (button_next.isPressed()) { Serial.println("Play next mp3"); mp3_command(CMD_PLAY_NEXT, 0x0000); } if (button_prev.isPressed()) { Serial.println("Play previous mp3"); mp3_command(CMD_PLAY_PREV, 0x0000); } } void mp3_command(int8_t command, int16_t dat) { int8_t frame[8] = {0}; frame[0] = 0x7e; // starting byte frame[1] = 0xff; // version frame[2] = 0x06; // the number of bytes of the command without starting byte and ending byte frame[3] = command; // frame[4] = 0x00; // 0x00 = no feedback, 0x01 = feedback frame[5] = (int8_t)(dat >> 8); // data high byte frame[6] = (int8_t)(dat); // data low byte frame[7] = 0xef; // ending byte for (uint8_t i = 0; i < 8; i++) { Serial2.write(frame[i]); } }

El diagrama de cableado del código anterior:

Diagrama de cableado del reproductor MP3 ESP32

This image is created using Fritzing. Click to enlarge image

Ahora puedes modificar los proyectos para añadir más funciones, por ejemplo:

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

Referencias de funciones

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!