Skip to main content

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:

        1. CYCLE: 所有曲目循环模式。
        2. SINGLE_CYCLE: 单曲循环播放模式。
        3. DIR_CYCLE: 文件夹循环模式。
        4. RANDOM: 随机播放模式。
        5. SINGLE_SHOT: 单曲播放模式。
    • 输出参数: 执行成功返回0,执行失败返回-1。
  • uint8_t WT2003S<T>::cutInPlay(STORAGE device, uint32_t index) —— 切入播放。此命令只能在播放状态下插入,在停止状态下无效。发送此命令时,正在播放的曲目会立即暂停,然后执行此命令中指定的播放曲目,播放完成后会继续播放原来暂停的曲目。

    • 输入参数:
      • device:

        1. SPIFLASH: 指定FLASH中插播的索引地址;
        2. SD: 指定SD卡中插播的索引地址;
        3. 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模块的使用方法。那么你可能需要准备以下材料。

Seeeduino V4.3Grove - MP3 v4.0

步骤 4. 硬件连接

将 Grove - MP3 V4.0 连接到 Seeeduino V4.3 的 UART 端口。然后,通过 USB 电缆将 Seeeduino 连接到电脑。


  • 步骤 5. 通过路径 文件示例Seeed_Serial_MP3_PlayerWT2605C_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文件系统。

资源

技术支持与产品讨论

感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...