11. 控制 NeoPixels¶
NeoPixels,也称为 WS2812 LED,是串联连接的全彩 LED,可单独寻址,并且可以将其红色、绿色和蓝色分量设置在 0 到 255 之间。它们需要精确的时序来控制它们,并且有一个特殊的 neopixel 模块可以做到这一点。
要创建 NeoPixel 对象,请执行以下操作:
>>> import machine, neopixel
>>> np = neopixel.NeoPixel(machine.Pin(4), 8)
这将在 GPIO4 上配置一个具有 8 个像素的 NeoPixel 条。您可以调整“4”(引脚编号)和“8”(像素数)以适合您的设置。
要设置像素的颜色,请使用:
>>> np[0] = (255, 0, 0) # set to red, full brightness
>>> np[1] = (0, 128, 0) # set to green, half brightness
>>> np[2] = (0, 0, 64) # set to blue, quarter brightness
对于超过 3 种颜色的 LED,例如 RGBW 像素或 RGBY 像素,NeoPixel 类采用一个bpp
参数。要为 RGBW 像素设置 NeoPixel 对象,请执行以下操作:
>>> import machine, neopixel
>>> np = neopixel.NeoPixel(machine.Pin(4), 8, bpp=4)
在 4-bpp 模式下,请记住使用 4-tuples 而不是 3-tuples 来设置颜色。例如设置前三个像素使用:
>>> np[0] = (255, 0, 0, 128) # Orange in an RGBY Setup
>>> np[1] = (0, 255, 0, 128) # Yellow-green in an RGBY Setup
>>> np[2] = (0, 0, 255, 128) # Green-blue in an RGBY Setup
然后使用该 write()
方法将颜色输出到 LED:
>>> np.write()
以下演示功能在 LED 上进行了精彩的展示:
import time
def demo(np):
n = np.n
# cycle
for i in range(4 * n):
for j in range(n):
np[j] = (0, 0, 0)
np[i % n] = (255, 255, 255)
np.write()
time.sleep_ms(25)
# bounce
for i in range(4 * n):
for j in range(n):
np[j] = (0, 0, 128)
if (i // n) % 2 == 0:
np[i % n] = (0, 0, 0)
else:
np[n - 1 - (i % n)] = (0, 0, 0)
np.write()
time.sleep_ms(60)
# fade in/out
for i in range(0, 4 * 256, 8):
for j in range(n):
if (i // 256) % 2 == 0:
val = i & 0xff
else:
val = 255 - (i & 0xff)
np[j] = (val, 0, 0)
np.write()
# clear
for i in range(n):
np[i] = (0, 0, 0)
np.write()
使用以下命令执行它:
>>> demo(np)