×

Arduino的Mp3屏蔽

消耗积分:0 | 格式:zip | 大小:0.09 MB | 2022-07-04

分享资料个

PCB图如下:
pYYBAGKxqnyAdoKCAAD75EjtxIo515.png
poYBAGKxqn6AZ1xNAABaMK9Kj80904.png

pYYBAGKxqoKAIXEHAABj3YyNTFY124.png

成分

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

描述

Arduino 的 Mp3 屏蔽

 

硬件概述

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 上重要连接器和其他组件的快速概览:

 

pYYBAGKxqpiATrirAAUdWbIVlig643.png

 

在上图中,蓝色标签是 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 播放功能不需要它们,包括我们将在本教程中展示的示例。

 

poYBAGKxqpuAFG-sAAIoCu208e4729.png

要禁用这些引脚中的任何一个,可以使用爱好刀切割其标签旁边的跳线。

输出音频

从 MP3 Player Shield 驱动音频有两种选择。最简单、即插即用的选项是将一些耳机插入板载 3.5 毫米立体声音频插孔中。有源(有源)扬声器也可以插入此插孔,但仅 VS1053B 本身并没有足够的功率来驱动低阻抗无源扬声器。

poYBAGKxqp6AEV8lAAI9nYTiq14810.png

 

左右声道以及音频接地也被分到耳机插孔旁边的 0.1" 接头上。您可以使用这些引脚连接到扬声器或放大器输入。

线路输出警告

如果您要将扬声器输出连接到功率放大器或电路,请务必阅读 VLSI 的连接模拟输出应用说明。

“R”和“L”旁边标有“-”的引脚连接到 VS1053B 上的“GBUF”引脚。该引脚不接地,不应接地!它在 VS1053B 内部偏置为 1.25V。例如,如果 GBUF 连接到 PC 上的线路输入,它可以在 PC 侧接地并形成接地回路。

 

pYYBAGKxqqCAfFImAAHUwp95z0k889.png

 

如果 GBUF 连接到放大器接地,则可能会产生危险的(对 VS1053B 而言)电流回路。(来自 VS10XX 模拟输出应用说明。)

不要那样做!VLSI 应用笔记有一些推荐的电路(见第 3.1 和 3.2 节),以帮助避免此类问题。

组装和准备

在我们开始上传代码和流式传输一些曲调之前,首先需要完成一些准备步骤。您需要在屏蔽层上焊接一些东西,并准备一张 μSD 卡。

添加标题

要开始使用屏蔽,您需要焊接一些接头。如果您希望保持屏蔽层可堆叠,可堆叠接头可能是最佳选择。否则,直男头也可以。

 

poYBAGKxqqWADL5MAAgb5p2ZYFU517.png

 

一个 MP3 Player Shield,上面焊接了可堆叠的接头。

查看我们的屏蔽组装指南,获取更多有关将接头添加到屏蔽的帮助。

MP3 文件和 μSD 卡设置

在连接的这个阶段,您可能还想开始准备您的 μSD 卡。首先,确保它的格式正确。我们将使用的 SDFat Arduino 库仅支持格式化为 FAT16 或 FAT32 的卡。您的卡可能已经格式化为这些标准之一,但仔细检查并没有什么坏处。

 

poYBAGKxqqiAROnUAACKVHwxu4g247.png

 

您可能还需要准备音乐文件。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 文件夹中)。安装后,您的文件结构应如下所示:

 

pYYBAGKxqquAfoTsAAFXp-z3zOY422.png

 

 

现在重新启动 Arduino(如果它已打开),并在“Sketch”>“Import Library”菜单下检查以确保“SFEMP3Library”和“SdFat”都列在那里。

上传示例草图

SFEMP3Shield 库包含一些有趣的示例草图,展示了其所有令人敬畏的能力。首先,尝试加载“FilePlayer”示例,方法是转到“File”>“Examples”>“SFEMP3Shield”>“Examples”>“FilePlayer”。

确保 MP3 Player Shield 舒适地坐在您的 Arduino 上,然后上传!

上传后,打开串行监视器并将波特率设置为 115200 bps。一旦草图初始化,它应该为您提供一个可导航的菜单:

 

poYBAGKxqq6AaYyoAAL08zB2jnA620.png

 

希望在菜单底部,您会看到草图在您的 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”进行具体命名。

 

pYYBAGKxqrCAawnOAAJoQx8Qijg531.png

 

第一个触发器 - 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 // SPI 库

#include // SDFat 库

#include // SDFat Util 库

#include // Mp3 屏蔽库

 

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)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !