跳转到主要内容

用于控制SK6812和WS281X LED的用户空间Raspberry Pi PWM/PCM/SPI库。

项目描述

用于控制WS281X LED的用户空间Raspberry Pi库。这包括WS2812和SK6812RGB RGB LED。现在初步支持SK6812RGBW LED(是的,RGB + W)。LED可以通过PWM(2个独立通道)、PCM控制器(1个通道)或SPI接口(1个通道)进行控制。

背景

Raspberry Pi中的BCM2835具有PWM和PCM模块,非常适合驱动可单独控制的WS281X LED。使用DMA、PWM或PCM FIFO和PWM中的串行模式,可以在连接到适当输出引脚的链式连接中控制几乎任何数量的WS281X LED。对于SPI,使用Raspbian spidev驱动程序(/dev/spidev0.0)。此库和测试程序将时钟速率设置为所需输出频率的3倍,并在RAM中从颜色数组创建位模式,其中每个位由3位表示,如下所示。

Bit 1 - 1 1 0
Bit 0 - 1 0 0

GPIO使用

可用的GPIO受Pi硬件限制,并会根据驱动它们的方法(PWM、PCM或SPI)而变化。请注意,GPIO编号与引脚头上的物理引脚编号不同。

PWM

PWM0, which can be set to use GPIOs 12, 18, 40, and 52.
Only 12 (pin 32) and 18 (pin 12) are available on the B+/2B/3B

PWM1 which can be set to use GPIOs 13, 19, 41, 45 and 53.
Only 13 is available on the B+/2B/PiZero/3B, on pin 33

PCM

PCM_DOUT, which can be set to use GPIOs 21 and 31.
Only 21 is available on the B+/2B/PiZero/3B, on pin 40.

SPI

SPI0-MOSI is available on GPIOs 10 and 38.
Only GPIO 10 is available on all models.
See also note for RPi 3 below.

功率和电压要求

WS281X LED通常在5V下工作。根据您的实际LED型号和数据线长度,您可能能够使用3.3V成功驱动数据输入。然而,在一般情况下,您可能希望使用电平转换器将Raspberry Pi GPIO/PWM转换为5V。

也有可能从3.3V - 3.6V电源运行LED,直接连接GPIO,但以亮度损失为代价,这并不推荐。

测试程序设计用于驱动8x8 LED网格,例如来自Adafruit(http://www.adafruit.com/products/1487)或Pimoroni(https://shop.pimoroni.com/products/unicorn-hat)。请参阅Adafruit和Pimoroni网站以获取更多信息。

了解您与硬件和电力的操作。我对损坏、伤害或错误不承担责任。

有关DMA通道的重要警告

您必须确保您选择的用于LED的DMA通道未被操作系统占用。

例如,使用DMA通道5将在Raspberry Pi 3 Model B上导致文件系统损坏。见:https://github.com/jgarff/rpi_ws281x/issues/224

默认DMA通道(10)对于Raspberry Pi 3 Model B应该是安全的,但未来软件版本可能会有所变化。

限制

PWM

由于此库和板载Raspberry Pi音频都使用PWM,因此不能同时使用。您需要通过创建文件 /etc/modprobe.d/snd-blacklist.conf 来禁用Broadcom音频内核模块。

blacklist snd_bcm2835

如果禁用后音频设备仍然在加载,您可能还需要在 /etc/modules 文件中取消注释它。

在无头系统上,您可能还需要通过hdmi强制音频。编辑config.txt并添加

hdmi_force_hotplug=1
hdmi_force_edid_audio=1

此更改生效需要重启

某些发行版默认使用音频,即使没有任何音频播放。如果需要音频,可以使用USB音频设备。

PCM

使用PCM时,不能使用使用I2S的数字音频设备,因为I2S使用PCM硬件,但可以使用模拟音频。

SPI

使用SPI时,ledstring是唯一可以连接到SPI总线的设备。可以使用数字(I2S/PCM)和模拟(PWM)音频。

许多发行版的最大SPI传输为4096字节。可以在 /boot/cmdline.txt 中通过追加来更改

spidev.bufsiz=32768

在RPi 3上,您必须将GPU核心频率更改为250 MHz,否则SPI时钟将具有错误的频率。通过向 /boot/config.txt 添加以下行并重启来完成此操作。

core_freq=250

在RPi 4上,必须禁用其动态频率时钟,因为它会同步SPI时钟。通过向 /boot/config.txt 添加此行来完成此操作。(core_freq 不必更改,因为默认值为500MHz与SPI兼容)

core_freq_min=500

如果您希望不以root身份控制LED,则需要属于 gpio 组。

PWM/PCM/SPI比较

PWM和PCM都使用DMA传输来输出LED的控制信号。DMA传输的最大大小为65536字节。由于每个LED需要12字节(4种颜色,每种颜色8个符号,每个符号3位),这意味着PCM可以控制大约5400个LED的单条串,PWM可以控制每条串2700个LED(只有PWM可以同时控制2个独立串)。SPI使用内核中的SPI设备驱动程序。对于大于96字节的传输,内核驱动程序也使用DMA。当然,实际功率和信号质量的限制会比上述理论限制更严格。

当控制240个LED的LED串时,原始Pi 2(BCM2836)的CPU负载为:PWM 5%,PCM 5%,SPI 1%

5.0.0

  • 升级到rpi_ws281x v1.0.0 (15330cb)

  • 完整的rpi_ws281x更改: https://github.com/jgarff/rpi_ws281x/compare/9be313f…15330cb

  • 新增:支持修订版0xa03141,0xb03141,0xc04141,0xd03141(CM4)

  • 新增:支持修订版0xa32082(Pi 3 B)

  • 新增:支持PixelStrip上的切片

  • 新增:使用v4.0.2重新生成SWIG绑定

  • 新增:用于与像素值接口的RGBW类

4.3.4

  • 新增:支持版本0xa03115(Pi 4,1GB v1.5)

4.3.3

  • 新增:支持版本0xc03115(Pi 4,4GB v1.5)

  • 新增:支持版本0xd03115(Pi 4,8GB v1.5)

4.3.2

  • 新增:支持版本0xc03131(Pi 400,4GB v1.1)

  • 新增:支持版本0xb03115(Pi 4,2GB v1.5)

4.3.1

  • 新增:支持版本0x902120(Pi Zero 2 W v1.0)

4.3.0

  • 切换到上游jgarff/rpi_ws281x库

  • 新增:支持版本0xd03140(CM4 v1.0 WiFi)

4.2.6

  • 新增:支持版本0xc03114(Pi 4,4GB v1.4)

  • 新增:支持版本0xa03140(CM4 v1.0 eMMC)

  • 新增:支持版本0xb03140(CM4 v1.0 Lite)

  • 新增:支持版本0xc03140(CM4 v1.0 WiFi)

4.2.5

  • 新增:支持版本0xc03130(Pi 400,4GB)

  • 新增:支持版本0xb03114(Pi 4,2GB v1.4)

4.2.4

  • 修复:修复了aarch64对rpi_hw_detect的支持

  • 新增:支持版本0xD03114(Raspberry Pi Model B - 8GB)

4.2.3

  • 修复:添加了对Pi 4 Rev 1.2 - 0xa03112、0xb03112、0xc03112的支持

4.2.2

  • 修复:修复了设置像素时对Slice的支持

  • 新增:支持版本0xa02083

  • 新增:支持版本0xa22083

4.2.1

  • 修复:将白色通道添加到Color()中

4.2.0

  • 新增:支持Raspberry Pi 4

4.1.0

  • 新增:支持Pi 3A+

  • 修复:修复了ARM64支持中的错误

4.0.0

  • 注意:已从库中移除“neopixel”模块,请使用“rpi_ws281x”代替,参见#8

3.1.0

  • 新增:暴露ws的所有内容,以便轻松访问strip_type常量

  • 修复:通过支持strip_type与上游遗留库的功能相匹配

  • 注意:默认strip类型为WS2811_STRIP_GRB

3.0.7

  • 新增:支持Pi 3B+

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

rpi_ws281x-5.0.0.tar.gz (64.5 kB 查看散列值)

上传时间 源代码

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面