Radiko Jukebox (Raspberry Pi) 的制作

介绍

我用树莓派零W做了一台只播放radiko的专用机,所以我试着总结一下当时的挣扎。

我用 Autodesk Fusion 360 做 3D 建模和制作点唱机的时间比用 Raspberry Pi 编程要多,所以我认为它可能不适合在 Qiita 上发帖,但我做了电子工作和 3D 建模。我认为有些人可能对它感兴趣,我想写下我的记忆,所以我写了一篇文章。希望这可以帮助某人。

此外,该制作是在完全私人时间内完成的,而不是商业活动。

使用的主要技术和部件 Raspberry Pi Zero W + Raspberry Pi OS(bullseye) Arduino Nano Autodesk Fusion 360(3D 建模) 激光切割机 动机

我创作这部作品的动机如下。

内部创客空间(KM1)用户展和9/3(周六)和4(周日)我决定做点什么,因为它变成了一种展示的流程。 (对于 KM1看) 有时我在家工作时想用radiko收听FM广播,但在智能手机上启动应用程序很麻烦,虽然我可以用amazon echo播放它,但我不知道什么时候想知道,“这是什么歌?” 我知道我可以获取 radiko 歌曲信息,因此将它们结合起来可能会很有趣。 纸板制成的原型 第一个实施规范

我最初想到的实现规范是:

将扬声器连接到树莓派3的耳机插孔并播放。 让它看起来像点唱机。 使用 Neopixel 发光。 在 4 英寸显示屏上显示当前播放电台的历史记录和使用 python 播放的歌曲。 → 规格发生变化,因为它是一个非常小的 OLED 如何在 python 中播放 radiko

对于实现,我从一开始就假设我会使用树莓派,所以我决定使用家里的树莓派 3。如果你在网上搜索,可以使用streamlink和mpv播放radiko,根据这篇文章“”,所以我参考它安装如下。

sudo apt-get install mpv
python3 -m pip install streamlink

如上页所写,将以下内容创建为 radiko.sh,

#!/bin/sh
~/.local/bin/streamlink -p mpv http://radiko.jp/#!/live/$1 best

现在radiko.sh FMT 将播放FM Tokyo。顺便说一句,J-WAVE 是FMJ。

以上是使用streamlink获取radiko流并使用名为mpv的媒体播放器播放,但是使用streamlink获取流并使用mpv播放声音需要很长时间。 (约 30 秒?1 分钟)

除了mpv,vlc、ffplay等播放器也能玩。关于那个“请参阅。

虽然开始播放了,但是耳机孔连接不带功放的音箱音量太小,几乎听不到声音,所以我把它输入到带功放的蓝牙音箱的AUX IN,这样我就可以听到了声音正常。变成了。

LCD (OLED) 上的歌曲信息显示

我曾经研究如何获取radiko歌曲信息如所写您可以在 JSON 中获取每个广播电台的歌曲信息,但遗憾的是您无法为 NHK 获取它。

搜索可以在树莓派上使用的 LCD 显示获取的歌曲信息(艺术家姓名、歌曲名称)。为了显示音乐信息,需要能够显示日语,所以我搜索了这样的东西。

到底,””,我决定使用I2C连接“DSD TECH / OLED 0.91英寸显示器”。

安装如上页所述,如下所示。

$ sudo pip3 install adafruit-circuitpython-ssd1306
$ sudo pip3 install adafruit-blinka
$ sudo pip3 install pillow
$ sudo apt-get install fonts-noto-cjk

我尝试了 adafruit-circuitpython 的示例代码,并且可以适当地滚动字符显示。

使用 Neopixel 闪耀光芒

实际上,我从来没有见过真正的点唱机,你可以通过搜索点唱机找到,但我不知何故想象霓虹灯会发光,我认为它会类似于那个。我想用Neopixel,可以全彩表现颜色。

到目前为止,我已经用过几次 Neopixel,但我有点犹豫要不要使用它,因为我有一个经验,当我在树莓派上使用它时,它会干扰其他设备,并且不能很好地打开。暂时可以确认,即使使用上面提到的I2C OLED,似乎也没有问题。 (但这会导致后来的悲剧……)

Neopixel 的 python 库说“我用了

安装如上页所述,如下所示。

$ sudo pip3 install rpi_ws281x adafruit-circuitpython-Neopixel
$ sudo python3 -m pip install --force-reinstall adafruit-blinka

另外,虽然问题不大,但是在使用这个库进行操作的时候还是需要给root权限为sudo python3 neopixel.py。

现在您可以在彩虹中以菊花链连接显示 12 * 2 组 Neopixels。

后来我想让Neopixel根据状态显示各种东西,所以这个页面(),但最后我无法得到它。

从 Raspberry Pi 3 更改为 Raspberry Pi 零 W

不知怎的,我觉得用树莓派 3 是一种浪费,所以我想我可以用我手头的小树莓派零 W,并考虑更换它。

不过,Zero W 没有耳机插孔,所以我考虑连接 USB 连接的扬声器。周边信息(),我考虑购买一个 USB 连接的扬声器,但我找不到任何看起来不错的东西。“买了。我决定用它来输出零 W 的音频。

手动操作按钮

FM Yokohama、J-WAVE、TOKYO FM、NHK FM可以通过按键操作依次选择。按键,我用的是手边的一个很普通的轻触开关,由于树莓派内置了上拉电阻,所以我直接接了GPIO,接了两个,一个用于调音,一个用于调音用于播放。用于停止。

关于节目

对于播放 radiko 的部分,上面提到的 radiko.sh 是由主 python 脚本中的子进程启动的。 OLED 和 Neopixel 被实现为库。我尝试在主脚本中导入OLED库并使用它,但是如上所述,Neopixel需要root权限,所以有点麻烦,所以这里也将neopixel.py作为外部程序从子进程启动并关闭. 我也采用了从子进程强制结束的方法为killall neopixel.py。

另外,如前所述,播放radiko的部分会通过启动两个外部程序streamlink和mpv来执行,所以同理,为了从子进程启动,切换电台,进程killall就实现了通过重新选择广播电台并在终止后启动的方式。如果有一个可以只用 python 播放所有东西的库,我可以让它更干净一些,但我放弃了花时间在那里。

主脚本也进行轻触开关输入和OLED显示控制,不过是使用threading库通过threading实现的。

完成临时原型

用美工刀切割和弯曲纸板,制作一个类似于自动点唱机的粗糙盒子,打孔以便可以看到OLED,Neopixel和触觉开关,然后将准备好的零件粘在盒子上。我粘贴了。如果 Neopixel 照原样可见,那是相当耀眼的,所以我想了一种方法来扩散它。

我画了一条合适的线,用眼睛剪了,所以它的尺寸比较马虎,但暂时放在盒子里。很想把点唱机上面的圆形部分表现的很漂亮,但是我没有足够的时间来做内部展览,因为某种原因我不得不远程参加展览。由于空间不足,我最终只展示了该设备的运行视频,所以我偷工减料并暂时完成了原型。

它看起来很丑,但它在 7 月 15 日的内部创客空间 (KM1) 用户展览中幸存下来。

Maker Faire Tokyo 2022 的实施

最终的目标是在 9 月 3 日(周六)和 4 日(周日)与公司的志愿者成员一起在 Maker Faire Tokyo 2022 展出,所以我犹豫着要开一家有奇怪纸板物品的商店。我认为有必要制作不知何故很酷,所以我考虑了各种各样的事情。

一开始我以为用激光切割机切割MFD材料做点唱机的盒子就好了,但是公司的激光切割机不让我切割MFD材料,所以暂时我会自己切割做一个盒子。我想过做。

购买扬声器

连接到耳机插孔的扬声器工作不正常,所以当我检查可以连接到树莓派的扬声器时,发现。我在 7/15 立即下订单。但是,它需要 8/2 和 2 周才能到达。

抵达后参考中的信息进行设置。我确认声音流动没有任何特殊问题。我没有检查如何改变那里的音量,但声音出来的那一刻,所以我很高兴。 (这将导致进一步的悲剧)

如何实现顶部圆形部分使其看起来像点唱机?

好像可以把MFD素材剪成盒子,点唱机圆形部分的正反面但是我想出了一个想法,如果我可以使用它,我可以以某种方式切割曲线,但是如何使天花板部分变圆。这真的让我很困扰。当我慢跑时,我日复一日地认为没有这样的事情。由于业余爱好者不可能弯曲一棵普通的树,我试图找到一个关于如何弯曲胶合板的 *** 视频,但似乎不可能将它弯曲成大约 R10(直径 10 厘米)的弧形。

我想过把几块薄板叠在一起,但是用手把它们剪下来会很痛苦,而且把它们剪得整整齐齐就更难了。

想了个好办法,在找凯恩斯家的时候,”' 吸引住了我的眼球。手感很好,很容易弯曲。尺寸刚刚好,价格合理。当时,我深信“这是唯一的办法,我可以走这条路!”现在回想起来,如果我没有遇到这块软木板,我想我永远也达不到成品。

Fusion 360 中的建模

我有机会在我的公司使用 Autodesk Fusion 360 进行 3D 建模,我开始觉得我可以通过操纵挤压操作来创建任何东西,只要它是基本的和简单的。因此,爱好用户可以免费使用它,所以我决定将它安装在我的 Mac 上,将这个自动点唱机中使用的所有部件进行 3D 建模,然后从那里创建一个完整的 Radiko Jukebox 模型。。

OLED、Neopixel、按钮、开关、扬声器一个一个,一边用游标卡尺测量尺寸,一边用我不习惯的Fusion 360,在草图中输入圆形或矩形,输入尺寸,挤压成创建一个形状。去。操作熟悉的话,瞬间就能搞定,但是对于我这个超级初学者来说,不知道怎么对齐中心,也不知道怎么均匀地复制同一个形状,所以还是蛮不错的低效而平淡的工作。我反复做了。 (不要从一开始就放松。提醒自己这是训练。)

点唱机的尺寸是20cm x 20cm,我认为可以在上面组合一个R10半圆,所以我就这样做了一个正方形和一个半圆,把它们组合起来,调整厚度以匹配3mm的厚度MFD 材料。我使用“外壳”将内部挖空来制作形状。当我看到这个形状的时候,我想如果我只是在3D打印机上打印出来,盒子就会毫无问题地完成,所以我决定忘记它。

接下来,我将制作的零件排列成自动点唱机的外形模型。这比预想的要难,因为超级初学者不太了解操作方法。我可以接受它,但我不知道如何根据尺寸将它放置在正确的位置。我研究了各种各样的东西并尝试通过对齐曲面来对齐曲面,尝试将切线与曲面对齐,将切线的距离输入偏移量,并尝试移动它。我能够将零件放置在街道上。后来,我不得不一边看这张图,一边在 MFD 材质上手动画线,所以我试图让数字尽可能清晰。 (呸。)

接下来,我还使用挤压来制作孔,以暴露点唱机正面的每一块。我认为可以使用零件的“投影”来挤压和打孔,但我不太了解如何使用投影,所以我很难过。应该可以打开“Sketch”,这是一个2D坐标,选择要投影的部分,从“Project/Import”中选择“Project”,但是效果不好。我尝试使零件不可见并以 3D 方式移动绘图。我花了一个星期才到这里。

输出图

由于我是 3D 输入的,我以为我可以轻松地输出平面图,但发现我可以做到,我松了一口气,即使我想知道如果我做不到我该怎么办。但是,当我实际尝试输出时,却遇到了无法输出的问题,因为零件数量太大,超过了免费版的10个零件的限制。通过删除不必要的部分,我能够以某种方式输出平面图(绘图)。

原以为会在未经允许的情况下显示尺寸,但我算错了,似乎需要我自己指定要显示的位置。如果能自己做就好了。。。

绘制 MFD 线而无法将绘图输出为 PDF

之后,我一边看一边想打印出 MFD 材料上的绘图和画线,但被告知我需要 Fusion 360 订阅合同才能打印出绘图。实在忍不住,一边看mac屏幕上的图纸一边用尺子量了尺寸,在MFD材料上画了一条线。或许如果能打印成PDF的话,就是按照尺寸的大小,如果能按原样通过MFD材料,我想我可能不用尺子测量就可以追踪了,但我忘记了我决定这样做。我不知道它实际上是怎么发生的。

切割 MFD 材料

我以为不用锯就可以用美工刀切割 MFD 材料,但我发现这需要很大的力量和毅力。我太累了,连一个部分都剪不下来,所以我不能一次把它全部剪掉。

也许可以用激光切割机切割薄木?

公司的激光切割机是不能加工MFD材料的,但是听说可以切割薄木头,所以去公司的时候顺便路过一个家庭中心,找了一块看起来刚刚好的板子。然后我看到“打印板”,认为它可能会起作用,所以我立即买了它(大约 350 日元?)并决定试一试。

由于公司PC中不包含Fusion 360,所以通过指定数值和合成图形,在点唱机表面用PowerPoint创建图形后,导出为PDF,然后在连接激光切割机的PC上使用Illustrator I已导入 PDF。在删除了由于某种原因生成的不必要的路径信息并进行了各种设置后,我立即尝试剪下电路板进行打印。起初,我尝试将输出设置为 75%,但感觉太强了,所以我将其降低到 60%,并且感觉良好。

将 Neopixel 光漫射到点唱机外的部分是使用单独的 5 毫米厚的透明亚克力板制成的。我还用填充物雕刻了它以漫射光线。

建立一个点唱机

点唱机的正面是用激光切割机制作的。侧面是手工从 MFD 材料中精心切割出来的。对于底部和背面的其余部分,我手头的 MFD 材料用完了,所以我在附近的 100 日元商店买了一个 10 毫米厚的板。我用锯子把它剪掉,最后沿着前面点唱机的形状画了一条线,它就成了一个截点。不过因为是反面,所以看不到,觉得还行,剪完就稍微打磨一下,就完成了。

两块水平板和一块底板用木胶粘贴在前面板上。我等它小心地固定好,让它不会弯曲,然后一根一根地粘上它。

管理点唱机中的零件

我以为我只需将零件放入盒子中就可以完成,但我意识到我忘记用激光切割机为 OLED 和开关切割孔。我想如果是这样一个直的洞,我总能把它剪掉,于是我用尽全力一次又一次地追踪它,打了一个洞。这也比我想象的要困难。钻孔然后用食人鱼锯切割可能更容易,或者如果你有凿子的话,用凿子凿出来。不建议普通人使用美工刀切割印制板。

光是切板我就筋疲力尽了,但最后我能够打开一个洞并放置零件。

我想不出一个从背面支撑 OLED 的好方法,所以我只是强行用胶带粘住了边缘。

由于触觉开关焊接到板上,我决定用强力双面胶带将板粘贴在一起。

为了对齐扬声器的孔,我将 MFD 材料夹在底板和扬声器之间,使其高度恰到好处,并用双面胶带粘贴。

点唱机的表面和neopixel扩散亚克力在弯曲部分有点松,所以我在边缘用一点木胶固定它。笔直的部分在垂直方向上稍长一些,所以我可以调整它使其紧密贴合,同时用砂纸一点一点地刮。

Raspberry Pi Zero W 被设计成水平安装在扬声器之间(我想知道是不是真的如此),所以我把它放在那里,放在点唱机的一侧和 Raspberry Pi 短边的边缘。我剪了每个部分的剩余木材,并通过从左右按住它来固定它。我调整了它,以便可以通过稍微倾斜 Raspberry Pi 来取出它。

对于Neopixel,我把多余的亚克力板剪成合适的尺寸,用双面胶粘在亚克力上,使Neopixel的发光面朝向点唱机的顶部,然后用双面胶固定在点唱机的正面。双面胶带。我准备了 2 块 Neopixel 作为一组 12 块,所以我将它们连接到 OLED 的上部和轻触开关的下部。

点唱机轮廓完成

所有的零件都装在点唱机里,所以我把软木板放在点唱机的顶部,用木胶粘上。。

后盖非常合身,因此可以以良好的摩擦感打开和关闭,而无需特别支撑它,所以这很好。最后,我用食人鱼锯切了一个小洞,让电源线出来。

绘画

当我看着完成的轮廓时,我开始担心点唱机表面是否发白。我也担心用激光切割机切割时会有点烧焦。所以””,我记得在最初的构思阶段我正在考虑使用某些东西,并在亚马逊上订购并购买了它。弄错了就回不去了,所以是个惊心动魄的作品,不过在老婆的帮助下,我小心翼翼的涂上去,擦干,再用干布擦一下,摸上去有感觉了变成了比我想象中更得意的样子。

完全的! ?

把所有东西放在一起后,我想,“我完成了!”

扬声器没有声音(展览前 3 天)

经过一番研究,我发现WM8960 Audio HAT的功能管脚和Neopixel中使用的树莓派的D18有重叠,所以我把Neopixel的连接改为空的D12,声音就安全出来了。 .那个时候,我摸了各种东西,Nexpixel的焊锡脱落了,所以我重新焊接了它。这已以某种方式修复。

OLED错误(展览前2天)

由于某种原因,由于 I2C 错误,OLED 无法启动。我以为是接触有问题,所以我把贴有胶带的部分撕掉,错误就修复了。好像是在板子部分贴了胶带,引起了奇怪的拉力,状态不太好。暂时,当我设计如何停止磁带并避免它时,错误消失了。

自动开机无声音(展前2天)

使用crontab -e 编辑 cron

@reboot  /home/pi/radiko_juke/radiko_juke.py

因此,我尝试在启动 Raspberry Pi 后自动启动 radiko_jukebox.py,但由于某种原因没有声音。我尝试了各种方法,例如从 systemctld 开始,但它不起作用。我认为我应该放弃这个并使用控制台 ssh 并在启动时点击命令。

但是,当我添加一个规范,在启动时在 OLED 上显示获取的 IP 地址时,我无意中注意到声音没有响起的原因是获取 IP 地址的时机。显然,获取IP地址需要一些时间,并且radiko_jukebox.py在此之前启动,所以在那个状态下似乎没有声音。通过添加一个直到 IP 地址显示在 OLED 上才进行的进程,自动播放问题自然得到了解决。

调音量时 Neopixel 闪烁(展览前一天晚上 9:00)

这就完成了!所以,最后,我检查了如何调节音量,并确认 alsamixer 可以控制 WM8960-声卡的音量。也从命令行

amixer -c1 sset Speaker 100,100 unmute

我发现我可以改变音量。在那之后,当我认为长按轻触开关可以改变音量会很好时,麻烦​​发生了。出于某种原因,当我播放声音时,Nexpixel 的 LED 会闪烁。此时是 9 月 2 日晚上 9:00...

我不知道原因,我尝试使用 alsamixer,但没有恢复的迹象。当我清楚地播放声音时,Neopixel 开始闪烁。我有麻烦了。在我改变音量之前应该没问题...

其实,以前我用谷歌语音套件的树莓派零W点亮Neopixel的时候,就遇到了点亮不好的现象。当时我把Neopixel接到Arduino上,再通过USB串口连接到树莓派上来控制Neopixel,但我决定这次只能超越它了。我很快找到了一个 Arduino Micro 并决定更改连接。

Arduino Micro 和 Raspberry Pi 是通过 USB 串口连接的,我做了这样的设置,以便 Arduino Micro 可以通过从 Raspberry Pi 发送命令来控制 Neopixel 的照明。其实我想用各种方式让它亮起来,但是我没有时间,所以只是在彩虹中显示它是最小的实现。

完全的

这终于完成了!明天早上会很早,所以我们将完成最低限度的必要操作检查。此时已是晚上 11:00。有了这个,我决定上床睡觉,下定决心,如果明天有什么不好的,那就是那个时候。

在 Maker Faire Tokyo 2022 当天

事实上,如果没有 Wi-Fi 连接到 Internet,这个 Radiko Jukebox 什么都做不了,但根据我过去在 Maker Faire 等展会上的经验,Wi-Fi 可能很难连接,而且我了解到它完全没用. 我知道因此,在为这种情况做准备时,通常的做法是进行有线连接或演示,即使它没有连接到 Wi-Fi 也可以完成,我根本无法保留它。

即使带着那种轻微的焦虑,我还是小心翼翼地把完成的 Radiko Jukebox 从我家装在一个纸板箱里拿出来,到达了会场东京 Big Sight。我和成员们一起前往我的展位,在其他人都到了开始准备自己的作品时,我心跳加速取出Radiko Jukebox,启动了自己的移动Wi-Fi路由器,然后打开了电源。 Radiko Jukebox。我把它放进去了。

这个 Jukebox 需要很长时间才能启动 Raspberry Pi,并且需要两分钟才能连接到 Wi-Fi 并从 Radiko 获取流数据。有时需要大约 3 分钟。我屏住呼吸,仿佛在祈祷,直到 Radiko 开始演奏。

终于,有声音了!

我松了一口气。不过此时我还是很担心中午 12:00 实际开始之后会发生什么,因为我有一种感觉,可能只是因为开始时 Wi-Fi 不忙,所以没有问题。设置阶段。但是当它没有成功的时候,我什么也做不了了,所以我只好把它留给了天。

最后结果

直到我做了这个,我遇到了一系列的麻烦,但在9月3日和4日,Wi-Fi只在9月3日就断了一次。打开电源后,它继续运行出奇的流畅,没有任何问题,直到亮17:00 萤火虫。我认为这很神奇。

此外,参观展位的人对Radiko Jukebox的反应也不是很好。 9月3日,除了“Radiko Jukebox”之外没有任何解释,所以没有解释我什么都听不懂。我想知道9/4是否通过添加一点解释变得更好了。会场比我想象的要响亮,即使把音量调到最大,我也几乎听不见收音机,这可能是一个艰难的环境。

不过还是有人说很有意思,也有人注意到了软木塞部分的想法,很佩服,这对我个人来说已经足够了。因为我做这个是为了自我满足...

Maker Faire 之后

似乎同一个展位上其他人的展品很受游戏和儿童游戏的欢迎。我也觉得这样的展览会很好地吸引Maker Faire的参观者。

嗯,我不知道明年我是否会再次参加,但我认为“制造”是好的。通过努力工作和反复试验获得的知识是无法估量的。我希望将来能利用这次经历创造出有趣的东西……

概括 我很高兴能够在 Fusion 360 中进行一些建模。 激光切割机超过人力。 在树莓派上同时使用 Audio system 和 Neopixel 很危险。 在树莓派上运行具有自动启动功能的程序时,需要确认已获取 IP 地址。 可以使用软木板代替曲木。 尽早组装整个系统并进行全面测试!

原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308626082.html

77人参与, 0条评论 登录后显示评论回复

你需要登录后才能评论 登录/ 注册