在过去的这个假期里,我决定通过设置一个 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 灯集成到通过单线控制的微型表面贴装封装中。

可编程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))

设置您的照明系统

  1. 将 SD 卡安装到 Raspberry Pi 中并固定它、面包板和灯,它们需要是(魔术贴适用于 Pi 和面包板)。

2、按照这个原理图安装74AHCT125电平转换芯片、灯、电源、Pi:

接线示意图

图片来源:

(Kattni Rembor,CC BY-SA 4.0)

  1. 使用连接器将附加灯串到第一个灯上。注意灯的总数。

  2. 将电源插入墙上。

  3. 将树莓派电源插到墙上,等待开机。

灯饰五金接线

图片来源:

(达林伦敦,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_controllerFlask 应用程序位于 github 存储库(见下文)的 neopix_controller 目录中,提供前端浏览器图形用户界面 (GUI) 来控制灯。我的树莓派连接到我的 wifi,可在 raspberrypi.local 访问。要在浏览器中访问 GUI,请转到http://raspberrypi.local:5000。或者,您可以使用 ping 查找 raspberrypi.local 的 IP 地址,并将其用作主机名,如果您有多个 raspberry pi 设备连接到您的 wifi,这将非常有用。

Flask 应用程序 UI

图片来源:

(达林伦敦,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 存储库中。

Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐