Agregue comandos de voz a sus proyectos DFPlayer Mini | arduino

El módulo DFPlayer Mini (o) MP3-TF-16P es un pequeño módulo mp3 de bajo costo con amplificador incorporado. Puede conectar un altavoz de 3 vatios directamente al módulo. Además, puede usar un amplificador de audio como PAM8403 para aumentar la señal de audio. Tiene un puerto para tarjeta SD y lee los archivos MP3 de la tarjeta SD. Este módulo MP3 puede funcionar de forma independiente o puede usar cualquier microcontrolador como Arduino a través de puertos UART (TX y RX). DFRobot publica una biblioteca especial en GitHub.

Al usar este módulo MP3, puede usarlo en muchas aplicaciones, como anuncios de trenes en estaciones de tren, avisos de voz de alarma de incendio, transmisión de voz de navegación de automóviles, alerta de voz Blind Stick y muchos proyectos que necesitan alertas basadas en voz.

En este tutorial, veremos cómo usar este módulo con Arduino.

Especificaciones:

  • frecuencias de muestreo admitidas (kHz): 8/11.025/12/16/22.05/24/32/44.1/48
  • Salida DAC de 24 bits, soporte para rango dinámico 90dB, soporte SNR 85dB
  • totalmente compatible con el sistema de archivos FAT16, FAT32, soporte máximo 32G de la tarjeta TF, soporte 32G de disco U, 64M bytes NORFLASH
  • una variedad de modos de control, modo de control de E/S, modo serial, modo de control de botón AD
  • Función de espera de sonido publicitario, la música se puede suspender. cuando termine la publicidad en la musica seguir sonando
  • datos de audio ordenados por carpeta, admite hasta 100 carpetas, cada carpeta puede contener hasta 255 canciones
  • Volumen ajustable de 30 niveles, ecualizador de 6 niveles ajustable

Este módulo tiene un pin TX y RX que se usa para comunicarse con el Arduino. También tiene funciones DAC y USB.

Diagrama de pines:

Clavo Descripción Nota
CCV Fuente de alimentación + CC 3,2 V-5 V
RX Entrada en serie UART
Texas Salida en serie UART
DAC_R Canal derecho de salida de audio Unidad de auriculares y amplificador
DAC_L Canal izquierdo de salida de audio Unidad de auriculares y amplificador
SPK2 Vocero – Altavoz de accionamiento de menos de 3W
TIERRA Tierra Tierra de potencia
IO1 Puerto de activación 1 Pulsación corta para reproducir la anterior (Larga – Disminución de volumen)
TIERRA Tierra Tierra de potencia
IO2 Puerto de activación 2 Pulsación corta para reproducir el siguiente (Larga – Aumento de volumen)
ADKEY1 AD Puerto 1 Activar Reproducir primer segmento
ADKEY2 AD Puerto 1 Activar la reproducción del quinto segmento
USB+ USB+DP Puerto USB
USB- USB-DM Puerto USB
OCUPADO Estado de reproducción Jugando con medios bajos

Para usar con Arduino necesitaremos pines VCC, GND, SP+, SP-, TX y RX solamente. Otros pines son opcionales.

Componentes necesarios:

Diagrama de circuito:

Conecte el circuito según el diagrama del circuito. En el pin RX del módulo MP3, usamos una resistencia de 1K Ohm. Debido a que los pines TX y RX son lógicos de 3,3 V (los pines de Arduino Uno tienen un nivel de 5 V) y la resistencia bajará el voltaje necesario para evitar crujidos en el altavoz.

Requisitos previos:

  • El módulo solo acepta archivos MP3. Para convertir tus archivos a MP3 antes de usarlo. Puede usar muchos convertidores en línea para esto.
  • El nombre debe ser 001, 002, 003 y así sucesivamente. De lo contrario, el reproductor elegirá el primer archivo copiado en la tarjeta SD.
  • Copie los archivos a la tarjeta SD
  • Instale la mini biblioteca DFPlayer desde GitHub o búsquela en el administrador de la biblioteca Arduino. Hay nuevas versiones disponibles y no funcionaron bien. Así que elige la versión 1.0 que funcione perfectamente.

Después de instalar la biblioteca, copie y pegue el siguiente código y cárguelo.

#include "Arduino.h"  #include "SoftwareSerial.h"  #include "DFRobotDFPlayerMini.h"  SoftwareSerial mySoftwareSerial(2, 3); // RX, TX  DFRobotDFPlayerMini myDFPlayer;  void setup()  {    mySoftwareSerial.begin(9600);    Serial.begin(115200);    Serial.println();    Serial.println(F("DFRobot DFPlayer Mini Demo"));    Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));    if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.      Serial.println(F("Unable to begin:"));      Serial.println(F("1.Please recheck the connection!"));      Serial.println(F("2.Please insert the SD card!"));      while(true);    }    Serial.println(F("DFPlayer Mini online."));    myDFPlayer.volume(20);  //Set volume value. From 0 to 30  }  void loop()  {    myDFPlayer.play(1);  //Play the first mp3  delay(2000);    myDFPlayer.next();  //Play next mp3  delay(2000);    myDFPlayer.next();  //Play next mp3  delay(2000);    myDFPlayer.next();  //Play next mp3  delay(2000);  }

Los códigos anteriores reproducen el primer MP3 durante 2 segundos y luego reproducen el siguiente 3 veces. Esto se repetirá continuamente. Para usar otras funciones, verifique el código de función completo para usar las funciones específicas según su elección.

Descripción:

Para inicializar las funciones del Software Serial usamos las siguientes líneas de código

#include "SoftwareSerial.h"

Esta línea agrega la biblioteca Software Serial a nuestro programa.

SoftwareSerial mySoftwareSerial(2, 3); // RX, TX

Esta función asigna los pines 2 y 3 de Arduino para la comunicación en serie.

DFRobotDFPlayerMini myDFPlayer;

Esta línea crea un objeto para DFRobotDFPlayerMini como myDFPlayer (para simplificar la función).

Funciones importantes:

myDFPlayer.volume(20);  //Set volume value (0~30).

Esta función establece el volumen en 20. Se puede modificar de 0 a 30.

myDFPlayer.play(1);  //Play the first mp3

Esta función reproduce el primer MP3 en la tarjeta SD.

myDFPlayer.next();  //Play next mp3.

Reproduce el siguiente archivo MP3 en la tarjeta SD.

myDFPlayer.previous();  //Play previous mp3

Reproduce el archivo MP3 anterior en la tarjeta SD.

Otras funciones:

  myDFPlayer.next();  //Play next mp3    myDFPlayer.previous();  //Play previous mp3    myDFPlayer.play(1);  //Play the first mp3    myDFPlayer.loop(1);  //Loop the first mp3    myDFPlayer.pause();  //pause the mp3    myDFPlayer.start();  //start the mp3 from the pause    myDFPlayer.playFolder(15, 4);  //play specific mp3 in SD:/15/004.mp3; Folder Name(1~99); File Name(1~255)    myDFPlayer.enableLoopAll(); //loop all mp3 files.    myDFPlayer.disableLoopAll(); //stop loop all mp3 files.    myDFPlayer.playMp3Folder(4); //play specific mp3 in SD:/MP3/0004.mp3; File Name(0~65535)    myDFPlayer.advertise(3); //advertise specific mp3 in SD:/ADVERT/0003.mp3; File Name(0~65535)    myDFPlayer.stopAdvertise(); //stop advertise    myDFPlayer.playLargeFolder(2, 999); //play specific mp3 in SD:/02/004.mp3; Folder Name(1~10); File Name(1~1000)    myDFPlayer.loopFolder(5); //loop all mp3 files in folder SD:/05.    myDFPlayer.randomAll(); //Random play all the mp3.    myDFPlayer.enableLoop(); //enable loop.    myDFPlayer.disableLoop(); //disable loop.  

Código de función COMPLETO:

#include "Arduino.h"  #include "SoftwareSerial.h"  #include "DFRobotDFPlayerMini.h"    SoftwareSerial mySoftwareSerial(10, 11); // RX, TX  DFRobotDFPlayerMini myDFPlayer;  void printDetail(uint8_t type, int value);    void setup()  {    mySoftwareSerial.begin(9600);    Serial.begin(115200);      Serial.println();    Serial.println(F("DFRobot DFPlayer Mini Demo"));    Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));      if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.      Serial.println(F("Unable to begin:"));      Serial.println(F("1.Please recheck the connection!"));      Serial.println(F("2.Please insert the SD card!"));      while(true);    }    Serial.println(F("DFPlayer Mini online."));      myDFPlayer.setTimeOut(500); //Set serial communictaion time out 500ms      //----Set volume----    myDFPlayer.volume(10);  //Set volume value (0~30).    myDFPlayer.volumeUp(); //Volume Up    myDFPlayer.volumeDown(); //Volume Down      //----Set different EQ----    myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);  //  myDFPlayer.EQ(DFPLAYER_EQ_POP);  //  myDFPlayer.EQ(DFPLAYER_EQ_ROCK);  //  myDFPlayer.EQ(DFPLAYER_EQ_JAZZ);  //  myDFPlayer.EQ(DFPLAYER_EQ_CLASSIC);  //  myDFPlayer.EQ(DFPLAYER_EQ_BASS);      //----Set device we use SD as default----  //  myDFPlayer.outputDevice(DFPLAYER_DEVICE_U_DISK);    myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);  //  myDFPlayer.outputDevice(DFPLAYER_DEVICE_AUX);  //  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SLEEP);  //  myDFPlayer.outputDevice(DFPLAYER_DEVICE_FLASH);      //----Mp3 control----  //  myDFPlayer.sleep();     //sleep  //  myDFPlayer.reset();     //Reset the module  //  myDFPlayer.enableDAC();  //Enable On-chip DAC  //  myDFPlayer.disableDAC();  //Disable On-chip DAC  //  myDFPlayer.outputSetting(true, 15); //output setting, enable the output and set the gain to 15      //----Mp3 play----    myDFPlayer.next();  //Play next mp3    delay(1000);    myDFPlayer.previous();  //Play previous mp3    delay(1000);    myDFPlayer.play(1);  //Play the first mp3    delay(1000);    myDFPlayer.loop(1);  //Loop the first mp3    delay(1000);    myDFPlayer.pause();  //pause the mp3    delay(1000);    myDFPlayer.start();  //start the mp3 from the pause    delay(1000);    myDFPlayer.playFolder(15, 4);  //play specific mp3 in SD:/15/004.mp3; Folder Name(1~99); File Name(1~255)    delay(1000);    myDFPlayer.enableLoopAll(); //loop all mp3 files.    delay(1000);    myDFPlayer.disableLoopAll(); //stop loop all mp3 files.    delay(1000);    myDFPlayer.playMp3Folder(4); //play specific mp3 in SD:/MP3/0004.mp3; File Name(0~65535)    delay(1000);    myDFPlayer.advertise(3); //advertise specific mp3 in SD:/ADVERT/0003.mp3; File Name(0~65535)    delay(1000);    myDFPlayer.stopAdvertise(); //stop advertise    delay(1000);    myDFPlayer.playLargeFolder(2, 999); //play specific mp3 in SD:/02/004.mp3; Folder Name(1~10); File Name(1~1000)    delay(1000);    myDFPlayer.loopFolder(5); //loop all mp3 files in folder SD:/05.    delay(1000);    myDFPlayer.randomAll(); //Random play all the mp3.    delay(1000);    myDFPlayer.enableLoop(); //enable loop.    delay(1000);    myDFPlayer.disableLoop(); //disable loop.    delay(1000);      //----Read imformation----    Serial.println(myDFPlayer.readState()); //read mp3 state    Serial.println(myDFPlayer.readVolume()); //read current volume    Serial.println(myDFPlayer.readEQ()); //read EQ setting    Serial.println(myDFPlayer.readFileCounts()); //read all file counts in SD card    Serial.println(myDFPlayer.readCurrentFileNumber()); //read current play file number    Serial.println(myDFPlayer.readFileCountsInFolder(3)); //read fill counts in folder SD:/03  }    void loop()  {    static unsigned long timer = millis();      if (millis() - timer > 3000) {      timer = millis();      myDFPlayer.next();  //Play next mp3 every 3 second.    }      if (myDFPlayer.available()) {      printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.    }  }    void printDetail(uint8_t type, int value){    switch (type) {      case TimeOut:        Serial.println(F("Time Out!"));        break;      case WrongStack:        Serial.println(F("Stack Wrong!"));        break;      case DFPlayerCardInserted:        Serial.println(F("Card Inserted!"));        break;      case DFPlayerCardRemoved:        Serial.println(F("Card Removed!"));        break;      case DFPlayerCardOnline:        Serial.println(F("Card Online!"));        break;      case DFPlayerPlayFinished:        Serial.print(F("Number:"));        Serial.print(value);        Serial.println(F(" Play Finished!"));        break;      case DFPlayerError:        Serial.print(F("DFPlayerError:"));        switch (value) {          case Busy:            Serial.println(F("Card not found"));            break;          case Sleeping:            Serial.println(F("Sleeping"));            break;          case SerialWrongStack:            Serial.println(F("Get Wrong Stack"));            break;          case CheckSumNotMatch:            Serial.println(F("Check Sum Not Match"));            break;          case FileIndexOut:            Serial.println(F("File Index Out of Bound"));            break;          case FileMismatch:            Serial.println(F("Cannot Find File"));            break;          case Advertise:            Serial.println(F("In Advertise"));            break;          default:            break;        }        break;      default:        break;    }  }