好啦,终于进入本项目系列教程的第三部分,也是最后的一部分啦~
这里将介绍我在树莓派上运行熔岩灯的软件向的内容。不会像前面两部分那样完全写出步骤,但会把遇到的问题和处理方法单独整理出来供大家参考。
随着以上两部分的完成,下来我们要开始深入研究如何驱动这盏灯了。这里不得不提 openprocessing.org 这个网站,它提供了丰富的草图并支持在线编辑工具。Processing 还附带了一个很棒的工具用于浏览和安装所需要的库。
我把我们用到的所有草图和其他零碎的资源放在了GitHub上,如果你需要可以在这儿下载:
https://github.com/JRButler/Digital-lava-lamp
接下来我们来准备树莓派上的系统,下载并给树莓派安装 Raspbian 系统。
如果发现鼠标的光标不灵敏或者抖动,可以尝试在 /boot/cmdline.txt 文件中添加一行配置进行消除。usbhid.mousepoll = 0
一般情况下,Processing 是被官方系统预安装的,如果没有,可以手动安装,参考:
https://learn.adafruit.com/processing-on-the-raspberry-pi-and-pitft/processing
以下是性能表现(跑分)
由于 ARM 架构的处理器对3D加速支持不给力,因此这些草图运行会很卡,随便尝试了一个3D草图之后放弃了,改用2D方式绘制粒子草图并做了一些设置上的妥协——降低分辨率、减少需要绘制的粒子数量、将粒子从透明渐变的PNG文件生成修改为平面透明的 circle() 函数生成。经过一系列优化终于将性能提升到了约 Mac mini 的 50%,这已经足够了。
在前面的部分,我们已经介绍了使用 FadeCandy 来驱动 LED 灯条。树莓派作为服务器的角色,给 FadeCandy 传输指令从而间接驱动灯条。这里有两份搭建指南供参考,这里就不再赘述了。
https://cdn-learn.adafruit.com/downloads/pdf/led-art-with-fadecandy.pdf
https://learn.adafruit.com/1500-neopixel-led-curtain-with-raspberry-pi-fadecandy/fadecandy-server-setup#
我们下来要实现的是让运行在树莓派上的 Processing 去指挥 FadeCandy 去驱动灯条。那么它们之间如何通信呢?这时候需要用到 OPC 类!这是专门为 Processing 封装的 Open Pixel Control java 类,封装了很多渲染草图到 LED 灯条的功能,具体可以自行研究(www.misc.name)。
下面是我所用的一段代码:
opc = new OPC(this, "127.0.0.1", 7890);
opc.ledGrid(0, 15, 4, width*0.25, height/2, height/15, width/8, 4.712, true);
opc.ledGrid(64, 15, 4, width*0.75, height/2, height/15, width/8, 4.712, true);
下面是可视化示例:
拔电源关键是不行的,这通常会造成磁盘错误而导致下次无法开机。因此我们添加一个按钮,用于安全的关机。方法参考这里:
http://shumeipai.nxez.com/2015/04/05/saks-diy-tutorials-reboot-button.html
我把所有的脚本和资源文件都公开在这里了,如果你有兴趣可以研究,欢迎关注本项目。
https://github.com/JRButler/Digital-lava-lamp