简介
您是否在寻找一款简单又强大的MP3播放模块?看这里!这款MP3播放模块支持arduino、AT指令、板载按键和AD按键四种控制方式。通过板载按键即使在没有微控制器的情况下也能进行音乐播放和切换。模块搭载了128MB的存储空间,通过USB线您可以很容易的将您喜欢的音乐拷贝到模块中。该模块可作为电脑或Raspberry Pi声卡,用USB数据线将模块和电脑连接,电脑播放音乐即可通过该模块输出。DFPlayer PRO还带有双声道5W功放,接上喇叭即可使用。
在硬件上,DFplayer PRO相比DFPlayer Mini,DFplayer PRO自带128MB存储空间,因此无需TF卡。同时DFplayer PRO带有Type C座子,拷贝音乐更加简单,双声道输出音乐效果更好。
在软件上,DFplayer PRO相比DFPlayer Mini,DFplayer PRO使用更加简单,功能更加强大,增加了快进、快退、指定时间点播放等功能。
特性
- 搭载128MB的高速存储
- 支持按键进行播放切换
- 板载双声道3W功放
- 支持模拟U盘
应用场景
- 毛绒玩具DIY
- 个性化礼物
- 音乐闹钟
- USB声卡
技术规格
- 供电电压:3.3V~5V
- 工作电流:>20mA
- 存储空间:128MB
- 音频格式:MP3、WAV、WMA、FLAC、AAC、APE
- 通讯方式:UART
- 工作温度范围:-40℃~80℃
- 工作湿度范围:5%RH~95%RH
- 产品尺寸:23*24.5mm
引脚说明
序号 | 丝印 | 功能描述 |
---|---|---|
1 | VIN | 电源正极 |
2 | GND | 电源负极 |
3 | RX | UART接收 |
4 | TX | UART发送 |
5 | DACR | DAC输出 |
6 | DACL | DAC输出 |
7 | L+ | 喇叭左声道输出 |
8 | L- | 喇叭左声道输出 |
9 | R+ | 喇叭右声道输出 |
10 | R- | 喇叭右声道输出 |
11 | PLAY | 功能按钮 |
12 | KEY | 功能按钮 |
使用教程
- 在使用前请用USB线将模块连接到电脑,存入音频文件到存储中
- 建议使用4Ω 3W的喇叭
准备
- 硬件
- 1 x Arduino UNO控制板
- 1 x DFPlayer PRO模块
- 若干 杜邦线
- 软件
- Arduino IDE, 点击下载Arduino IDE
- DFRobot_DF1201S库文件和示例程序
关于如何安装库文件,点击链接
接线图
按键控制
点击PLAY按钮播放或暂停(播放时蓝灯常亮,暂停时蓝灯慢闪)
长按PLAY两秒切换下一首(切换时蓝灯闪烁两次)
软件控制
- 主要API接口函数列表
/**
* @brief 设置音量
* @param vol:0-30
* @return true or false
*/
bool setVol(uint8_t vol);
/**
* @brief 设置播放模式
* @param ePlayMode_t:SINGLECYCLE,ALLCYCLE,SINGLE,RANDOM,FOLDER
* @return true or false
*/
bool setPlayMode(ePlayMode_t mode);
/**
* @brief 播放
* @return true or false
*/
bool start();
/**
* @brief 暂停播放
* @return true or false
*/
bool pause();
/**
* @brief 下一曲
* @return true or false
*/
bool next();
/**
* @brief 上一曲
* @return true or false
*/
bool last();
/**
* @brief 使当前播放歌曲快进
* @param second 快进的时间(单位:S)
*/
bool fastForward(uint16_t second);
/**
* @brief 使当前播放歌曲后退
* @param second 后退的时间(单位:S)
*/
bool fastReverse(uint16_t second);
/**
* @brief 使当前播放歌曲从固定时间点开始播放
* @param second 固定时间点
*/
bool setPlayTime(uint16_t second);
/**
* @brief 获取文件编号
*/
uint16_t getCurFileNumber();
/**
* @brief 获取可播放文件的个数
*/
uint16_t getTotalFile();
/**
* @brief 获取当前歌曲播放到的时间
*/
uint16_t getCurTime();
/**
* @brief 获取当前歌曲播放的总时间
*/
uint16_t getTotalTime();
/**
* @brief 获取播放文件的文件名
*/
String getFileName();
/**
* @brief 播放指定路径文件
* @param 指定路径
*/
void playSpecFile(String str);
/**
* @brief 播放指定编号文件,编号根据文件拷贝进入U盘先后顺序排列
* @param 文件编号,可通过getCurFileNumber()获取
*/
void playFileNum(int16_t num);
/**
* @brief 删除当前播放文件
* @return true or false
*/
bool delCurFile();
样例代码 - 播放
上电后进入音乐模式,开始播放音频文件,串口会打印当前的操作
/*!
*@file play.ino
*@brief Music Playing Example Program
*@details Experimental phenomenon: control MP3 play music, obtain song information
*@copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
*@license The MIT license (MIT)
*@author [fengli](li.feng@dfrobot.com)
*@version V1.1
*@date 2021-10-15
*@url https://github.com/DFRobot/DFRobot_DF1201S
*/
#include <DFRobot_DF1201S.h>
#include <SoftwareSerial.h>
SoftwareSerial Serial1(2, 3); //RX TX
DFRobot_DF1201S DF1201S;
void setup(void){
Serial.begin(115200);
Serial1.begin(115200);
while(!DF1201S.begin(Serial1)){
Serial.println("初始化失败,请检查接线!");
delay(1000);
}
/*设置音量为20*/
DF1201S.setVol(/*VOL = */20);
Serial.print("VOL:");
/*获取音量*/
Serial.println(DF1201S.getVol());
/*进入音乐模式*/
DF1201S.switchFunction(DF1201S.MUSIC);
/*等待提示音播放完*/
delay(2000);
/*设置播放模式为全部循环*/
DF1201S.setPlayMode(DF1201S.ALLCYCLE);
Serial.print("PlayMode:");
/*获取播放模式*/
Serial.println(DF1201S.getPlayMode());
//设置波特率为115200(需断电重启,掉电保存)
//DF1201S.setBaudRate(115200);
//打开指示灯(掉电保存)
//DF1201S.setLED(true);
//打开提示音(掉电保存)
//DF1201S.setPrompt(true);
//使能功放芯片
//DF1201S.enableAMP();
//失能功放芯片
//DF1201S.disableAMP();
}
void loop(){
Serial.println("开始播放");
/*开始播放*/
DF1201S.start();
delay(3000);
Serial.println("暂停播放");
/*暂停播放*/
DF1201S.pause();
delay(3000);
Serial.println("播放下一曲");
/*播放下一曲*/
DF1201S.next();
delay(3000);
Serial.println("播放上一曲");
/*播放上一曲*/
DF1201S.last();
delay(3000);
Serial.println("开始播放");
//快进10S
DF1201S.fastForward(/*FF = */10);
//快退10S
//DF1201S.fastReverse(/*FR = */10);
//从第10S开始播放
//DF1201S.setPlayTime(/*Play Time = */10);
Serial.print("文件号:");
//获取文件号
Serial.println(DF1201S.getCurFileNumber());
Serial.print("可播放文件的个数:");
//获取可播放文件的个数
Serial.println(DF1201S.getTotalFile());
Serial.print("当前歌曲播放到的时间:");
//获取当前歌曲播放到的时间
Serial.println(DF1201S.getCurTime());
Serial.print("当前歌曲播放的总时间:");
//获取当前歌曲播放的总时间
Serial.println(DF1201S.getTotalTime());
Serial.print("当前播放文件名:");
//获取播放文件的文件名
Serial.println(DF1201S.getFileName());
delay(3000);
//播放第一号文件,编号根据文件拷贝进入U盘先后顺序排列
DF1201S.playFileNum(/*File Number = */1);
//播放test文件夹下的test.mp3文件
//DF1201S.playSpecFile("/test/test.mp3");
while(1);
/*删除正在播放的文件*/
//DF1201S.delCurFile();
}
结果
AD按键控制
按键 | 串联电阻 | 点击 | 长按 |
---|---|---|---|
K0 | 0R | 暂停&播放 | |
K1 | 3K | 上一曲 | 音量+ |
K2 | 6.2K | 下一曲 | 音量- |
K3 | 9.1K | 播放模式切换 | |
K4 | 15K | 快进10S | |
K5 | 24K | 暂停&播放 | 下一曲 |
K6 | 33K | 音量- | 音量- |
K7 | 51K | 音量+ | 音量+ |
K8 | 100K | 快退10S | |
K9 | 220K | 播放第一首,音量设置为10 |
AT指令控制
注意:以下所有命令均省略了“\r\n”,实际使用时请添加在命令后面,例如“AT+VOL=5\r\n”,指定音量为5级
串口波特率默认115200
/**
* @brief 测试连接
*/
AT //测试连接
/**
* @brief 音量控制(音量等级:0-30)(掉电保存)
* @param -n:音量-n
* +n:音量加n
* n:指定音量为n
* ?:查询音量
*/
AT+VOL=-5 //音量-5
AT+VOL=? //查询音量
返回:VOL = [10] //当前音量为10
/**
* @brief 播放模式控制
* @param 1:单曲循环
* 2:全部循环
* 3:单曲播放完暂停
* 4:随机播放
* 5:文件夹循环
* ?:查询当前播放模式
*/
AT+PLAYMODE=1 //切换为单曲循环
AT+PLAYMODE=? //查询当前的播放模式
返回:PLAYMODE =1 //当前播放模式为:单曲循环
/**
* @brief 播放控制
* @param PP:播放&暂停
* NEXT:下一曲
* LAST:上一曲
*/
AT+PLAY=NEXT //下一曲
/**
* @brief 播放时间点控制
* @param -n:快退n秒
* +n:快进n秒
* n:在n秒处开始播放
*/
AT+TIME=-5 //快退5秒
/**
* @brief 播放模式控制
* @param 1:查询当前播放的文件序号
* 2:查询文件总数
* 3:查询当前已播放时间
* 4:查询当播放文件总时间
* 5:查询当前播放文件名
*/
AT+QUERY=1 //查询当前播放的文件序号
AT+QUERY=5 //查询当前播放文件名
返回:test.mp3 //当前播放的是"test.mp3"
/**
* @brief 播放指定序号文件
* @param n:播放文件序号为n的音乐文件,如果没有则播放第一个文件
*/
AT+PLAYNUM=5 //播放第5号文件
/**
* @brief 播放指定文件或文件夹
* @param
*/
AT+PLAYFILE=/DF_REC/test.MP3 //播放DF_REC下的test.mp3一次
/**
* @brief 功放开关指令
* @param ON、OFF
*/
AT+AMP=ON //打开功放
/**
* @brief 删除当前播放文件
*/
AT+DEL
/**
* @brief 设置波特率(掉电保存,需再次上电生效)
* @param 9600、19200、38400、57600、115200
*/
AT+BAUDRATE=115200 //设置波特率为115200
/**
* @brief 提示音开关指令(掉电保存)
* @param ON、OFF
*/
AT+PROMPT=ON //打开提示音
//LED提示开关指令(掉电保存)
/**
* @brief LED提示开关指令(掉电保存)
* @param ON、OFF
*/
AT+LED=ON //打开LED指示
常见问题
Q: FileNumber的命名规格是怎样的?
A: 命名规则是按照文件写入DFPlayer PRO的顺序决定,如下图,箭头编号代表写入顺序。
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。