Add Voice Commands to your Projects DFPlayer Mini | Arduino

Back to Blog
Add Voice Commands to your Projects DFPlayer Mini | Arduino - Add Voice Commands to your Projects DFPlayer Mini | Arduino - Add Voice Commands to your Projects DFPlayer Mini | Arduino - Add Voice Commands to your Projects DFPlayer Mini | Arduino

Add Voice Commands to your Projects DFPlayer Mini | Arduino

DFPlayer Mini (or) MP3-TF-16P Module is a tiny low-cost mp3 module with inbuilt Amplifier. You can connect a 3-Watt Speaker directly to the Module. Additionally, you can use an audio amplifier like PAM8403 to boost the Audio signal. It has an SD Card port and reads the MP3 files from the SD Card. This MP3 Module can work standalone or you can use any Microcontroller like Arduino via UART Ports (TX & RX). A Special library is published by DFRobot on GitHub.

By using this MP3 Module you can use it in many applications like Train Announcements in Railway Stations, Fire alarm Voice Prompts, Car Navigation Voice Broadcast, Voice alert Blind Stick and many projects that need voice-based alerts.

In this tutorial, we will see how to use this module with Arduino.

Specifications:

  • supported sampling rates (kHz): 8/11.025/12/16/22.05/24/32/44.1/48
  • 24 -bit DAC output, support for dynamic range 90dB, SNR support 85dB
  • fully supports FAT16, FAT32 file system, maximum support 32G of the TF card, support 32G of U disk, 64M bytes NORFLASH
  • a variety of control modes, I/O control mode, serial mode, AD button control mode
  • Advertising sound waiting function, the music can be suspended. when advertising is over in the music continue to play
  • audio data sorted by folder, supports up to 100 folders, every folder can hold up to 255 songs
  • 30 level adjustable volume, 6 -level EQ adjustable

 

This module has TX and RX pin used to communicate with the Arduino. It also has DAC and USB Functions.

Pin Diagram:

DFminiPins

PinDescriptionNote
VCCPower Supply +DC 3.2V – 5V
RXSerial InputUART
TXSerial OutputUART
DAC_RAudio Output Right ChannelDrive Earphone & Amplifier
DAC_LAudio Output Left ChannelDrive Earphone & Amplifier
SPK2Speaker –Drive Speaker Less than 3W
GNDGroundPower GND
IO1Trigger Port 1Short Press to Play Previous (Long – Volume Decrease)
GNDGroundPower GND
IO2Trigger Port 2Short Press to Play Next (Long – Volume Increase)
ADKEY1AD Port 1Trigger Play First Segment
ADKEY2AD Port 1Trigger Play Fifth Segment
USB+USB+ DPUSB Port
USB-USB- DMUSB Port
BUSYPlaying StatusLow Means Playing

 

To use with Arduino we will need VCC, GND, SP+, SP-, TX and RX Pins only. Other Pins are optional.

Components Required:

Circuit Diagram:

MP3TF16P Arduino_bb

Connect the circuit as per the circuit diagram. On the RX Pin of MP3 Module, we use a 1K Ohm resistor. Because the TX and RX Pins are 3.3V Logic (Arduino Uno pins are 5V level) and the resistor will drop the necessary voltage to avoid crackling sounds on the speaker.

Pre-requisites:

  • The module accepts only MP3 Files. To convert your files to MP3 before using it. You can use many online converters for this.
  • The naming should be 001, 002, 003 and so on. Else the player will pick the first file copied into the SD Card.
  • Copy the files to the SD Card
  • Install the DFPlayer Mini Library from GitHub or Search it on the Arduino Library manager. There are new versions available and didn’t work well. So Choose the Version 1.0 that works perfectly.

After installing the library, Copy and paste the below code and Upload.

#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);

}

 

The above codes play the first MP3 for 2 Seconds and then play next for 3 Times. This will loop continuously. To use other functions, check the full function code to use the specific functions as per your choice.

Description:

To initialize the Software Serial functions we use the following lines of code

#include "SoftwareSerial.h"

This line adds the Software Serial library to our program.

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

This function assigns the 2 and 3 Pin of Arduino for Serial Communication.

DFRobotDFPlayerMini myDFPlayer;

This line creates an Object for DFRobotDFPlayerMini as myDFPlayer (To simplify the function).

Important Functions:

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

This function sets the volume as 20. It can be modified from 0 to 30.

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

This function plays the First MP3 on the SD Card.

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

Plays Next MP3 file on SD Card.

myDFPlayer.previous();  //Play previous mp3

Plays Previous MP3 File on SD Card.

Other Functions:

  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.

FULL Function Code:

#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;

  }

}

 

 

Share this post

Leave a Reply

Back to Blog