如何将 DFMini player MP3 模块与 Arduino 结合使用

要创建此项目,您将使用:

DFPlayer迷你MP3模块
10kΩ电阻
开关按钮
面包板
Arduino UNO

杜邦线

现在,我们将学习如何构建该项目。

什么是DF Mini Player MP3模块

DFMini Player 模块是一个小型音乐播放器。它成本低、功耗低,可再现存储卡上存储的声音。

基于此,模块可以通过独立模式进行控制,即在该模式下,只有DFMini模块、供电电池、扬声器、控制它的按钮以及存储歌曲的SD卡。

另一种控制方法是使用 Arduino 或其他控制设备。例如,Arduino 将通过串行通信与 DFMini 播放器模块发送命令。 DFMini Player 模块如图 1 所示。

图 1 - DFMini 播放器模块。


为了控制它,使用基本的独立电路非常重要。该电路如图 2 所示。

DFMini 播放器模块的独立电路。
上面电路中显示的两个按钮用于更改音乐曲目和控制声音的音量。

连接到引脚 IO1 的按钮用于转到上一曲目并降低音量。

快速触摸,系统将返回上一首歌曲,但是,如果按下按钮超过 1 秒,系统将降低歌曲的音量。

连接到引脚 IO2 的按钮用于转到下一曲目并增加音量。

快速触摸,系统将前进到下一首歌曲,但是,如果按下按钮超过 1 秒,系统将增加歌曲的音量。

在这种独立方法中,歌曲必须保存在存储卡上。
这样,每次按下按钮时,系统都会按升序或降序播放每首歌曲。

然而,当使用Arduino或其他控制设备时,我们必须修改SD卡上音乐文件的组织方式。

现在,我将介绍如何使用 Arduino 通过串行通信来控制 DFMini Player。

使用 Arduino 控制 DFMini 播放器

在这一步中,音量控制、范围控制、均衡命令和其他功能将由Arduino发送。

Arduino 必须通过串口与 DFMini Player 进行通信并发送控制命令。控制电路的电子原理图如图4所示。

使用 Arduino 的电子原理图。
首先,我们必须组装下图所示的电路。

组装好该电路后,您必须将歌曲添加到存储卡上。在此步骤中,歌曲应重命名为例如01、02、03。

#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

//Inicia a serial por software nos pinos 10 e 11
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
char command;
int pausa = 0;

void setup()
{
//Comunicacao serial com o modulo
mySoftwareSerial.begin(9600);
//Inicializa a serial do Arduino
Serial.begin(115200);
//Verifica se o modulo esta respondendo e se o
//cartao SD foi encontrado
Serial.println();
Serial.println(F("DFRobot DFPlayer Mini"));
Serial.println(F("Initializing DFPlayer module ... Wait!"));

if (!myDFPlayer.begin(mySoftwareSerial))
{
Serial.println(F("Not initialized:"));
Serial.println(F("1. Check the DFPlayer Mini connections"));
Serial.println(F("2. Insert an SD card"));
while (true);
}

Serial.println();
Serial.println(F("DFPlayer Mini module initialized!"));

//Definicoes iniciais
myDFPlayer.setTimeOut(500); //Timeout serial 500ms
myDFPlayer.volume(5); //Volume 5
myDFPlayer.EQ(0); //Equalizacao normal
menu_opcoes();
}

void loop()
{

//Waits for data entry via serial
while (Serial.available() > 0)
{
command = Serial.read();

if ((command >= '1') && (command <= '9'))
{
Serial.print("Music reproduction");
Serial.println(command);
command = command - 48;
myDFPlayer.play(command);
menu_opcoes();
}

//Reproduction
//Stop

if (command == 's')
{
myDFPlayer.stop();
Serial.println("Music Stopped!");
menu_opcoes();
}

//Pausa/Continua a musica
if (command == 'p')
{
pausa = !pausa;
if (pausa == 0)
{
Serial.println("Continue...");
myDFPlayer.start();
}

if (pausa == 1)
{
Serial.println("Music Paused!");
myDFPlayer.pause();
}

menu_opcoes();
}


//Increases volume
if (command == '+')
{
myDFPlayer.volumeUp();
Serial.print("Current volume:");
Serial.println(myDFPlayer.readVolume());
menu_opcoes();
}

if (command == '<')
{
myDFPlayer.previous();
Serial.println("Previous:");
Serial.print("Current track:");
Serial.println(myDFPlayer.readCurrentFileNumber()-1);
menu_opcoes();
}

if (command == '>')
{
myDFPlayer.next();
Serial.println("next:");
Serial.print("Current track:");
Serial.println(myDFPlayer.readCurrentFileNumber()+1);
menu_opcoes();
}

//Decreases volume
if (command == '-')
{
myDFPlayer.volumeDown();
Serial.print("Current Volume:");
Serial.println(myDFPlayer.readVolume());
menu_opcoes();
}

}
}

void menu_opcoes()
{
Serial.println();
Serial.println(F("=================================================================================================================================="));
Serial.println(F("Commands:"));
Serial.println(F(" [1-3] To select the MP3 file"));
Serial.println(F(" [s] stopping reproduction"));
Serial.println(F(" [p] pause/continue music"));
Serial.println(F(" [+ or -] increases or decreases the volume"));
Serial.println(F(" [< or >] forwards or backwards the track"));
Serial.println();
Serial.println(F("================================================================================================================================="));
}

上面提供的代码非常简单,将帮助您按编号选择歌曲、停止、暂停、控制音量并传递曲目。

音乐控制包括将数据从 Arduino IDE 串行发送到我们的 Arduino 板。

最初,系统在设置中进行配置并检查SD卡是否插入模块中。如果未插入,系统会显示一条消息来提醒用户。

此外,系统还会显示带有系统配置选项的消息。

void setup()
{
//Comunicacao serial com o modulo
mySoftwareSerial.begin(9600);
//Inicializa a serial do Arduino
Serial.begin(115200);
//Verifica se o modulo esta respondendo e se o
//cartao SD foi encontrado
Serial.println();
Serial.println(F("DFRobot DFPlayer Mini"));
Serial.println(F("Initializing DFPlayer module ... Wait!"));

if (!myDFPlayer.begin(mySoftwareSerial))
{
Serial.println(F("Not initialized:"));
Serial.println(F("1. Check the DFPlayer Mini connections"));
Serial.println(F("2. Insert an SD card"));
while (true);
}

Serial.println();
Serial.println(F("DFPlayer Mini module initialized!"));

//Definicoes iniciais
myDFPlayer.setTimeOut(500); //Timeout serial 500ms
myDFPlayer.volume(5); //Volume 5
myDFPlayer.EQ(0); //Equalizacao normal
menu_opcoes();
}

如果插入存储卡,代码流程将进入循环函数。

void loop()
{

//Waits for data entry via serial
while (Serial.available() > 0)
{
command = Serial.read();

if ((command >= '1') && (command <= '3'))
{
Serial.print("Music reproduction");
Serial.println(command);
command = command - 48;
myDFPlayer.play(command);
menu_opcoes();
}

//Reproduction
//Stop

if (command == 's')
{
myDFPlayer.stop();
Serial.println("Music Stopped!");
menu_opcoes();
}

//Pausa/Continua a musica
if (command == 'p')
{
pausa = !pausa;
if (pausa == 0)
{
Serial.println("Continue...");
myDFPlayer.start();
}

if (pausa == 1)
{
Serial.println("Music Paused!");
myDFPlayer.pause();
}

menu_opcoes();
}


//Increases volume
if (command == '+')
{
myDFPlayer.volumeUp();
Serial.print("Current volume:");
Serial.println(myDFPlayer.readVolume());
menu_opcoes();
}

if (command == '<')
{
myDFPlayer.previous();
Serial.println("Previous:");
Serial.print("Current track:");
Serial.println(myDFPlayer.readCurrentFileNumber()-1);
menu_opcoes();
}

if (command == '>')
{
myDFPlayer.next();
Serial.println("next:");
Serial.print("Current track:");
Serial.println(myDFPlayer.readCurrentFileNumber()+1);
menu_opcoes();
}

//Decreases volume
if (command == '-')
{
myDFPlayer.volumeDown();
Serial.print("Current Volume:");
Serial.println(myDFPlayer.readVolume());
menu_opcoes();
}

}
}

用户可以发送以下控制字符:

  • 数字1至3:选择要播放的歌曲;
  • 字母s:停止歌曲;
  • 字母p:暂停歌曲;
  • 发送+号:增大歌曲音量;
  • 发送-信号:减小歌曲音量;
  • 发送信号<:选择上一首歌曲;
  • 发送信号>:选择下一首歌曲;

Arduino 将通过串口接收这些信号、字母和数字,并控制要播放的音乐。

下面在内部介绍了每个条件及其各自的命令。

if ((command >= '1') && (command <= '3'))
{
Serial.print("Music reproduction");
Serial.println(command);
command = command - 48;
myDFPlayer.play(command);
menu_opcoes();
}

//Reproduction
//Stop

if (command == 's')
{
myDFPlayer.stop();
Serial.println("Music Stopped!");
menu_opcoes();
}

//Pausa/Continua a musica
if (command == 'p')
{
pausa = !pausa;
if (pausa == 0)
{
Serial.println("Continue...");
myDFPlayer.start();
}

if (pausa == 1)
{
Serial.println("Music Paused!");
myDFPlayer.pause();
}

menu_opcoes();
}


//Increases volume
if (command == '+')
{
myDFPlayer.volumeUp();
Serial.print("Current volume:");
Serial.println(myDFPlayer.readVolume());
menu_opcoes();
}

if (command == '<')
{
myDFPlayer.previous();
Serial.println("Previous:");
Serial.print("Current track:");
Serial.println(myDFPlayer.readCurrentFileNumber()-1);
menu_opcoes();
}

if (command == '>')
{
myDFPlayer.next();
Serial.println("next:");
Serial.print("Current track:");
Serial.println(myDFPlayer.readCurrentFileNumber()+1);
menu_opcoes();
}

//Decreases volume
if (command == '-')
{
myDFPlayer.volumeDown();
Serial.print("Current Volume:");
Serial.println(myDFPlayer.readVolume());
menu_opcoes();
}

}

因此,如果您应用了所提供的所有步骤,您就能够学习:

  • DFMini Player MP3的基本工作电路;
  • 存储卡上声音文件的组织和配置;
  • 使用 Arduino 进行音乐控制。

通过此代码,您可以开发需要使用声音作为系统功能的其他项目。

相关推荐
浅陌pa19 分钟前
18:(标准库)DMA二:DMA+串口收发数据
c语言·stm32·单片机·嵌入式硬件
嗯? 嗯。1 小时前
电烙铁焊接STM32芯片、贴片元器件、手册指南!!!
stm32·单片机·嵌入式硬件
打你个大西瓜️1 小时前
单片机知识总结(完整)
数据库·单片机·mongodb
楚灵魈2 小时前
[STM32]从零开始的STM32 FreeRTOS移植教程
stm32·单片机·嵌入式硬件
Shaun_青璇2 小时前
EXTI配置流程 含中断延时消抖点亮小灯
stm32·单片机·嵌入式硬件·mcu·物联网
liyinuo20173 小时前
如何使用GCC手动编译stm32程序
c语言·arm开发·stm32·单片机·嵌入式硬件
ShiinaKaze4 小时前
【MCU】微控制器的编程技术:ISP 与 IAP
单片机·嵌入式硬件·mcu·iap·isp
不能只会打代码5 小时前
51单片机从入门到精通:理论与实践指南入门篇(二)
单片机·嵌入式硬件·51单片机
Echo_cy_7 小时前
STM32 USART串口发送
单片机·嵌入式硬件
cd_farsight8 小时前
单片机位数对性能会产生什么影响?!
单片机·嵌入式硬件