Reproducir archivos MP3 con FTPlayer Mini en máquina de estados

Buenos días. Estoy desarrollando un ascensor para un diorama de trenes, con un programa basado en máquina de estados que realicé con la invalorable ayuda de Ignorante_Absoluto.

Con un dispositivo DFPlayer Mini estoy tratando de agregarle sonidos con voces que informen en qué piso se encuentra y sonidos de movimiento al subir y descender, utilizando la biblioteca DFPlayerMini_Fast, sin emplear "delay(n)" .

En las pruebas aisladas que estoy haciendo no consigo que se ejecute un archivo determinado de los que están en la tarjeta microSD (001 002 003 y 004.mp3, mediante el comando "myMP3.playFromMP3Folder(003);".

De lograrlo, los invocaría desde cada uno de los cinco estados (inicial, subiendo, arriba, bajando, abajo), que incluirían antes de "play" el comando "myMP3.pause()".

El código aislado, con el que no consigo por ejemplo que se ejecute por ejemplo el archivo 003.mp3, es el siguiente:

#include <SoftwareSerial.h>
#include <DFPlayerMini_Fast.h>
SoftwareSerial mySerial(10, 11); // RX, TX
DFPlayerMini_Fast myMP3;

void setup()
{
  Serial.begin(115200);
  mySerial.begin(9600);
  myMP3.begin(mySerial);
  myMP3.volume(20);
  myMP3.pause();
}

void loop()
{
  sonido_01();
}
 
void sonido_01(){
  if(myMP3.isPlaying() == false){
    myMP3.playFromMP3Folder(003);
    }
}

Agradezco la ayuda que me puedan brindar. Un cordial saludo.

Mira lo que dice la librería,

/**************************************************************************/
 /*!
	 @brief  Play a specific track in the folder named "MP3".
	 @param    trackNum
			   The track number to play.
 */
 /**************************************************************************/
void DFPlayerMini_Fast::playFromMP3Folder(uint16_t trackNum)

espera un track number no un archivo.
Asi que solo ponle

myMP3.playFromMP3Folder(3);

Si tuvieras 3 tracks y si no los tienes, te dará error, error que no estas leyendo.

1 Like

Muchas gracias Ricardo por tu respuesta, un gusto estar nuevamente en contacto contigo.
Probé lo que me indicas, sin éxito. La carpeta tiene cuatro archivos mp3 y no los ejecuta escriba el comando con sólo el número 3 en lugar de 003 o con cualquiera de los otros tres números.
Te envío un cordial saludo.

Bien, vuelve a lo básico.
Prueba el ejemplo simple x track, hasta que funcione la librería.
Luego vuelve a lo que estas haciendo.

1 Like

Disculpame, no sé cómo hacerlo. ¿Me puedes por favor enviar el ejemplo simple por track?

Bien, yo hago siempre esto.
Tomo una librería y ejectuto su ejemplo, el que mas se ajusta a mi necesidad pero sin modificarlo demasiado.
Pruebo que funciona y luego avanzo.
En tu caso, miro la librería y ya te digo
Este es el ejemplo básico de tu librería example.ino
Require por lo que veo un par de pistas mp3 ubicadas en el directorio raíz, no en un subdirectorio. Corrígeme si estoy equivocado.
Prueba que eso funcione.

Algo extra y mira lo que dice la documentación sobre tu posible error.
If you use the playFromMP3Folder() or playAdvertisement() functions, the files to be played must be organised in an extremely precise manner. The "MP3 Folder" must be in the root of the storage device (such as a MicroSD card) and it must be called "mp3".
Si usas playFromMP3Folder() tu caso, los archivos que serán reproducidos deben estar organizados de una manera muy precisa. La carpeta "MP3" debe estar en la raiz del dispositivo de almacenamiento (tal como una MicroSD) y debe llamarse "mp3".

Se llama mp3 la carpeta?

1 Like

Muy claro tu mensaje, muchas gracias nuevamente. Sigo habitualmente el mismo camino que mencionas, yendo de lo simple a lo complejo, avanzando sólo si lo último funcionó. Cuando el play está en el setup funciona sin inconvenientes, aún teniendo n carpetas en el dispositivo de memoria. Los problemas comienzan en el loop.
Gracias a tus indicaciones ahora veo que cometí un error que puede explicar que no funcione: la carpeta, que está en la raíz de la MicroSD, es MP3, en mayúsculas, no mp3. En cuanto pueda pruebo y te aviso.

Podria ser ese el problema. De casualidad lo leí.
Es algo particular de esta librería.

1 Like

Renombré la carpeta MP3 a mp3 y tampoco ejecutó los archivos.
Volví al paso a paso y en lugar de utilizar myMP3.playFromMP3Folder(1); cambié por myMP3.play(1); y funcionó.
Probé a continuación myMP3.play(2); luego myMP3.play(3); y finalmente myMP3.play(4); y en cada caso ejecutó los archivos correctos.
¿Será que en la librería myMP3.playFromMP3Folder(n); no funciona? ¿O que haya que declarar de alguna manera a los parámetros a utilizar en ella?

Me parece que depende del módulo (seguramente de cual chip usa) porque tengo la hoja de datos de un mp3Player_mini en la cual no existe el comando 0x12, que corresponde a playFromMp3Folder().

Esruve viendo en internet comandos de otras placas similares (o sea otras que también dicen ser mp3Player_mini) y si tienen definido el comando 0x12.

Otra particularidad en la hoja de datos de este modelo dice que soporta 100 carpetas y 1000 temas por carpeta, pero (aunque soporta nombres alfanuméricos en mayúsculas solamente) recomienda numerar las carpetas con 2 dígitos (00 a 99) y las pistas con 3 (000 a 999).
Claramente no soporta un nombre de carpeta "mp3" ya que solo admite mayúsculas.

Otros, entiendo que sí soportan nombres en minúsculas e incluso soportan menos carpetas y pistas.

Una verdadera "macana" porque no nos permitiría hacer un código que funcione en todos los módulos que pululan por el mercado, hasta que no lo tenemos en mano no sabemos que comandos usar, ni como nombrar las carpetas o cuantas pistas soporta. :man_facepalming:t2:

Saludos

1 Like

Muchas gracias Gatul por tu aporte.
Lo que encontraste puede explicar la falta de ejecución de ese comando, a pesar de las múltiples pruebas y reconexiones que hice. Es el precio que se paga por utilizar clones de origen desconocido :frowning:
Estaba interesado en trabajar con varias carpetas para así poder ir cambiando los mensajes sin tener que recargar el dispositivo de memoria.
Un cordial saludo.

Te adjunto el link de descarga de la hoja de datos que tengo, aparentemente correspondería a tu dispositivo, por si te sirve de ayuda.

mp3Player_mini datasheet

Saludos

1 Like

Muchas gracias por tu envío, me será de utilidad.
Un cordial saludo.

Solucionado el problema. Muchas gracias Surbyte por tu ayuda y Gatul por tu aporte.
Un cordial saludo.

Deberías @apacher basado en lo que aportó @gatul conseguir un módulo de fuente reconocida como Adafruit verificando el tema en cuestion.
Me parece que en este caso vale la pena no frustrarse por algo que no funciona en un clon miniplayer (que es obviamente lo que tienes según mi entender) y conseguir alguno que se comporte como se espera.
El mercado esta plagado de fakes. Es muy dificil detectarlos pero se supone que las casas de prestigio venden cosas de calidad.

Efectivamente lo que tengo son dos clones DFPlayer Mini.
La solución que encontré gracias a tu ayuda, agregado a la confirmación de Gatul para no seguir insisitendo con ese comando, me permite continuar con el proyecto, con la limitación de utilizar una sola carpeta.
En cuanto pueda compraré un dispositivo original.
Muchas gracias nuevamente.
Un cordial saludo.

Puedes confirmar que es un clon del DFPLayer Mini?