
Actualizado: 3/7/2025: Ahora es compatible con familia de uC Espressif ESP8266 y ESP32. Este proyecto detalla cómo utilizar un ESP32 y un módulo DFPlayer Mini para reproducir archivos MP3 de manera automática cada cierto tiempo. Se abordan los aspectos del módulo DFPlayer Mini, las conexiones necesarias y el código de programación, proporcionando una guía completa para la implementación de este sistema de reproducción de audio.
El DFPlayer Mini es un módulo de reproducción de audio compacto y de bajo costo que puede reproducir archivos MP3 y WAV almacenados en una tarjeta microSD. Es ampliamente utilizado en proyectos de electrónica debido a su facilidad de uso y a su capacidad para manejar archivos de audio de manera autónoma, sin necesidad de una fuente de control compleja. El módulo cuenta con varias funciones, incluyendo el ajuste de volumen, control de reproducción, y la capacidad de seleccionar pistas mediante comandos simples.
El Desafío (El “Brief”)
El cliente requiere la sonorización de un espacio arquitectónico de vanguardia, inspirado en las obras de James Turrell (manipulación de la luz y el espacio) y la materialidad cálida de Herzog & de Meuron.
El objetivo es crear una atmósfera inmersiva de audio (sonidos ambientales, texturas sonoras) sin que la tecnología sea intrusiva. El sistema debe ser extremadamente fiable (grado industrial para operar 24/7), pero el núcleo de reproducción de audio debe ser modular y de bajo coste para fácil reemplazo. Los altavoces deben ser visibles pero integrarse como elementos de diseño, no como meras “cajas negras”.
2. La Solución: Arquitectura Híbrida
Propusimos una solución de hardware híbrida que combina la robustez del IoT industrial con la flexibilidad del hardware abierto.
- El Cerebro (Control Industrial): Se seleccionó un Arduino Opta (PLC micro) como controlador maestro del espacio. El Opta gestiona los horarios de encendido, se integra con los sensores de ocupación de la sala y coordina la iluminación ambiental (DALI/Modbus).
- La Voz (Módulo de Audio Especializado): Para la reproducción de audio, se implementó el módulo exacto detallado en la nota técnica de
ger.ar: un ESP32 gestionando un DFPlayer Mini. - La Integración: El Arduino Opta envía comandos vía Serial (UART) o I2C al ESP32, indicándole qué pista de la tarjeta SD reproducir según el “estado de ánimo” del espacio (ej. mañana luminosa vs. tarde íntima). El ESP32 actúa como un esclavo de audio dedicado.
3. La Estética (Turrell + Herzog & de Meuron)
El espacio es un “estudio despoblado”. Paredes de hormigón texturizado con tonos cálidos (terracota, beige). La luz es indirecta, bañando las paredes desde foseados ocultos, creando volúmenes de color casi tangibles.
Los altavoces no se esconden, se celebran. Son elementos colgantes, tipo péndulo, de diseño cilíndrico simple, acabado en metal cepillado oscuro o cerámica mate, sin logotipos visibles, suspendidos por cables delgados desde el techo alto.
4. Visualización del Proyecto (Imágenes Conceptuales)
IMAGEN 1: El Plano General (La Arquitectura)
Objetivo: Mostrar el espacio inmersivo y la integración de los altavoces.
Conexiones del Proyecto
Para conectar el DFPlayer Mini con el ESP32, es importante seguir las siguientes indicaciones:
- VCC: Conectar a una fuente de alimentación de 5V. El ESP32 puede proporcionar esta salida.
- GND: Conectar al pin de tierra (GND) del ESP32.
- TX del DFPlayer Mini: Conectar al pin GPIO 16 del ESP32.
- RX del DFPlayer Mini: Conectar al pin GPIO 17 del ESP32.
- SPK1 y SPK2: Conectar a un altavoz pasivo, si se desea una salida de audio. Alternativamente, se puede usar un conector de auriculares para salida de línea.
Es fundamental asegurarse de que las conexiones sean correctas para evitar daños en los componentes y garantizar un funcionamiento óptimo del sistema.
3. Código de Programación
El siguiente código muestra cómo configurar el ESP32 para comunicarse con el DFPlayer Mini y reproducir un archivo MP3 cada 10 segundos. Se utiliza el puerto Serial1 del ESP32/ESP8266 para la comunicación, aprovechando la capacidad del microcontrolador para manejar múltiples puertos UART de hardware.
#include <Arduino.h>
#include <DFPlayerMini_Fast.h>
#if defined(ESP32)
// En ESP32 podemos usar HardwareSerial en un segundo puerto
HardwareSerial playerSerial(2); // UART2: GPIO16=RX2, GPIO17=TX2 por defecto
const int DF_RX = 16; // al TX del DFPlayer
const int DF_TX = 17; // al RX del DFPlayer
#elif defined(ESP8266)
#include <SoftwareSerial.h>
const int DF_RX = D5; // ESP8266: conecta a TX del DFPlayer
const int DF_TX = D6; // ESP8266: conecta a RX del DFPlayer
SoftwareSerial playerSerial(DF_RX, DF_TX);
#else
#error "Este código sólo es para ESP32 o ESP8266"
#endif
DFPlayerMini_Fast myDFPlayer;
const unsigned long intervalReproduccion = 10000; // 10 s
unsigned long lastMillis = 0;
void setup() {
Serial.begin(115200);
Serial.println();
Serial.println("=== DFPlayer en ESP32/ESP8266 ===");
// Inicializar puerto al módulo
#if defined(ESP32)
playerSerial.begin(9600, SERIAL_8N1, DF_RX, DF_TX);
#elif defined(ESP8266)
playerSerial.begin(9600);
#endif
if (! myDFPlayer.begin(playerSerial)) {
Serial.println(F("ERROR: No se detectó DFPlayer Mini"));
while (true) delay(100);
}
myDFPlayer.volume(20); // 0–30
myDFPlayer.play(1); // empieza en pista 001
lastMillis = millis();
}
void loop() {
unsigned long now = millis();
// Cada 10 s, reproducir siguiente pista
if (now - lastMillis >= intervalReproduccion) {
lastMillis = now;
myDFPlayer.playNext();
}
// Procesar eventos del DFPlayer (fin de pista, errores…)
if (myDFPlayer.available()) {
DFPlayerEventType type = myDFPlayer.readType();
int state = myDFPlayer.readState();
Serial.print(F("Evento DFPlayer: "));
Serial.print(type);
Serial.print(F(" Estado interno: "));
Serial.println(state);
}
// Aquí puedes gestionar botones u otras tareas no bloqueantes
delay(20);
}
En este código, se utilizan las siguientes funciones y configuraciones:
- mySerial.begin(9600, SERIAL_8N1, 16, 17); Esta línea configura el puerto Serial1 del ESP32 con una velocidad de comunicación de 9600 baudios y establece los pines GPIO 16 y 17 como RX y TX, respectivamente.
- myDFPlayer.begin(mySerial); Esta función inicializa el DFPlayer Mini y lo prepara para recibir comandos.
- myDFPlayer.volume(20); Se ajusta el volumen del reproductor a un nivel de 20 (en una escala de 0 a 30).
- myDFPlayer.play(1); Este comando indica al DFPlayer Mini que reproduzca el archivo de audio numerado como 1 en la tarjeta microSD.
- delay(10000); Introduce una pausa de 10 segundos antes de repetir el ciclo.
Este código permite la reproducción continua de un archivo MP3, con una espera de 10 segundos entre reproducciones. Es posible modificar el tiempo de espera o cambiar el archivo a reproducir ajustando los parámetros del código según las necesidades del proyecto.



Deja un comentario