Grove - MP3 v4.0
介绍
这款MP3模块与Arduino结合,可以变成一个多格式的音乐播放器!它是一款基于WT2605CX高品质音频芯片的音乐模块,性能优于MP3 V3,支持Grove接口、扬声器JST接口、3.5mm音频插孔和SD卡,兼容SPI-Flash、TF卡和USB闪存盘。
功能
- 支持多种音乐格式:支持高品质音频格式(8kbps~320kbps),音质优美,支持MP3、WAV格式;
- 支持多种存储格式:支持SPI-Flash、TF卡和USB闪存盘,兼容FAT、FAT32文件系统;
- 控制模式:丰富的AT通信接口,满足您的各种需求;
- 丰富的操作:支持随机播放命令、无缝循环播放功能等;
- 音频输出模式:默认为DAC输出采样。
规格
规格详情 | |
---|---|
输入电压 | 5V(DC) |
工作电流(无信号输出状态) | 小于 15 mA |
工作电流(有信号输出状态) | 小于 40 mA |
芯片型号 | KT403A |
芯片LDO输出电压 | 3.3 V |
芯片输出电流 | 100 mA(最大值) |
支持的文件格式 | MP3, WAV, WMA |
支持的SD卡最大容量 | 32 GB |
采样率 | 8/11.025/12/16/22.05/24/32/44.1/48 (KHz) |
硬件概述
入门指南
如果您是首次使用Grove MP3模块,那么您可能需要一个已经存有歌曲的TF卡,以及一个输出设备,可以是3.5mm音频线的耳机或者扬声器。扬声器通常已随套件提供。
Arduino库概述
:::提示 如果您是第一次使用Arduino,我们强烈建议您参考Arduino入门指南。 :::
功能
在我们开始编写草图之前,让我们先了解一下库中可用的功能。
void WT2605C<T>::init(T& serialPort)
—— 此函数负责配置MP3模块使用的串行端口。- 输入参数:
- serialPort: 串行端口。
uint8_t WT2605C<T>::playSPIFlashSong(uint16_t index)
—— 指定Flash根目录的索引以进行播放。文件是按照它们被复制到Flash的顺序来索引的。- 输入参数:
- index:播放歌曲的索引。
uint8_t WT2605C<T>::playSDRootSong(uint32_t index)
—— 指定TF卡根目录的索引以进行播放。此命令根据TF卡上的文件顺序对文件进行索引以进行播放,受文件存储顺序的影响,文件按照索引顺序排序。文件索引的顺序是根据文件被复制到TF卡的时间来确定的。- 输入参数:
- index: 播放歌曲的索引。
uint8_t WT2605C<T>::playSDSong(const char* fileName)
—— 播放指定文件名的音乐。(文件名不得超过8个字符)- 输入参数:
- fileName: 您想要播放的音乐文件的名称。
uint8_t WT2605C<T>::playSDDirectorySong(const char* dir, uint16_t index)
—— 在TF卡文件夹中指定索引播放。此命令可以指定根目录中的文件夹,并根据文件夹索引号播放文件夹中的音频(文件夹名称不应超过8个字符)。文件夹名称支持:中文、英文、数字、特殊符号。如果使用中文发送代码,发送前需要使用“UTF-16编码”格式对代码进行转码。- 输入参数:
- dir: 想要播放的音乐所在的文件夹。
- index: 音乐文件的索引。
- 输入参数:
uint8_t WT2605C<T>::playUDiskRootSong(uint32_t index)
—— 指定USB存储棒的根目录索引播放。此命令根据USB闪存驱动器中的文件索引进行播放,受文件存储顺序的影响,文件按照索引顺序排序。文件索引的顺序是根据文件被复制到USB闪存驱动器的时间来确定的。- 输入参数:
- index:音乐文件的索引。
uint8_t WT2605C<T>::playUDiskSong(const char* fileName)
—— 指定USB存储棒的文件名进行播放。此命令允许您在根目录中指定一个文件名进行音频播放(文件名不得超过8个字符)。支持的音频格式:.mp3
和.wav
。- 输入参数:
- fileName: 想要播放的音乐文件的名称。
uint8_t WT2605C<T>::playUDiskDirectorySong(const char* dir, uint32_t index)
—— 在USB存储棒文件夹中指定要播放的文件名。此命令指定根目录中一个文件夹内要播放的文件名。(文件名不得超过8个字符。)支持的音频格式:.mp3
和.wav
。- 输入参数:
- dir: 想要播放的音乐所在的文件夹。
- index: 音乐文件的名称。
- 输入参数:
uint8_t WT2605C<T>::pause_or_play()
—— 暂停或播放。播放状态下,发送此命令会暂停播放;暂停状态下,发送此命令会恢复播放;停止播放状态下,发送此命令会从当前地址重新开始播放。- 输出参数: 执行成功返回0,执行失败返回-1。
uint8_t WT2605C<T>::stop()
—— 停止。发送此命令以停止播放当前音乐。- 输出参数: 执行成功返回0,执行失败返回-1。
uint8_t WT2605C<T>::next()
—— 下一曲。此命令触发当前目录中下一曲的播放,当播放到最后一曲时,发送此命令会触发第一曲的播放。- 输出参数: 执行成功返回0,执行失败返回-1。
uint8_t WT2605C<T>::previous()
—— 上一曲。此命令触发当前目录中上一曲的播放,当播放第一曲时,发送此命令会触发最后一曲的播放。- 输出参数: 执行成功返回0,执行失败返回-1。
uint8_t WT2605C<T>::volume(uint8_t vol)
—— 音量控制。音量有32级,从0到31,其中0为静音,31为最大音量。- 输出参数: 执行成功返回0,执行失败返回-1。
uint8_t WT2605C<T>::volumeDown()
—— 音量增加控制命令。- 输出参数: 执行成功返回0,执行失败返回-1。
uint8_t WT2605C<T>::volumeUp()
—— 音量减少控制命令。- 输出参数: 执行成功返回0,执行失败返回-1。
uint8_t WT2605C<T>::playMode(PLAY_MODE mode)
—— 播放模式。此命令在正常通信情况下修改播放模式,具有断电记忆功能。- 输入参数:
mode:
- CYCLE: 所有曲目循环模式。
- SINGLE_CYCLE: 单曲循环播放模式。
- DIR_CYCLE: 文件夹循环模式。
- RANDOM: 随机播放模式。
- SINGLE_SHOT: 单曲播放模式。
- 输出参数: 执行成功返回0,执行失败返回-1。
- 输入参数:
uint8_t WT2003S<T>::cutInPlay(STORAGE device, uint32_t index)
—— 切入播放。此命令只能在播放状态下插入,在停止状态下无效。发送此命令时,正在播放的曲目会立即暂停,然后执行此命令中指定的播放曲目,播放完成后会继续播放原来暂停的曲目。- 输入参数:
device:
- SPIFLASH: 指定FLASH中插播的索引地址;
- SD: 指定SD卡中插播的索引地址;
- UDISK: 指定USB存储棒中插播的索引地址。
index: 要播放的歌曲的索引地址。
- 输出参数: 执行成功返回0,执行失败返回-1。
- 输入参数:
默认变量
#define AT_HEADER "AT+"
#define AT_CMD_PLAY "PLAY"
#define AT_CMD_LPLAY "LPLAY"
#define AT_CMD_SPLAY "SPLAY"
#define AT_CMD_FPLAY "FPLAY"
#define AT_CMD_PP "PP"
#define AT_CMD_STOP "STOP"
#define AT_CMD_NEXT "NEXT"
#define AT_CMD_PREV "PREV"
#define AT_CMD_VOL "VOL"
#define AT_CMD_VOLUP "VOLUP"
#define AT_CMD_VOLDOWN "VOLDOWN"
#define AT_CMD_REPEATMODE "REPEATMODE"
#define AT_CMD_STEPINPLAY "STEPINPLAY"
#define AT_CMD_TOTALTIME "TOTALTIME"
#define AT_CMD_CURTIME "CURTIME"
#define AT_CMD_CHANGE_DEV "CHANGE_DEV"
#define AT_CMD_BUSY "BUSY"
#define AT_CMD_VBATPCT "VBATPCT"
#define AT_CMD_GVER "GVER"
#define AT_CMD_GCFGVER "GCFGVER"
#define AT_CMD_POWEROFF "POWEROFF"
#define AT_CMD_OTA "OTA"
#define AT_CMD_COPY "COPY"
#define AT_CMD_BAUD "BAUD"
#define WT2605C_TIMEOUT 1000
#define WT2605C_SEND_MAX_SIZE 64
#define STORAGE_SPIFLASH "fat_nor"
#define STORAGE_SD "sd0"
#define STORAGE_UDISK "udisk0"
typedef enum {
CYCLE = 0x00,
SINGLE_CYCLE = 0x01,
DIR_CYCLE = 0x02,
RANDOM = 0x03,
SINGLE_SHOT = 0x04,
} PLAY_MODE;
typedef enum {
SPIFLASH = 0x00,
SD = 0x01,
UDISK = 0x02,
} STORAGE;
安装
既然你已经下载了zip格式的库文件,打开你的Arduino IDE,点击Sketch(草图)> Include Library(包含库)> Add .ZIP Library(添加.ZIP库)。选择你刚刚下载的zip文件,如果库文件安装正确,你会在通知窗口中看到Library added to your libraries(库已添加到你的库中)。这就意味着库文件已成功安装。
Seeeduino 示例
现在我们已经安装了库文件,并且理解了基本功能,让我们为 Seeeduino V4.3 运行一些示例,看看它的表现如何。
步骤 1. 启动 Arduino 应用程序。
**步骤 2.** 选择你的开发板型号并添加到Arduino IDE中。如果你想在后续的例程中使用Seeed Studio XIAO SAMD21,请参考 这个教程 完成添加。
如果你想在后续的例程中使用Seeed Studio XIAO RP2040,请参考 这个教程 完成添加。
如果你想在后续的例程中使用Seeed Studio XIAO nRF52840,请参考 这个教程 完成添加。如果你想在后续的例程中使用Seeed Studio XIAO ESP32C3,请参考 这个教程 完成添加。
如果你想在后续的例程中使用Seeed Studio XIAO ESP32S3,请参考 这个教程 完成添加。
如果你想在后续的例程中使用Seeeduino V4.3,请参考 这个教程 完成添加。
步骤 3. 所需材料
本教程将以Seeeduino V4.3为例,解释Grove MP3模块的使用方法。那么你可能需要准备以下材料。
步骤 4. 硬件连接
将 Grove - MP3 V4.0 连接到 Seeeduino V4.3 的 UART 端口。然后,通过 USB 电缆将 Seeeduino 连接到电脑。
- 步骤 5. 通过路径 文件 → 示例 → Seeed_Serial_MP3_Player → WT2605C_Terminal_player 打开 WT2605C_Terminal_player 示例。你可以使用这个模块播放
.mp3
格式的音乐文件,并通过 3.5mm 音频插孔、JST2.0 扬声器端口连接的扬声器播放,甚至同时输出到两者。
The WT2605C_Terminal_player
示例代码如下:
#include "WT2605C_Player.h"
#ifdef __AVR__
#include <SoftwareSerial.h>
SoftwareSerial SSerial(2, 3); // RX, TX
#define COMSerial SSerial
#define ShowSerial Serial
WT2605C<SoftwareSerial> Mp3Player;
#endif
#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
#define COMSerial Serial1
#define ShowSerial SerialUSB
WT2605C<Uart> Mp3Player;
#endif
#ifdef ARDUINO_ARCH_STM32F4
#define COMSerial Serial
#define ShowSerial SerialUSB
WT2605C<HardwareSerial> Mp3Player;
#endif
void setup() {
while (!ShowSerial);
ShowSerial.begin(9600);
COMSerial.begin(115200);
ShowSerial.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++");
Mp3Player.init(COMSerial);
ShowSerial.println("0...");
}
void loop() {
if(ShowSerial.available()) {
String input = Serial.readString();
input.trim();
if(input.startsWith("v")) {
int vol = input.substring(1).toInt();
int err = Mp3Player.volume(vol);
ShowSerial.println(err);
if(!err) ShowSerial.println("Volume set to: " + String(vol));
else ShowSerial.println("ERROR");
}
else if(input.startsWith("m")) {
if(input.substring(1) == "1"){
ShowSerial.println("1");
int err = Mp3Player.playMode(0x00);
ShowSerial.println(err);
if(!err) ShowSerial.println("The playback mode is set to Loop mode.");
else ShowSerial.println("ERROR");
}
else if(input.substring(1) == "2"){
ShowSerial.println("2");
int err = Mp3Player.playMode(0x01);
ShowSerial.println(err);
if(!err) ShowSerial.println("The playback mode is set to Single song loop mode.");
else ShowSerial.println("ERROR");
}
else if(input.substring(1) == "3"){
ShowSerial.println("3");
int err = Mp3Player.playMode(0x02);
ShowSerial.println(err);
if(!err) ShowSerial.println("The playback mode is set to Folder loop mode.");
else ShowSerial.println("ERROR");
}
else if(input.substring(1) == "4"){
ShowSerial.println("4");
int err = Mp3Player.playMode(0x03);
ShowSerial.println(err);
if(!err) ShowSerial.println("The playback mode is set to Random mode.");
else ShowSerial.println("ERROR");
}
else if(input.substring(1) == "5"){
ShowSerial.println("5");
int err = Mp3Player.playMode(0x04);
ShowSerial.println(err);
if(!err) ShowSerial.println("The playback mode is set to Single song mode.");
else ShowSerial.println("ERROR");
}
}
else if(input.startsWith("b")){
int index = input.substring(1).toInt();
Mp3Player.playSDRootSong(index);
ShowSerial.println("Play music: " + String(index));
}
else if(input.startsWith("+")){
int err = Mp3Player.volumeUp();
if(!err) ShowSerial.println("Volume up");
else ShowSerial.println("ERROR");
}
else if(input.startsWith("-")){
int err = Mp3Player.volumeDown();
if(!err) ShowSerial.println("Volume down");
else ShowSerial.println("ERROR");
}
else if(input.startsWith("n")){
Mp3Player.next();
ShowSerial.println("Next song");
}
else if(input.startsWith("p")){
Mp3Player.previous();
ShowSerial.println("Previous song");
}
}
}
- 步骤 6. 上传示例代码。如果你不知道如何上传代码,请查阅如何上传代码。通过点击 工具->串行监视器 打开Arduino IDE的串行监视器。将波特率设置为115200。结果应该如下所示。
你可以输入一系列命令来控制MP3模块。
- 输入
v{num}
来设置播放音量,例如,v20表示将播放音量设置为20。 - 输入
m{1~5}
来设置播放模式。 - 输入
b{num}
来播放指定索引的音乐。 - 输入
+
,音量增加。 - 输入
-
,音量减小。 - 输入
n
,下一首歌。 - 输入
p
,上一首歌。
你可以更具创意,并添加更多MP3功能。
常见问题解答
Q: TF卡无法被识别?
A: 检查TF卡的文件系统,确保它是FAT16或FAT32文件系统。
资源
- [ZIP] Grove-MP3 V4 SCH&PCB
- [PDF] Grove-MP3 V4 SCH
- [PDF] Grove-MP3 V4 数据手册
技术支持与产品讨论
感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。