Arduino语音模块-DFRduino Player MP3播放模块
外 观
概 述
- DFRduino Player 语音播放模块的设计初衷是为了让您的机器人会说话。
- 如果机器人能与人进行简单的交流的话,那么机器人就会显的更加智能,同时也增加了不少可玩性。
- DFRduino Player V3.0,改为炬力硬编解码芯片,增加了录音功能,支持中文TTS语音合成及更多指令,sd卡兼容性更强,兼容市面上常见的32GBytes及以下的SD卡 。
- 模块具有立体声输出,可与有源音箱连接;2路功放输出,每路最大3W,可直接接喇叭;通过一个专用MP3编解码芯片进行处理,完全不占用Arduino或其他控制器上的资源,只需要将语音文件放置在SD卡中,Arduino或其他控制器便可以实现播放。
- 也可以实现录音到sd卡中,还提供一个播放完毕提示端口,当播放完一首歌曲后,OUT 会输出一个高脉冲。
注意:当前版本USB功能暂未开发
技术规格
- 工作电压:5V
- 工作电压:大于200mA(带负载时)
- 驱动负载:建议4欧或8欧(扬声器内阻)
- 输出功率:每路最大3W(4欧内阻扬声器)
- 存储卡:完全支持FAT16、FAT32文件系统,最大支持32G的TF卡
- 支持格式:.WAV、.MP3这两种文件格式
- 通信格式:19200bps,格式8 N 1
- 模块尺寸:52 X 37mm
- 模块重量:30g
产品样式图
串口排针接口:
- 1.+5V 电源正,要保证电源电压为5V,电流最好大于1000毫安,如果电流不够需要将音量调小或者使用单个喇叭播放。
- 2.GND 电源地
- 3.RX 串口数据接收端
- 4.TX 串口数据发送端
- 5.OUT 语音结束中断输出,当语音结束时输出一个1毫秒低电平
扬声器接口:
- L_SP:左声道
- R_SP:右声道
红色指示灯:电源指示灯
绿色指示灯:初始化成功后将长亮,如果SD卡未插好或SD是坏的,指示灯将一直闪烁,同时串口会输出 Plese check micro SD card\r\n
模块通讯协议
串口模式,波特率19200bps,格式8N1。
通讯指令使用字符串形式,\r\n表示回车换行符,发送命令后有字符串形式的返回值。
功能名称 | 指令 | 返回值 | 备注 |
暂停播放 | \:p\r\n | 成功返回pause\r\n | \r\n表示回车换行符 |
继续播放 | \:s\r\n | 成功返回start\r\n | \r\n表示回车换行符 |
下一首 | \:n\r\n | 成功返回next\r\n 失败返回 false\r\n | \r\n表示回车换行符 |
上一首 | \:u\r\n | 成功返回key up\r\n | \r\n表示回车换行符 |
音量设置 | \:v X\r\n(备注:是v空格再跟数字,范围为0-255,0表示静音,255表示最大声音) | 成功返回vol set ok\r\n | X=0-255,数字越大音量越大 |
查看歌曲列表 | \:l\r\n | 成功返回歌曲列表\r\n | 歌曲列表最后会紧跟一个End of FileList |
指定文件播放 | \语音文件名称\r\n | 成功返回Play ok\r\n 失败返回 Not found\r\n 播放完毕返回 Play end\r\n | 语音文件名称必须为大写字母,不超过8个英文字母或者4个中文字,输入文件名需要包含类型后缀 |
录音开始 | \:r\r\n | 成功返回record\r\n | 开启mic录音,启动录音后,中间不再支持其他控制命令,除非发送\:e退出录音应用。 |
录音结束 | \:e\r\n | 输出:exit record\r\n | 停止录音,并依次自动保存为:REC001.mp3 REC002.mp3 …… |
播放tts语音 | \:t 语音文字\r\n | 成功返回Play ok\r\n 失败返回 Not found\r\n 播放完毕返回 Play end\r\n | 语音不超过21个中文字 |
版本查询 | \:i\r\n | 成功返回DFRduino Player V3.0 \r\n www.DFRobot.com \r\n |
使用教程
按键录音机
- 将SD卡插到sd卡插槽中
- 为模块供电
- 按住REC按钮不放,对着麦克风说话,说完后松开REC按钮。
- 录音文件将存放在RECORD目录下,文件名为RECxxx.mp3
简易录音机
a) 目标:实现录制mp3文件到sd卡中
b) 硬件清单
- DF_UNO 1
- ADKeyboard 1
- 本模块 1
- micro SD卡读写器
- 杜邦线
c) 软件清单
- Arduino IDE
d) 连线图
e) 操作步骤
- 在电脑上先将SD卡格式化为FAT格式,音频文件放在根目录下。
- 将SD卡插入模块内
- 打开Arduino IDE
- 将下面的代码上传到UNO (注意:UNO只有一个串口,因此程序下载和DFRduino Player模块不能同时使用)
- 按连接图进行连线,并对UNO进行供电,建议使用外部电源。
/////////////////////////////////////////////////////////////////////////////////
//使用命令完成录音
//\:r\r\n 开始录音指令
//\:e\r\n 结束录音指令
/////////////////////////////////////////////////////////////////////////////////
//串口接线方式
//Arduino MP3
//TX RX
//RX TX
//5V +5V
//GND GND
int adc_key_val[5] ={600, 650, 700, 800, 950 };
int NUM_KEYS = 5;
int adc_key_in;
int key=-1;
int oldkey=-1;
void setup()
{
Serial.begin(19200);
delay(2000); //Wait for initialization
Serial.println("\\:v 200"); //Set the volume, from 0 (minimum)-255 (maximum)
delay(50);
}
void loop()
{
adc_key_in = analogRead(0); // read the value from the sensor
key = get_key(adc_key_in); // convert into key press
if (key != oldkey) // if keypress is detected
{
delay(50); // wait for debounce time
adc_key_in = analogRead(0); // read the value from the sensor
key = get_key(adc_key_in); // convert into key press
if (key != oldkey)
{
oldkey = key;
if (key >=0){
switch(key)
{
case 0:
Serial.println("\\:r"); // start record
break;
case 1:
Serial.println("\\:e");// exit record
break;
default:
break;
}
}
}
}
delay(100);
}
// Convert ADC value to key number
int get_key(unsigned int input)
{
int k;
for (k = 0; k < NUM_KEYS; k++)
{
if (input < adc_key_val[k])
{
return k;
}
}
if (k >= NUM_KEYS)k = -1; // No valid key pressed
return k;
}
f) 实现效果 按下按钮实现相应功能:
- S1 - 开始录音
- S2 - 结束录音
简易播放器
a) 目标:实现播放、暂停、下一首、上一首功能
b) 硬件清单
- DF_UNO 1
- 扬声器 2
- ADKeyboard 1
- 本模块 1
- micro SD卡读写器
- 杜邦线
c) 软件清单
- Arduino IDE
d) 连线图
- 在电脑上先将SD卡格式化为FAT格式,音频文件放在根目录下。
- 将SD卡插入模块内
- 打开Arduino IDE
- 将下面的代码上传到UNO (注意:UNO只有一个串口,因此程序下载和DFRduino Player模块不能同时使用)
- 按连接图进行连线,并对UNO进行供电,建议使用外部电源。
/////////////////////////////////////////////////////////////////////////////////
//将音频文件放在根目录下,支持.WAV、.MP3 这两种文件格式
//电压 5V,电流保证有1000毫安,如果电流不够需要将音量调小或者使用单个喇叭
//指示灯的功能:
// 等待初始化成功后将长亮,如果SD卡未插好将一直闪烁同时
// 如果是串口模块将输出 Plese check micro SD card\r\n
///////////////////////串口通信方式/////////////////////////////////////////////
// 播放音频:语音文件名称\r\n 播放相应名称的歌曲,如果找到歌曲播放正确将返回 Play ok\r\n
// 如果失败返回 Not found\r\n; 如果播放完毕返回 over\r\n(\r\n表示回车换行)
// 语音文件名称不超过8个英文字母,4个中文。
// 暂停播放\\:p\r\n 成功返回pause\r\n
// 继续播放\\:s\r\n 成功返回start\r\n
// 播放下一首\\:n\r\n 成功返回next\r\n,失败返回 false\r\n
// 播放上一首\\:u\r\n 成功返回key up\r\n
// 音量设置\\:v 255\r\n,设置音量大小 数字 0-255 数字越大音量越大,成功返回Play end\r\n
/////////////////////////////////////////////////////////////////////////////////
//串口接线方式
//Arduino MP3
//TX RX
//RX TX
//5V +5V
//GND GND
int adc_key_val[5] ={600, 650, 700, 800, 950 };
int NUM_KEYS = 5;
int adc_key_in;
int key=-1;
int oldkey=-1;
void setup()
{
Serial.begin(19200);
delay(2000); //Wait for initialization
Serial.println("\\:v 200"); //Set the volume, from 0 (minimum)-255 (maximum)
delay(50);
}
void loop()
{
adc_key_in = analogRead(0); // read the value from the sensor
key = get_key(adc_key_in); // convert into key press
if (key != oldkey) // if keypress is detected
{
delay(50); // wait for debounce time
adc_key_in = analogRead(0); // read the value from the sensor
key = get_key(adc_key_in); // convert into key press
if (key != oldkey)
{
oldkey = key;
if (key >=0){
switch(key)
{
case 0:
Serial.println("\\:p"); // Pause
break;
case 1:
Serial.println("\\:s");// Continoue to play
break;
case 2:
Serial.println("\\:n"); // Play next
break;
case 3:
Serial.println("\\:u"); // Play previous
break;
case 4: //Play specified song
Serial.println("\\YOURS.mp3");
break;
}
}
}
}
delay(100);
}
// Convert ADC value to key number
int get_key(unsigned int input)
{
int k;
for (k = 0; k < NUM_KEYS; k++)
{
if (input < adc_key_val[k])
{
return k;
}
}
if (k >= NUM_KEYS)k = -1; // No valid key pressed
return k;
}
f) 实现效果 按下按钮实现相应功能:
- S1 - 暂停
- S2 - 继续播放
- S3 - 播放上一首
- S4 - 播放下一首
- S5 - 播放指定歌曲(由程序指定)
本文整理于 DFRobot wiki
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号