ATMEGA16A-AUR
微芯片技术/爱特梅尔
|
× 1 |
NX5032GA-16MHZ-STD-CSK-8
NDK美国公司
|
× 1 |
227CKS035M
伊利诺伊电容器
|
× 1 |
741C083510JP
CTS电阻器产品
|
× 1 |
Y16271K00000T9R
Vishay 箔电阻器(Vishay Precision Group 的部门)
|
× 1 |
106CKH050M
伊利诺伊电容器
|
× 1 |
741C083510JP
CTS电阻器产品
|
× 1 |
G2RL-2A-CF-DC24
欧姆龙电子
|
× 1 |
双堆叠 1/4" 电话插孔 p/n NSJ12HF-1
纽特里克
|
× 1 |
硬件概述
MP3 Player Shield 的核心是 VS1053B 音频编解码器 IC。VS1053B 是一款多才多艺的小芯片。除了 MP3 之外,它还可以解码 Ogg Vorbis、AAC、WMA 和 MIDI。(它还能够对音频进行编码,尽管这超出了 MP3 Shield 的范围。)
支持 VS1053 的是一个 μSD 卡插槽,您可以使用它来存储 MP3 文件。使用 Arduino SD 库,很容易从 SD 卡中读取音乐文件,并将它们流式传输到 VS1053B。板上还有额外的电路可以将信号电平转换到 SD 卡允许的最大值 3.3V。
以下是 MP3 Player Shield 上重要连接器和其他组件的快速概览:
在上图中,蓝色标签是 VS1053 MP3 编解码器 IC 使用的引脚,红色标签用于与 μSD 卡通信,紫色标签的引脚由两个组件使用(耶 SPI!)。
使用了哪些引脚?
MP3 Player Shield 需要专门使用少量引脚。这些引脚不能用于与其他设备接口:
D2 连接到 VS1053B 的数据请求输出。该引脚是一个中断,它告诉 Arduino IC 需要更多音乐数据。
D6 连接到 VS1053B 的片选输入。该低电平有效引脚告诉芯片何时向其发送数据。
D7 连接到 VS1053B 的数据片选输入,它告诉芯片何时发送音乐数据。
D8 连接到 VS1053B 的复位输入。
D9 连接到 μSD 卡的片选输入。
Arduino 的三个 SPI 数据和时钟引脚——D11、D12 和 D13——可用于连接其他 SPI 组件。但是,它们不能用于 SPI 以外的任何目的。
哪些引脚是免费的?
哇!屏蔽确实用掉了很多引脚,但这里的引脚仍然可用于连接其他组件。
硬件 UART 引脚——RX 和 TX——在引脚 0 和 1
D5 和 D10(PWM 引脚!)
所有模拟引脚(A0 到 A5)。
可选引脚跳线
我们还没有提到的两个引脚是 D3 和 D4,它们分别连接到 VS1053B 的 MIDI-In 和 GPIO1 引脚。这些引脚的使用是可选的。大多数 MP3 播放功能不需要它们,包括我们将在本教程中展示的示例。
要禁用这些引脚中的任何一个,可以使用爱好刀切割其标签旁边的跳线。
输出音频
从 MP3 Player Shield 驱动音频有两种选择。最简单、即插即用的选项是将一些耳机插入板载 3.5 毫米立体声音频插孔中。有源(有源)扬声器也可以插入此插孔,但仅 VS1053B 本身并没有足够的功率来驱动低阻抗无源扬声器。
左右声道以及音频接地也被分到耳机插孔旁边的 0.1" 接头上。您可以使用这些引脚连接到扬声器或放大器输入。
线路输出警告
如果您要将扬声器输出连接到功率放大器或电路,请务必阅读 VLSI 的连接模拟输出应用说明。
“R”和“L”旁边标有“-”的引脚连接到 VS1053B 上的“GBUF”引脚。该引脚不接地,不应接地!它在 VS1053B 内部偏置为 1.25V。例如,如果 GBUF 连接到 PC 上的线路输入,它可以在 PC 侧接地并形成接地回路。
如果 GBUF 连接到放大器接地,则可能会产生危险的(对 VS1053B 而言)电流回路。(来自 VS10XX 模拟输出应用说明。)
不要那样做!VLSI 应用笔记有一些推荐的电路(见第 3.1 和 3.2 节),以帮助避免此类问题。
组装和准备
在我们开始上传代码和流式传输一些曲调之前,首先需要完成一些准备步骤。您需要在屏蔽层上焊接一些东西,并准备一张 μSD 卡。
添加标题
要开始使用屏蔽,您需要焊接一些接头。如果您希望保持屏蔽层可堆叠,可堆叠接头可能是最佳选择。否则,直男头也可以。
一个 MP3 Player Shield,上面焊接了可堆叠的接头。
查看我们的屏蔽组装指南,获取更多有关将接头添加到屏蔽的帮助。
MP3 文件和 μSD 卡设置
在连接的这个阶段,您可能还想开始准备您的 μSD 卡。首先,确保它的格式正确。我们将使用的 SDFat Arduino 库仅支持格式化为 FAT16 或 FAT32 的卡。您的卡可能已经格式化为这些标准之一,但仔细检查并没有什么坏处。
您可能还需要准备音乐文件。VS1053B 能够播放 MP3、AAC、WMA、MIDI 和 Ogg Vorbis 音频文件。VS1053B 支持每种文件类型的各种采样率和比特率。查看数据表(从第 8 节开始——第 26 页),确保支持您的音频文件。例如,MP3 支持高达 320 kbps 的比特率和 48 kHz 的采样率。
最后,在将音频文件加载到 SD 卡之前,您需要修改它们的名称。SDFat 库仅支持“8.3”文件名——即 '.' 之前的八个字符。和后面的三个字符(例如“track001.mp3”)。此外,我们稍后将使用的一些示例代码要求使用特殊约定命名音频文件。在 MP3 触发器示例中,文件需要命名为“track001.mp3”、“track002.mp3”等。
使用 SFEMP3Shield 库
SFEMP3Shield Arduino 库 - 由 Bill Porter、Michael Flaga、ddz 和 Wade Brainerd 合作编写 - 是 MP3 Player Shield 的惊人资源。结合同样出色的 SdFat 库,SFEMP3Shield 极大地简化了与 VS1053 连接和使用 MP3 Player Shield 的任务。
我们建议将 SFEMP3Shield 库与此屏蔽一起使用。在此页面上,我们将介绍如何安装和使用该库。在下一页,我们将使用它制作一个有趣的示例草图。
安装 SFEMP3Shield 库
要下载最新版本的 SFEMP3Shield,请单击库 GitHub 页面上的“下载 ZIP”链接。您还应该能够直接从这里获取它。
此 GitHub 存储库已包含 SdFat 库的副本,因此您已被覆盖。
您提取的“Sparkfun-MP3-Player-Shield-Arduino-Library-master”文件夹中应该有一些文件夹。“SFEMP3Shield”和“SdFat”文件夹尤其需要安装为 Arduino 库。如需安装库的帮助,请查看我们的安装 Arduino 库教程。您需要将这两个文件夹放在您的 Arduino 速写本中(默认情况下在您的 home/Arduino 文件夹中)。安装后,您的文件结构应如下所示:
现在重新启动 Arduino(如果它已打开),并在“Sketch”>“Import Library”菜单下检查以确保“SFEMP3Library”和“SdFat”都列在那里。
上传示例草图
SFEMP3Shield 库包含一些有趣的示例草图,展示了其所有令人敬畏的能力。首先,尝试加载“FilePlayer”示例,方法是转到“File”>“Examples”>“SFEMP3Shield”>“Examples”>“FilePlayer”。
确保 MP3 Player Shield 舒适地坐在您的 Arduino 上,然后上传!
上传后,打开串行监视器并将波特率设置为 115200 bps。一旦草图初始化,它应该为您提供一个可导航的菜单:
希望在菜单底部,您会看到草图在您的 SD 卡上找到的 MP3 文件列表。尝试发送一个带有填充零的 3 位数字(例如 001、003 等),以使列出的文件之一开始播放。你现在开槽了吗?
如果太安静,请尝试使用“+”命令调高音量,或使用“-”调低音量。还有各种其他有趣的选择可以尝试。
有用的 SFEMP3Shield 库文档
如果您正在寻求使用 SFEMP3Shield 的帮助,请首先查看其支持网站的主页。那里有一些很好的故障排除信息。
要深入研究代码,您可以查看他们的 GitHub 存储库。还有一个有用的 SFEMP3Shield 类参考指南,其中列出了该库提供的所有功能。
在下一页,我们将使用 MP3ShieldLibrary 制作一个示例草图,以展示它的一些更基本的功能。
示例草图:MP3 触发器
无论是红色还是紫色,每个人都喜欢好的 MP3 触发器。只需一个简单的按钮或开关即可触发歌曲或音效。让我们使用 MP3 Player Shield 库来制作一个可以与大男孩竞争的 MP3 触发器。
这是一个简单的示例,展示了如何使用 SFEMP3Shield 库播放和停止曲目。使用引脚 0、1、5、10 和 A0-A4,屏蔽最多可以触发 9 个轨道。A5 可用于停止当前播放的曲目。
第 1 步:设置 SD 卡
在将 μSD 卡插入屏蔽之前,您需要重命名 MP3 文件。九个曲目中的每一个都需要从“track001.mp3”到“track009.mp3”进行具体命名。
第一个触发器 - D0 - 将播放名为“track001.mp3”的 MP3,第二个触发器 - D1 - 将播放“track002.mp3”,依此类推,直到 A4 将播放“track009.mp3”。
第 2 步:设置硬件
当然,Shield 会为您完成大部分硬件设置。除了将屏蔽贴在 Arduino 上之外,您还需要找一些东西来触发引脚。您可以使用一个开关,其中有很多选项,或者您可以只使用一根简单的跳线将一个触发引脚接地。
您可以将耳机插入板载插孔以收听,或者,如果您想使用它,可以使用三个断开的“扬声器”引脚。这是我们结合了 MonoAmp Breakout 和 8 Ω 扬声器的设置:
第 3 步:加载代码
这是我们的 MP3 Shield 触发器草图。从下面复制/粘贴,或在此处下载:
语言:c
/*
MP3 屏蔽触发器
作者:吉姆·林德布洛姆
火花电子
日期:2013年9月23日
这是 SparkFun MP3 Shield 的示例 MP3 触发器草图。
引脚 0、1、5、10、A0、A1、A2、A3 和 A4 设置为触发轨道
“track001.mp3”、“track002.mp3”等加载到 SD 卡上
护盾。每当这些引脚中的任何一个对地短路时,
他们各自的曲目将开始播放。
当一个新的 pin 被触发时,当前正在播放的任何曲目都会
停止,新的将开始。
A5 设置为在触发时全局停止播放曲目。
如果您需要更多触发器,请使用针脚 3 和 4 上的屏蔽跳线
(MIDI-IN 和 GPIO1)可以切开并用作附加
触发销。此外,因为引脚 0 和 1 用作触发器
串行不可用于调试。将它们禁用为
如果要使用串行,则触发。
大部分代码是从 FilePlayer 示例中获取的
包含在 SFEMP3Shield 库中。主要感谢比尔
波特和迈克尔弗拉加,再次,为这个了不起的图书馆!
*/
#include
#include
#include
#include
SdFat 标准差;// 创建对象来处理 SD 函数
SFEMP3Shield MP3播放器;// 创建 Mp3 库对象
// 这些变量在 MP3 初始化时用来设置
// 一些立体声选项:
常量 uint8_t 体积 = 0;// MP3 播放器音量 0=最大,255=最低(关闭)
const uint16_t monoMode = 1; // 单声道设置 0=off, 3=max
/* 引脚设置 */
#define TRIGGER_COUNT 9
int triggerPins[TRIGGER_COUNT] = {0, 1, 5, 10, A0, A1, A2, A3, A4};
int stopPin = A5;//此引脚触发轨道停止。
整数最后触发器 = 0;// 这个变量跟踪正在播放的曲调
无效设置()
{
/* 将所有触发引脚设置为输入,激活上拉:*/
for (int i=0; i
{
pinMode(triggerPins[i], INPUT_PULLUP);
}
pinMode(stopPin, INPUT_PULLUP);
初始化SD();//初始化SD卡
initMP3Player(); // 初始化 MP3 屏蔽
}
// 循环所做的就是不断地单步执行触发器
//引脚以查看是否拉低。如果是,它将停止任何
// 当前播放曲目,并开始播放新曲目。
无效循环()
{
for (int i=0; i
{
if ((digitalRead(triggerPins[i]) == LOW) && ((i+1) != lastTrigger))
{
最后触发 = i+1; // 更新 lastTrigger 变量为当前触发器
/* 如果正在播放另一首曲目,请停止:*/
如果 (MP3player.isPlaying())
MP3player.stopTrack();
/* 使用 playTrack 函数播放编号的曲目: */
uint8_t 结果 = MP3player.playTrack(lastTrigger);
// 这里的另一种选择是使用
// playMP3(fileName) 函数,只要你映射
// 触发引脚的文件名。
if (result == 0) // playTrack() 成功返回 0
{
// 成功
}
else // 否则有错误,检查代码
{
// 以某种方式打印错误代码
}
}
}
//循环并检查触发引脚后,检查到
// 查看是否触发了 stopPin (A5)。
if (digitalRead(stopPin) == LOW)
{
最后触发器 = 0; // 重置 lastTrigger
// 如果正在播放另一首曲目,请停止。
如果 (MP3player.isPlaying())
MP3player.stopTrack();
}
}
// initSD() 初始化 SD 卡并检查错误。
无效初始化SD()
{
//初始化SD卡。
if(!sd.begin(SD_SEL, SPI_HALF_SPEED))
sd.initErrorHalt();
if(!sd.chdir("/"))
sd.errorHalt("sd.chdir");
}
// initMP3Player() 设置所有的初始化
// MP3 播放器屏蔽。它运行 begin() 函数,检查
// 对于错误,如果找到则应用补丁,并设置音量/
//立体声模式。
无效的 initMP3Player()
{
uint8_t 结果 = MP3player.begin(); // 初始化 mp3 播放器屏蔽
if(result != 0) // 检查结果,错误代码见自述文件。
{
// 错误检查可以到这里!
}
MP3player.setVolume(音量, 音量);
MP3player.setMonoMode(monoMode);
}
检查代码中的注释以获取分步演练。这个例子展示了使用 MP3 Player Shield 是多么容易(非常感谢 Bill Porter 和 Michael Flaga 的库)。调用 MP3player.playTrack() 函数开始一首歌曲,并使用 MP3player.stopTrack() 调用停止它。
第 4 步:触发一些曲调
加载草图后,您所要做的就是将其中一个触发销(0、1、5、10、A0、A1、A2、A3、A4)接地。当一个新的触发引脚接地时,任何当前正在播放的歌曲都将停止,与之相关的 MP3 文件将开始播放。如果要停止轨道,请将 A5 短暂接地。
您可以将这些触发引脚中的任何一个连接到各种按钮或开关,或者只需使用一根电线将它们暂时短接到地。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !