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)