树莓派教程:使用二维码和 Raspberry Pi 控制 Sonos 智能音箱

这是什么?

在硬件方面,它只是一个安装有相机的 Raspberry Pi,嵌在一些绿色的 LEGO 中,并运行一些定制软件来扫描二维码,并将其转换为控制 Sonos 系统的命令。

在软件方面,有两个独立的 Python 脚本:

  • 在主计算机上运行 qrgen.py。它会从您的本地音乐库或者 Spotify 中获取歌曲列表以及命令(例如播放、暂停、下一步),并将包含印有图标和文本的小卡片的 HTML 页面输出来,并将二维码在另一面输出。将它们打印出来,然后剪切、折叠和粘合,直到剩下一堆整齐的卡片。
  • 在你的 Raspberry Pi 上运行 qrplay.py。它将启动一个进程,使用附带的相机扫描二维码,然后将这些代码转换为命令(例如 “speak this phrase”,“play [song] in this room”,“build a queue”)。

步骤一:准备你的 Raspberry Pi

我使用 Raspberry Pi 3 Model B(运行有 Raspbian)和 Arducam OV5647 摄像头模块构建了此应用程序。使用与其他型号时,情况可能会一样,也可能会不一样(例如,如何控制机载 LED 因型号而异)。

为了设置相机模块,我必须在 /etc/modules 中添加一个条目:

% sudo emacs /etc/modules
# Add bcm2835-v4l2
% sudo reboot
# After reboot, verify that camera is present
% ls -l /dev/video0

接下来,安装 zbar-tools(用于扫描 QR 码)并对其进行测试:

% sudo apt-get install zbar-tools
% zbarcam --prescale=300x200

可选:制作一个小箱子,以便将您的 RPi 和相机连同一个小插槽一起固定到位。

步骤二:启动 node-sonos-http-api

目前,qrplay 依赖于 node-sonos-http-api 的一个自定义分支,该分支已被修改为执行如下操作:

  • 只使用哈希字符串查找库轨道(tracks)(以保持 QR 码简单)
  • 返回所有可用库轨道及其相关散列的列表
  • 说出当前、下一首曲目
  • 播放与歌曲相关的专辑
  • 以及其他一些内容

注意node-sonos-http-api 使得这个项目很容易启动,因为它已经完成了我所需要的大部分工作,不过,使用 SoCo(Python 的 Sonos 控制器 API)之类的东西可能会更有意义。我们不需要运行单独的服务器,并且 qrplay 可以直接控制 Sonos 系统。)

可以直接在 Raspberry Pi 上运行 node-sonos-http-api,这样就不需要额外的机器运行,但是我发现这种方式很慢(特别是当 QR 扫描器进程已经在 CPU 上运行时),所以我通常在独立的机器上运行,以保持活跃。

要安装,克隆我的 fork,checkout 到 qrocodile分支,安装并启动:

% git clone -b qrocodile https://github.com/chrispcampbell/node-sonos-http-api.git
% cd node-sonos-http-api
% npm install --production
% npm start

步骤三:使用 qrgen 生成一些卡片

首先,如果你还没有在你的主计算机上克隆 qrocodile 项目:

% git clone https://github.com/chrispcampbell/qrocodile
% cd qrocodile

然后使用 Homebrew 安装 qrencode

% brew install qrencode

点击歌曲,然后选择 “Share > Copy Spotify URI”,即可在 Spotify 应用程序中找到 Spotify 曲目的 URI。 要让 qrgen 访问您的 Spotify 帐户,您需要设置自己的 Spotify 应用令牌。(详细的内容见 spotipy文档。)

您可以使用 qrgen 列出音乐库中所有可用音轨的 URI(这些示例假设 node-sonos-http-api 正在本地主机(localhost)上运行):

% python qrgen.py --hostname localhost --list-library

接下来,创建一个文本文件,列出您要创建的不同卡片。(请参阅 example.txt 了解更多的可能性)

最后,生成一些卡片并在浏览器中查看输出结果:

% python qrgen.py --hostname localhost --input example.txt
% open out/index.html

它看起来像这样:

卡片示例

步骤四:启动 qrplay

在你的 Raspberry Pi 上,克隆 qrocodile 项目:

% git clone https://github.com/chrispcampbell/qrocodile
% cd qrocodile

然后,运行 qrplay,指定正在运行的机器的主机名 node-sonos-http-api

% python qrplay.py --hostname 10.0.1.6

如果你想使用自己的 qrocodile 作为独立的东西(没有连接到显示器等),你需要设置你的 RPi 在设备启动时启动 qrplay

% emacs ~/.config/lxsession/LXDE-pi/autostart
# Add an entry to launch `qrplay.py`, pipe the output to a log file, etc

背景故事

这一切都开始在某一晚的餐桌上。孩子们想把一张专辑放在转盘上(在餐厅的 Sonos PLAY:5 上连线)。他们完全有能力将乙烯基单独放在转盘上,但使用 Sonos 应用程序切换播放是一个不同的故事。

我大声哀叹所需的步骤数量,然后开始思考解决方案。脱下我的锡纸帽子,并屈服于 Alexa 的热潮? 购买某种物联网按钮的东西?一个 RFID 标签的东西?QR 码也许可能? 后一种选择让我想到了各种可能性。也许孩子们可以通过任意数量的歌曲/专辑(来自 Spotify 或我的本地收藏)选择晚餐音乐,只需在前面挥动 QR 代码。 或者,现在他们可以制作自己的舞蹈派对播放列表。

这似乎是一件有趣的事情,所以我订购了一个 Raspberry Pi 和一个便宜的相机。

第二天它到了,hacking 开始了。

英语原文链接:https://github.com/chrispcampbell/qrocodile

尚未评分
您的评分将帮助我们做出更好的玩法

观光\评论区

Copyright © 2017 玩点什么. All Rights Reserved.