ProductLink Voice Module 语音模块

简介

您是否也会在DIY制作时总感觉缺点什么?没有生命力,没有活力?作品很枯燥不吸引人?DFRobot新推MP3语音模块可以帮你解决以上的烦恼。
DFRobot MP3语音模块内置8 MB存储空间,无需外接SD卡,若一个音效以秒计算,8M的内存可以存储两百多个音效供您选用。存储方式和使用U盘一样简单,可随时更新模块内的音效。使用上非常的简单,沿用DFRobot-Gravity接口,减少了接线的烦恼;支持MP3、WAV音频格式,可做指定播放,循环播放,30级音量调节等。 适用于各种需要有音效或者语音的项目,例如:智能小车、气象站、智能家居、车载导航、收费站、安监检测、机器语音导航等等。模块板载喇叭接口,可以直接推动8Ω3W无源小喇叭,使用简单。

技术规格

  • 工作电压:3.3V-5V
  • 接口类型:UART
  • 支持MP3 WAV硬件解码
  • 支持采样率(KHz):8/11.025/12/16/22.05/24/32/44.1/48
  • 支持SPIFLASH模拟成U盘,直接操作U盘一样更新SPIFLASH里的语音
  • 支持30级音量调节
  • 模块尺寸:22x30mm

引脚说明

标号 名称 功能描述
1 T TX
2 R RX
3 - 电源地
4 + 电源正3.3V-5V
5 VCC 电源正3.3V-5V
4 GND 电源地
5 BUSY 忙信号脚,播放时为高,其它为低
6 SP+ 喇叭
7 SP- 喇叭
8 DACL DAC音频输出左声道
9 DACR DAC音频输出右声道
10 ONE 一线串口控制脚
11 micro usb 音效文件更新接口 (usb连接到电脑,存储方式与使用U盘一样简单)

引脚说明

通讯指令

查询播放状态(01)

指令:AA 01 00 AB

返回: AA 01 01 播放状态SM

说明:在任何时候都可以查询当前的播放状态,SM表示校验和,即 SM=0xAA+0x01+0x01+播放状态

播放(02)

指令:AA 02 00 AC

返回: 无

说明:在任何时候发此命令都会从头开始播放当前曲目

暂停(03)

指令:AA 03 00 AD

返回:无

停止(04)

指令:AA 04 00 AE

返回:无

上一曲(05)

指令:AA 05 00 AF

返回:无

下一曲(06)

指令:AA 06 00 B0

返回:无

指定曲目(07)

指令:AA 07 02 曲目高 曲目低 SM

返回:无

例如: AA 07 02 00 08 BB 指定播放当前盘符第 8 首,曲目数从 1-65535

指定盘符指定路径播放(08)

指令:AA 08 长度 盘符 路径 SM

返回:无

说明:长度=盘符长度+路径长度=1+路径长度

查询当前在线盘符(09)

指令:AA 09 00 B3

返回: AA 09 01 盘符 SM

说明:在线盘符是按位来区分的:USB:BIT(0) SD:BIT(1) FLASH:BIT(2) 此功能可以知道当前在线盘符,在切换盘符前建议先查询一下在线盘符

查询当前播放盘符(0A)

指令: AA 0A 00 B4

返回: AA 0A 01 盘符 SM

切换到指定盘符(0B)

指令:AA 0B 01 盘符 SM

返回: 无

说明:盘符切换指令,如果当前盘符在线,可以切换到相对应的盘符等待播放,切换 后曲目为第 1 首,建议切 换前先查询一下盘符是否在线。

查询总曲目(0C)

指令:AA 0C 00 B6

返回:AA 0C 02 总曲目高 总曲目低 SM

查询当前曲目(0D)

指令:AA 0D 00 B7

返回:AA 0D 02 曲目高 曲目低 SM

上一文件夹目录(0E)

指令:AA 0E 00 B8

返回:无

说明:切换后会播放文件夹里的第一首

下一文件夹目录(0F)

指令:AA 0F 00 B9

返回:无

说明:切换后会播放文件夹里的第一首

结束播放(10)

指令:AA 10 00 BA

说明:此指令可以提前结束当前操作,会结束当前播放,如果是在插播等则会提前结 束插播返回原来状态

查询文件夹目录首曲目(11)

指令:AA 11 00 BB

返回:AA 11 02 曲目高 曲目低 SM

说明:为当前目录的第一首歌曲的序号

查询文件夹目录总曲目(12)

指令:AA 12 00 BC

返回:AA 12 02 曲目高 曲目低 SM

说明:此曲目不包含子目录里的文件数

音量设置(13):

指令:AA 13 01 VOL SM

返回:无

例如:AA 13 01 14 D2 设置音量为 20 级

音量加(14)

指令:AA 14 00 BE

返回:无

音量减(15)

指令:AA 15 00 BF

返回:无

指定曲目插播(16)

指令:AA 16 03 盘符 曲目高 曲目低 SM

返回:无

例如:AA 16 03 00 00 09 CC 插播 U 盘里的第 9 首

说明:插播结束后返回插播点继续播放

指定路径插播(17)

指令:AA 17 长度 盘符 路径 SM

返回:无

说明:长度=盘符长度+路径长度=1+路径长度

设置循环模式(18)

指令:AA 18 01 循环模式 SM

返回:无

举例:设置为单曲停止 : AA 18 01 03 C6

设置循环次数(19)

指令:AA 19 02 次数高 次数低 SM

返回:无

说明:此指令只在播放模式为 全盘循环、单曲循环、目录循环时有效、顺序播放。

例如:AA 19 02 00 06 CB 循环 6 次

EQ 设置(1A)

指令:AA 1A 01 EQ SM

返回:无

例如:AA 1A 01 02 C7 设置 EQ 为 ROCK

组合播放(1B)

指令:AA 1B 长度 曲目 1 名称高字节,曲目名称 1 低字节..... 曲目 n 名称高字节,曲 目 n 名称低字节 SM

返回:无

例如:AA1B04303130328C,文件名为“ 01”、“ 02”歌曲组合播放

说明:文件名组合会方便很多,比文件序号组更准确,不受拷贝顺序限制。

结束组合播放(1C)

指令:AA 1C 00 C6

返回:无

说明:结束组合播放,返回组合前的播放状态

设置通道(1D)

指令:AA 1D 01 通道 SM

返回:无

查询歌曲短文件名(1E)

指令:AA 1E 00 C8

返回:AA 1E 短文件名长度 短文件名 SM

选曲不播放(1F)

指令:AA 1F 02 曲目高 曲目低 SM

返回:无

复读控制(20)

指令:AA 20 04 起始分 起始秒 结束分 结束秒 SM

返回:无

结束复读(21)

指令:AA 21 00 CB

返回:无

指定时间快退(22)

指令:AA 22 02 时间高 8 位 时间低 8 位 SM

返回:无

说明:单位为秒

指定时间快进(23)

指令:AA 23 02 时间高 8 位 时间低 8 位 SM

返回:无

说明:单位为秒

获取当前曲目总时间(24)

指令:AA 24 00 CE

返回:AA 24 03 时 分 秒 SM

开启播放时间发送(25)

指令:AA 25 00 CF

返回:AA 25 03 时 分 秒 SM

说明:开启播放时间发送,时间更新时会自动返回

关闭播放时间发送(26)

指令:AA 26 00 D0

返回:无

说明:关闭播放时间发送

使用教程

  1. 指定播放音效
  2. 循环播放音效
  3. 修改音量大小

准备

  • 硬件
    • 1 x Arduino UNO控制板
    • 1 x IO扩展板
    • 1 x 无源音箱小喇叭 (8Ω3W)
    • 若干 杜邦线
  • 软件

音效文件下载

1、本模块自带音效,如需要新增或者替换音效,我们可以使用micro usb线接到电脑端做更新下载;
2、音效文件更新方式和使用U盘的方式一样;
3、模块支持MP3和MAV格式音频文件;
4、文件要求存储在“ ZH”文件夹下,一般建议用数字表示。如: 01.mp3,02.mp3,也可以用两个字母或一个汉字命名 。

接线图

样例代码

    /*
     * @file Voice Module.ino
     * @brief
     * @n [Get the module here]
     * @n This example Set the voice module volume and playback
     * @n [Connection and Diagram]()
     *
     * @copyright  [DFRobot](https://www.dfrobot.com), 2016
     * @copyright GNU Lesser General Public License
     *
     * @author [carl](lei.wu@dfrobot.com)
     * @version  V1.0
     * @date  2017-11-3
     */
    #include <SoftwareSerial.h>

    SoftwareSerial Serial1(10, 11);

    unsigned char order[4] = {0xAA,0x06,0x00,0xB0};


    void setup() {
    //Serial.begin(115200);
     Serial1.begin(9600);
     volume(0x1E);//音量设置0x00-0x1E
    }

    void loop() {
     play(0x01);//指定播放:0x01-文件0001
    // Serial1.write(order,4);//顺序播放
     delay(5000);
    }

    void play(unsigned char Track)
    {
     unsigned char play[6] = {0xAA,0x07,0x02,0x00,Track,Track+0xB3};//0xB3=0xAA+0x07+0x02+0x00,即最后一位为校验和
       Serial1.write(play,6);
    }
    void volume( unsigned char vol)
    {
      unsigned char volume[5] = {0xAA,0x13,0x01,vol,vol+0xBE};//0xBE=0xAA+0x13+0x01,即最后一位为校验和
         Serial1.write(volume,5);
     }

Mind+(基于Scratch3.0)图形化编程

1、下载及安装软件。下载地址:https://www.mindplus.cc 详细教程:Mind+基础wiki教程-软件下载安装
2、切换到“上传模式”。 详细教程:Mind+基础wiki教程-上传模式编程流程
3、“扩展”中选择“主控板”中的“Arduino Uno”,选择"执行器"中的"串口Mp3模块"。 详细教程:Mind+基础wiki教程-加载扩展库流程
4、进行编程,程序如下图:
5、上传程序,首先将Mp3模块与Uno板连接的TX与RX线拔下,然后选择菜单“连接设备”,“上传到设备”,然后再将TX与RX插回。

结果

播放音效“DO”。

常见问题

Q:为什么声音播放几秒钟就停止了?

A:声音播放语句执行完毕后程序继续往后执行,如果如果再次收到声音播放的命令则重新从头播放,因此如果需要完整的播放完歌曲可以在程序中播放前检测上一次是否播放完毕,即查询播放状态(01)。

Q:为什么使用示例程序依然没有声音播放?
A:可以尝试交换一下tx和rx接线,因为串口需要交叉连接,另外注意音频文件要放到ZH文件夹中以数字方式命名。

Q:为什么不播放我的mp3文件?
A:1.检查电脑能不能播放文件。2.检查u盘中是否有zh文件夹,mp3文件需要放在zh文件夹里,而且播放顺序与文件的排列顺序有关。请参考这个程序,重复执行次数和文件总数一致,播放文件夹里所有的文件,确定排列顺序。

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。

更多

DFshopping_car1.png DFRobot商城购买链接