ESP8266 - Reproductor de MP3

Este tutorial te enseña cómo hacer un reproductor MP3 utilizando ESP8266, un módulo reproductor MP3, una tarjeta microSD y un altavoz. Los archivos MP3 (música o audio grabado) se almacenan en la tarjeta microSD. Luego, ESP8266 puede controlar el módulo reproductor MP3 para leer una canción seleccionada desde la tarjeta microSD, convertirla en una señal de audio y enviar la señal al altavoz. En detalle, aprenderemos:

Luego, puedes modificar el código para añadir un potenciómetro o un codificador rotatorio para cambiar el volumen.

Hardware Requerido

1×ESP8266 NodeMCU
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×Cables Puente
1×(Recomendado) Placa de Expansión de Terminales de Tornillo para ESP8266
1×(Recomendado) Divisor de Alimentación para ESP8266 Tipo-C

Or you can buy the following kits:

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 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 de ESP8266 incluye 4 pines:
    • Pin RX: pin de datos, debe conectarse a un pin TX del ESP8266 (Serial de hardware o software)
    • Pin TX: pin de datos, debe conectarse a un pin RX del ESP8266 (Serial de hardware o software)
    • Pin VCC: pin de alimentación, debe conectarse a VCC (5V)
    • Pin GND: pin de alimentación, debe conectarse a GND (0V)
  • La interfaz para el altavoz es una toma hembra de salida Aux de 3,5 mm.
  • La interfaz para la tarjeta Micro SD es un zócalo para Micro SD en la parte trasera del módulo.
Pinout del módulo reproductor MP3 en serie
image source: diyables.io

Pinout del altavoz

Un altavoz suele tener dos interfaces:

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

Cómo funciona

Lo que necesitamos preparar:

  • Almacene previamente una lista de canciones o audio grabado que desea reproducir en la tarjeta microSD.
  • Inserte la tarjeta microSD en el módulo reproductor MP3.
  • Conecte el módulo reproductor MP3 al ESP8266.
  • Conecte el altavoz al módulo reproductor MP3.
  • Conecte el altavoz a una fuente de alimentación.

Cada archivo MP3 almacenado en la tarjeta microSD tendrá un índice. El índice es el orden de las canciones almacenadas, empezando desde 0.

Luego podemos programar el ESP8266 para enviar un comando al módulo reproductor de MP3. Este admite los siguientes comandos:

  • Reproducir
  • Pausar
  • Reproducir siguiente
  • Reproducir anterior
  • Cambiar volumen

Cuando el módulo reproductor de MP3 lee un archivo MP3 desde la tarjeta microSD, lo convierte en una señal de audio y envía dicha señal al altavoz a través de la interfaz auxiliar de 3,5 mm.

Diagrama de Cableado

Diagrama de cableado del módulo reproductor MP3 ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

Para obtener m\u00e1s informaci\u00f3n, consulte Pines del ESP8266 y c\u00f3mo alimentar ESP8266 y otros componentes.

Código de ESP8266 - Reproducir Música

El código que se muestra a continuación reproduce la primera canción almacenada en la tarjeta microSD.

/* * Este código de ESP8266 NodeMCU fue desarrollado por es.newbiely.com * Este código de ESP8266 NodeMCU se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/esp8266/esp8266-mp3-player */ #include <SoftwareSerial.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 #define ESP8266_RX D5 // The ESP8266 pin connected to the TX of the Serial MP3 Player module #define ESP8266_TX D6 // The ESP8266 pin connected to the RX of the Serial MP3 Player module SoftwareSerial mp3(ESP8266_RX, ESP8266_TX); void setup() { Serial.begin(9600); mp3.begin(9600); 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++) { mp3.write(frame[i]); } }

Pasos R\u00e1pidos

Para empezar con ESP8266 en el IDE de Arduino, siga estos pasos:

  • Consulta el tutorial de cómo configurar el entorno para ESP8266 en Arduino IDE si es la primera vez que usas ESP8266.
  • Conecta los componentes como se muestra en el diagrama.
  • Conecta la placa ESP8266 a tu computadora usando un cable USB.
  • Abre Arduino IDE en tu computadora.
  • Elige la placa ESP8266 correcta, como (p. ej. NodeMCU 1.0 (Módulo ESP-12E)), y su puerto COM correspondiente.
  • Sigue las instrucciones en Cómo funciona
  • Copia el código anterior y ábrelo con Arduino IDE.
  • Haz clic en el botón Subir en Arduino IDE para cargar el código en ESP8266.
  • Disfruta de la música.

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

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

/* * Este código de ESP8266 NodeMCU fue desarrollado por es.newbiely.com * Este código de ESP8266 NodeMCU se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/esp8266/esp8266-mp3-player */ #include <SoftwareSerial.h> #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 #define ESP8266_RX D5 // The ESP8266 pin connected to the TX of the Serial MP3 Player module #define ESP8266_TX D6 // The ESP8266 pin connected to the RX of the Serial MP3 Player module SoftwareSerial mp3(ESP8266_RX, ESP8266_TX); ezButton button_play(D1); // create ezButton object for pin D1 ezButton button_pause(D2); // create ezButton object for pin D2 ezButton button_next(D3); // create ezButton object for pin D3 ezButton button_prev(D4); // create ezButton object for pin D4 void setup() { Serial.begin(9600); mp3.begin(9600); 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++) { mp3.write(frame[i]); } }

El diagrama de cableado para el código anterior:

Diagrama de cableado del ESP8266 NodeMCU para reproductor MP3 y altavoz

This image is created using Fritzing. Click to enlarge image

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

  • Añadir un potenciómetro para controlar el volumen, ver el tutorial ESP8266 Potenciómetro tutorial
  • Añadir un control remoto IR, ver el tutorial ESP8266 Control Remoto IR tutorial
  • Añadir un lector RFID y una tarjeta para crear un reproductor MP3 con RFID, ver el tutorial ESP8266 RFID tutorial

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!