11. 控制 NeoPixels

NeoPixels,又名WS2812 LEDs,是串行连接的、单独可寻址的全色LED,且可将其红、绿、蓝组件设置在0至255之间。 这些LED需要精准计时来实现控制,于是NeoPixels模块应运而生。

按照下列步骤创建一个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 设置为蓝色,1/4亮度

对于颜色超过3种的LED而言,例如RGBW或RGBY,NeoPixel类传递一个``bpp`` 参数。 设置RGBW Pixel的NeoPixel 对象,请遵循以下步骤:

>>> import machine, neopixel
>>> np = neopixel.NeoPixel(machine.Pin(4), 8, bpp=4)

在4-bpp模式下,请记得使用4-元组来设置颜色,而非3-元组。例如,使用以下指令来设置前三个像素:

>>> 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()

下面的demo函数在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)