摘要:本文介绍Mini MP3 Player模块的使用方法
前面介绍了如何使用ESP32的DAC功能来播放声音,在使用的过程中,大家会觉得非常的麻烦,支持的声音时长和声音文件的数量非常有限,每次改变声音都需要重新编译和上传程序。当然通过将声音转存到SD卡上,似乎可以在一定程度上解决这个问题,但支持文件格式单一,数据采样频率的限制都会制约其使用的方便性。因此,在这一节通过一个MP3播放模块来实现常见声音文件的播放功能,从而在更大程序上满足大家对声音播放功能的需求。
Mini MP3 Player模块是一个支持串口通信协议指令的语音模块,其内部集成了MP3、WAV、WMA的硬解码,因此在播放声音文件时,不需要占用处理器去进行解码工作。同时该模块还内置TF卡驱动,支持FAT16、FAT32文件系统。通过简单的串口指令即可完成播放指定的音乐,以及如何播放音乐等功能,无需繁琐的底层操作,使用方便。该模块如下图所示:
该模块功能非常强大,可以说接上几个按键之后就是一个功能完备的MP3播放器了。因为在这里不是介绍如何使其变成一个MP3播放器,所以这里主要介绍的是,如何使用ESP32的UART接口去驱动Mini MP3模块,播放各种声音文件。至于其他的使用方法则可以参照该模块的使用手册。
下面来了解一下MP3模块的引脚定义说明,如下图所示。
每个引脚的具体功能如下表所示:
引脚 | 名称 | 功能描述 | 备注 |
1 | VCC | 模块电源输入 | 3.3V-5V,建议用5V,不可超过5.2V |
2 | RX | UART串行数据输入 | |
3 | TX | UART串行数据输出 | |
4 | DAC_R | 音频输出右声道 | 驱动耳机、功放 |
5 | DAC_L | 音频输出左声道 | 驱动耳机、功放 |
6 | SPK2 | 接小喇叭+ | 驱动小于3W喇叭 |
7 | GND | 地 | 电源地 |
8 | SPK1 | 接小喇叭- | 驱动小于3W喇叭 |
9 | IO1 | 触发口 | 默认上一曲(长按音量-) |
10 | GND | 地 | 电源地 |
11 | IO2 | 触发口 | 默认下一曲(长按音量+) |
12 | ADKEY1 | AD口1 | 当触发时是第一段(长按循环第一段) |
13 | ADKEY2 | AD口2 | 当触发时是第五段(长按循环第五段) |
14 | USB+ | USB+DP | 接U盘或插电脑的USB口 |
15 | USB- | USB-DM | 接U盘或插电脑的USB口 |
16 | Busy | 播放指示 | 有音频输出低,无音频输出高 |
使用ESP32开发板驱动Mini MP3模块需要使用到UART通信协议,在这里的连接方法如下:
Mini MP3模块 | ESP32扩展板 |
VCC | +5V |
RX | P13——设置成UART TX |
TX | P12——设置成UART RX |
GND | GND |
另外,还需要将SPK1和SPK2连接到播放声音的喇叭上,我采用的喇叭如下图所示。
在这里需要注意的是,Mini MP3模块驱动的喇叭功率不能大于3瓦。除了直接驱动喇叭,也可以使用耳机来播放声音,具体使用耳机的接法如下图所示:
连接好线路之后,就打开Mixly,选择“Arduino ESP32”开发板,与Mini MP3模块相关的功能位于“执行器”功能模块中。在使用Mini MP3模块时,需要首先进行串口的初始化,也就是指定与Mini MP3进行Uart通信所使用的GPIO引脚是哪些。然后对Mini MP3模块进行初始化的时候,则需要指定使用哪个串口进行Uart通信。然后还可以指定播放的声音文件是存储在什么地方的。以及播放的音量等参数。
具体的初始化过程如下所示:
初始化完成以后,就可以使用指令进行声音文件的播放了。在Mixly中提供了播放指定的文件的功能,以及播放指定目录中指定文件的功能,还可以循环播放指定目录中的文件。在这里就简单的播放一个文件,实现的方法如下所示:
然后编译、上传,应该就可以听到每秒的音乐了。
最后再来看一下程序的源代码。如下所示:
#include <HardwareSerial.h> #include "Arduino.h" #include "DFRobotDFPlayerMini.h" DFRobotDFPlayerMini myPlayer; void setup(){ Serial.begin(115200); Serial1.begin(9600,SERIAL_8N1,25,26); myPlayer.begin(Serial1); myPlayer.outputDevice(DFPLAYER_DEVICE_SD); myPlayer.volume(15); } void loop(){ myPlayer.play(1); delay(60000); } |
对于初始化部分的代码没啥解释的,都很简单。就是在loop()方法中,有一个60秒的延迟函数,其目的是为了让声音可以被播放60秒,因为loop()是被循环调用的。而Mini MP3的播放指令,只是一个UART指令,发送给Mini MP3之后,这个方法就返回了。因此,如果没有这个延迟函数,就会不停的给Mini MP3模块发送指令,而指令的间隔又非常的小,因此Mini MP3模块是没法播放出声音的,这个大家一定要注意。
前面举例使用了Mixly开发工具,如果使用Arduino IDE开发工具的,则需要先安装“DFRobotDFPlayerMini”库,如下图所示。
DFRobotDFPlayerMini库安装完成之后,上面的代码就可以到Arduino IDE中直接运行了。好了,Mini MP3播放模块就介绍到这里了。