在树莓派上搭建可编程灯光显示器
在过去的这个假期里,我决定通过设置一个 DIY 灯光显示器来为我们的房子增添一些额外的欢乐。我使用了 Raspberry Pi、可编程灯串和 Python。 由于 WS12911/2(或 NeoPixel)系统的灵活性,您可以按照这些说明为任何场合设置自己的灯光显示器。 先决条件 你会需要: 1 – 带有接头和以太网或 WiFi 连接的 Raspberry Pi。我使用了带有标头的 Raspber
在过去的这个假期里,我决定通过设置一个 DIY 灯光显示器来为我们的房子增添一些额外的欢乐。我使用了 Raspberry Pi、可编程灯串和 Python。
由于 WS12911/2(或 NeoPixel)系统的灵活性,您可以按照这些说明为任何场合设置自己的灯光显示器。
先决条件
你会需要:
-
1 – 带有接头和以太网或 WiFi 连接的 Raspberry Pi。我使用了带有标头的 Raspberry Pi Zero W。
-
1 – WS12811/2 灯串。我使用了Alitove WS2811 可寻址 LED 像素灯 50,但还有许多其他类型可供选择。 Adafruit 将这些品牌命名为NeoPixel。
-
1 –WS12811 的 5v/10A AC-DC 电源如果您使用 Alitove。其他灯可能带有电源。
-
1 – 面包板
-
2 – 面包板到 Pi 头跨接线。我将蓝色用于 Pi GPIO 引脚 18,将黑色用于 Pi 接地。
-
1 – 74AHCT125 电平转换芯片,用于安全地将 Pi GPIO 线信号传输到 5v/10A 电源而不反馈给 Pi。
-
8 – 面包板到面包板跳线或实心 24 AWG 线。我用红色/橙色表示 5v 电源,黑色表示接地,黄色表示数据。
-
1 – 安装了 Raspberry Pi OS 的 SD 卡。我使用Raspberry Pi OS Lite并将其设置为启用 SSH 的无头模式。
什么是WS2811/2可编程LED?
WS2811/2 类可编程灯将带有驱动芯片的红、绿、蓝 LED 灯集成到通过单线控制的微型表面贴装封装中。
图片来源:
(达林伦敦,CC BY-SA 4.0)
每个灯都可以使用一组 RGB 整数或十六进制等效值单独编程。这些灯可以一起打包成矩阵、字符串和其他形式因素,并且可以使用对形式因素有意义的数据结构以编程方式访问它们。我使用的灯串是使用标准 Python 列表寻址的。 Adafruit 有一个很棒的教程关于接线和控制你的灯。
用 Python 控制 NeoPixel LED
更多关于树莓派
-
什么是树莓派?
-
电子书:树莓派指南
-
Raspberry Pi 速查表入门
-
电子书:在 Raspberry Pi 上运行 Kubernetes
-
白皮书:混合云蓝图中的数据密集型智能应用程序
-
理解边缘计算
-
我们最新的树莓派
Adafruit 为其销售的大部分零件创建了一整套 Python 库。这些旨在与CircuitPython一起使用,这是 Adafruit 为低成本微控制器板设计的 Python 端口。您无需在 Raspberry Pi OS 上安装 CircuitPython,因为预装的 Python 2 和 Python 3 是兼容的。
你需要pip3
来安装 Python 3 的库。安装它:
sudo apt-get install python3-pip
然后安装以下库:
-
rpi_ws281x
-
Adafruit-circuitpython-neopixel
-
Adafruit 信号灯
安装这些库及其依赖项后,您可以编写如下代码来使用sudo python3
(需要 sudo)对连接到 Raspberry Pi 的一个或多个灯进行编程:
进口板
导入新像素
数量_灯\u003d 50
# 用默认亮度 1.0 编程 50 个灯,并且 autoWrite true
像素 \u003d neopixel.NeoPixel(board.D18, num_lights)
# light 20 亮绿色
像素[19] \u003d (0,255,0)
# 将所有像素点亮为红色
像素.fill((255.0,0))
# 关闭新像素
像素填充((0,0,0))
设置您的照明系统
- 将 SD 卡安装到 Raspberry Pi 中并固定它、面包板和灯,它们需要是(魔术贴适用于 Pi 和面包板)。
2、按照这个原理图安装74AHCT125电平转换芯片、灯、电源、Pi:
图片来源:
(Kattni Rembor,CC BY-SA 4.0)
-
使用连接器将附加灯串到第一个灯上。注意灯的总数。
-
将电源插入墙上。
-
将树莓派电源插到墙上,等待开机。
图片来源:
(达林伦敦,CC BY-SA 4.0)
图片来源:
(达林伦敦,CC BY-SA 4.0)
图片来源:
(达林伦敦,CC BY-SA 4.0)
安装灯控制器和 Flask Web 应用程序
我编写了一个 Python 应用程序和库来与灯交互,以及一个在 Pi 上运行的 Flask Web 应用程序。有关代码的更多信息,请参阅我的Raspberry Pi Neopixel 控制器GitHub 存储库。
lib.neopixc 库
lib.neopixc
库扩展了neopixel.NeoPixC
类,以使用可编程的 RGB 颜色列表列表与串行连接的两个 50 灯 Alitove 灯串一起工作。它增加了以下功能:
-
set_color
:获取 RGB 颜色列表的新列表 -
walk
:遍历每个灯并按顺序将它们设置为颜色 -
rotate
:将列表列表中的最后一个颜色推到列表列表的开头,用于闪烁灯
如果您有不同数量的灯,则需要编辑此库以更改self._num_lights
值。此外,某些灯在 order 构造函数属性中需要不同的参数。 Alitove 与默认订单属性neopixel.GRBW
兼容。
run_lights.py 脚本
run_lights.py
脚本使用lib.neopixc
来支持颜色文件和状态文件来动态设置灯光在任何时候的行为方式。颜色文件是 RGB(或 RGBW)整数数组的 JSON 数组,使用set_colors
方法将其作为颜色提供给lib.neopixc
对象。状态文件可以包含三个单词之一:
-
static
:在while循环的每次迭代中不旋转灯光 -
blink
:在主while循环的每次迭代中旋转灯 -
down
:关闭所有灯
如果状态文件不存在,则默认状态为static
。
该脚本还具有 HUP 和 INT 信号处理程序,它们将在收到这些信号时关闭灯。
注意:因为 GPIO 18 引脚需要树莓派上的 sudo 才能工作,所以run_lights.py
脚本必须使用 sudo 运行。
neopixel_controller 应用程序
neopixel_controller
Flask 应用程序位于 github 存储库(见下文)的 neopix_controller 目录中,提供前端浏览器图形用户界面 (GUI) 来控制灯。我的树莓派连接到我的 wifi,可在 raspberrypi.local 访问。要在浏览器中访问 GUI,请转到http://raspberrypi.local:5000。或者,您可以使用 ping 查找 raspberrypi.local 的 IP 地址,并将其用作主机名,如果您有多个 raspberry pi 设备连接到您的 wifi,这将非常有用。
图片来源:
(达林伦敦,CC BY-SA 4.0)
当前状态和三个前端按钮使用 JavaScript 与 Flask 应用程序呈现的一组 REST API 端点进行交互:
-
/api/v1/state
:返回共享状态文件的当前状态,如果状态文件不存在则默认为static
-
/api/v1/blink
:设置状态文件闪烁 -
/api/v1/static
:将状态文件设置为静态 -
/api/v1/down
:将状态文件设置为关闭
我编写了两个脚本和相应的 JSON 定义文件来启动run_lights.py
和 Flask 应用程序:
zwz 100038 zwz 100177
launch_new_years.sh
这些可以在设置后从 Pi 上的命令行会话(终端或 SSH)启动(它们不需要 sudo,但在内部使用 sudo):
./launch_christmas.sh
您可以使用lights_down.sh
关闭灯并停止run_lights.sh
和 Flask 应用程序。
该库和烧瓶应用程序的代码位于Raspberry Pi Neopixel ControllerGitHub 存储库中。
更多推荐
所有评论(0)