亲,“电路城”已合并升级到更全、更大、更强的「新与非网」。点击查看「新与非网」

本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于 Raspberry Pi 3 Model A+ 的乙烯基模拟器

发布时间:2021-11-11
分享到:

基于 Raspberry Pi 3 Model A+ 的乙烯基模拟器

发布时间:2021-11-11
分享到:

有时候你可能会觉得在黑胶唱片上听音乐很棒。它是物理的和触觉的。你听整张专辑而不是随机曲目。当它结束时你会注意到并有意识地选择其他东西。您可以构建一个集合并浏览它,而不必精确地搜索您想要的内容。

它也既昂贵又笨重,尤其是当您考虑到您花在黑胶唱片上的任何钱很可能是您已经通过订阅的流媒体服务访问的音乐的副本时。

该项目试图复制黑胶唱片的触感和收藏构建方面,同时依靠 Spotify 来实际传递音乐。将物理对象放在连接到 Raspberry Pi(两者都可以隐藏)的 NFC 读取器上,将开始播放与该标签关联的专辑。

我将引导您完成所有步骤 - 从设置 Raspberry Pi 到编码 NFC 标签。这是我的第一个 Raspberry Pi 项目和我的第一个 Python 代码,所以我在开发这个项目时自学了这两个项目。因此,这些说明假设以前的知识几乎为零,并与您进行每一步。

如果您熟悉如何设置 Raspberry Pi 或已经设置了一个,那么您可以跳过相当多的早期步骤。

第 1 步:安装 Node.js 和 NPM
通过 SSH(终端 / Putty)或 VNC 连接到您的 Raspberry Pi 命令行。

我们现在要安装我们需要的依赖项。

第一项工作是通过键入以下两个命令再次检查您的软件是否是最新的。它们可能需要一段时间才能下载和安装。

接下来你要下载并安装node.js和NPM (不要太担心它们是什么,它们对我们的下一个任务很有帮助和必要),输入以下内容:

第 2 步:安装 SONOS HTTP API

我们项目后端的基础是jishi创建的node-sonos-http-api包。

让我们首先检查我们是否安装了“git”:

然后使用在 Raspberry Pi 上的命令行中输入以下命令下载代码:

我们将使用以下命令安装它

然后我们可以使用以下命令运行它:

一旦完成,我们应该测试它是否有效。

首先,在我们的 Raspberry Pi 上打开互联网浏览器并导航到http://localhost:5005/ 。一个漂亮的界面应该打开,带有 Sonos 标志和一些关于 API 如何工作的文档。

接下来,让我们通过在同一网络上的另一台 PC 或 Mac 上使用浏览器并导航到 http://[theIPaddressofyourPi]:5005/ 并查看我们是否得到相同的结果来检查这是否在更广泛的网络上工作。我们应该。

现在我们实际上会让系统做一些事情。使用浏览器并导航至:

您应该将上述 IP 地址替换为 Raspberry Pi 的地址,并将“餐厅”替换为 Sonos 区域的名称之一。它应该播放或暂停(取决于音乐是否已经在播放)该房间中的音乐。显然,Sonos 队列中需要有一些东西才能工作。

展望未来,我将在本教程中使用上述 IP 地址和餐厅作为示例。显然,您应该每次都用您的 IP 地址和区域名称替换它们。

第 3 步:使 Sonos HTTP API 持续运行
很高兴我们运行了 Sonos HTTP API,但是如果它崩溃了怎么办?或者您断电或需要重新启动 Raspberry Pi?

您可以通过关闭终端窗口并重试我们刚刚尝试的操作来查看效果。它不会工作,因为 HTTP API 已与终端窗口一起停止。

我们实际上希望它不断运行,并且每次从启动开始就这样做。我们用一种叫做 PM2 的很酷的东西来做到这一点。

在新的终端窗口中,按如下方式安装并运行它:

现在让我们让它运行我们的 Sonos HTTP API:

最后一个命令生成的东西看起来有点像:

复制您的 Pi 生成的内容(不是上面的确切文本 - 您的可能有所不同)并将其输入到命令行中。这会指示系统每次启动时运行 PM2。

最后输入:

这节省了一切。

现在通过使用命令重新启动 Raspberry Pi 来测试这是否有效

希望一旦 Pi 重新启动,它也会启动 PM2,进而启动 Sonos HTTP API。您可以通过使用同一网络上的浏览器导航到我们之前使用的地址来检查这一点,并查看 Sonos 徽标和说明:

第 4 步:播放一些 Spotify
让我们检查该服务是否可以访问 Spotify。

打开浏览器并导航到以下地址(显然替换为您的 IP 地址和房间名称):

第 5 步:查找 Spotify URI
奇怪,我知道,但不是每个人都喜欢约翰格兰特。也许你想听点别的?

您可以从桌面、Web 或移动应用程序获取 Spotify 链接,但桌面是迄今为止最简单的,因为它以您想要的格式提供 URI,所以从它开始。

在 Spotify 桌面应用程序中,导航到您想要收听的专辑(也许是 Beyonce 的 Lemonade?)

单击心形按钮旁边的三个小点。

转到共享菜单,然后选择复制 Spotify URI

这将复制类似

到您的剪贴板,这是 Beyonce 的 Lemondade 专辑的 Spotify URI。

再次启动浏览器并导航到以下地址(显然替换了 IP 地址和房间并粘贴到您刚刚复制的 URI 中):

你应该听到你选择的演奏。

如果您更喜欢使用网络应用程序,那么它会给您一个网络链接(如下所示):

您需要将其转换为上面的spotify:album:code格式才能工作。

第 6 步:关于 Spotify URI 的说明
Spotify URI 及其与node-sonos-http-api 的交互方式在大多数情况下都是直观的。

您可以直接链接到专辑、曲目和播放列表。

一个专辑URI是这样的:

一个轨道URI是这样的:

播放列表的工作方式略有不同。当您从 Spotify 复制 URI 时,它将类似于:

但是,要真正让它在 API 上工作,您需要将spotify:user:添加到上述开头。这甚至适用于公共播放列表,是的,这意味着您说 Spotify 两次。

非常清楚,user不需要是特定用户的名称,只需文本user 。因此,使上述播放列表正常工作的正确 URI 是:

第 7 步:设置 Raspberry Pi 以发送 HTTP 请求
我们不想将 HTTP 请求手动输入到 Web 浏览器中,而是希望将其自动化,以便 Raspberry Pi 在出现某些刺激(NFC 阅读器被触发)时自行执行此操作。

我们将使用一个名为requests的库来允许我们的 Raspberry Pi 执行此操作。让我们检查它是否已安装。

打开 Pi 上的终端并输入以下内容:

它很可能会回来并说它已经安装了,在这种情况下很好。如果没有,它会安装它。

第 8 步:使用 Spotify 数据生成 NFCC 标签
现在我们想将 Spotify 专辑 URI 写入 NFC 标签。您将使用这些标签中的每一个来告诉 Raspberry Pi 播放特定专辑。

您可以使用 Android 手机写入 NFC 标签,但我发现通过 mac 或 PC 这样做最容易,因为这样您就可以最容易地从 Spotify 桌面应用程序获取 Spotify URI。

将 USB NFC 读卡器插入 PC 或 Mac。我正在使用 American Card Systems 的 ACR122U。

将NFC 工具下载到您的 PC 或 Mac。安装并打开它。

有时连接到读取器可能会有点慢,并且可能会说它根本找不到读取器。转到NFC 工具中的“其他”选项卡,并经常单击“已连接的 NFC 阅读器”按钮。您可能需要多次拔掉和重新插入阅读器才能找到它。

最终,它会让您选择从列表中选择您的阅读器并说它已连接。转到“信息”选项卡,该选项卡除了“等待 NFC 标签”外不会显示任何内容。

拿一个空白的 NFC 标签。把它放在阅读器上并留在那里。NFC 工具将显示有关标签的信息。

转到“写入”选项卡,然后单击“添加记录”>“文本” 。(注意不要选择 URL 或 URI - 我知道这很诱人,因为您正在复制 URI,但您想要文本)

使用我们之前使用的方法从 Spotify 获取 URI。如果您想要一个简单的示例,那么以下是我们之前的 John Grant 专辑。

单击“确定” ,然后单击“写入” (不要忘记这最后一步 - 在您单击它之前它实际上不会写入它)。它会告诉您它已成功写入标签。

从阅读器上取下标签

第 9 步:在 Raspberry Pi 上设置 NFC 阅读器
将 NFC 阅读器插入 Raspberry Pi 上的 USB 端口之一。

我们将使用nfcpy Python 库与 NFC 阅读器进行通信。通过在 Pi 命令行上键入以下内容来安装它:

然后我们可以通过输入以下内容来检查这个库是否能够看到我们的 NFC 阅读器:

如果它有效,那么您将看到以下内容:

但是,您很有可能会收到一条错误消息,指出已找到阅读器,但您的用户 ( pi)无权访问它。如果您确实收到此错误消息,那么它还将解释如何解决该问题,即通过键入两个类似于以下命令的命令:

复制并执行它给你的两个命令(不完全是上面的命令,因为你的可能不同),然后从 USB 端口拔下并重新插入你的 NFC 阅读器。

再次尝试检查命令:

这次它应该说它找到了没有错误消息。

第 10 步:安装vinylemulator python 脚本
我们现在已经准备好了所有的构建块:

我们的树莓派能够监听 NFC 输入
当给定 Spotify URI 时,我们的 Raspberry Pi 能够告诉 Sonos 播放 Spotify 播放列表
我们有一个 NFC 标签,上面存储有 Spotify URI
现在我们需要将所有这些构建块变成有用的东西。这是通过我编写的一个简短的 python 脚本完成的(在以前的 NFC/Spotify/Sonos 项目中有很多帮助),它被称为vinylemulator 。

要将其安装到我们的 Raspberry Pi 上,我们需要使用以下命令从 github 克隆它:

第 11 步:自定义乙烯基模拟器
打开 Raspberry Pi 文件管理器并导航到home > pi >vinylemulator

打开文件usersettings.py

此文件中的其中一行将显示为:

将“餐厅”更改为您想要控制的任何 Sonos 房间名称。

该文件中还有一个设置,允许您自定义sonos-http-api 的IP 地址。您应该可以将其保留为“localhost”不变,这意味着它将使用它正在运行的 Raspberry Pi。

保存文件并关闭它。

第 12 步:测试乙烯基模拟器
转到您的 Raspberry Pi 命令提示符。

输入以下命令:

如果一切顺利,这将加载脚本并告诉读者已准备就绪。阅读器上的灯应该变绿。

将 NFC 标签放在读卡器上,读卡器会发出哔哔声。

终端将显示它从 NFC 标签读取的内容并显示它发送的 HTTP 请求地址。您选择的专辑应通过您的 Sonos 扬声器播放。

此脚本将一直运行,直到您关闭终端窗口。您可以点击不同的专辑 NFC 标签,它会切换到该专辑。

第 13 步:让vinylemulator 在启动时持续运行
就像sonos-http-api 一样,我们希望vinylemulator一直运行,而不是只在我们调用它时运行。我们可以使用 pm2 再次执行此操作。

首先通过关闭终端窗口来关闭您正在运行的所有乙烯基模拟器实例。

然后打开一个新的终端窗口并输入以下两个命令:

让我们通过重新启动 Raspberry Pi 来检查这是否有效。(您可以输入sudo reboot或使用鼠标从 Raspberry 菜单执行此操作。

等待 Pi 再次启动并通过点击阅读器上的 NFC 标签查看它是否正常工作。你应该得到音乐。

第 14 步:祝贺自己
现在一切正常。您可以将 Raspberry Pi 移动到您打算放置它的任何位置。无论何时插入,它都会重新启动并按照您设置的方式运行。

你的下一个任务是有趣的:让一切变得美丽。

本项目用到的一些代码

如果您对此项目有任何想法、意见或问题,请在下方留言。

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论