新像素

neopixel模块可让您通过micro:bit使用 NeoPixel (WS2812) 可单独寻址的 RGB 和 RGBW V2 LED 灯条。注意使用neopixel模块,需要单独导入:

import neopixel

笔记

根据我们的测试,Microbit NeoPixel 模块最多可以驱动大约 256 个 NeoPixel。任何超出此范围的内容,您都可能会遇到奇怪的错误和问题。micro:bit 只能 为外部设备提供 90mA V1 或 190mA V2,更多的 NeoPixels 需要一个带有公共接地的外部电源。

NeoPixels 设计为在 5V 下工作,但幸运的是它们仍然使用 BBC micro:bit 的 3V 电源工作。请注意,micro:bit 边缘连接器不应连接到任何提供 5V 的电源。

NeoPixels 是有趣的多色可编程 LED 灯条。该模块包含将它们插入 micro:bit 并创建时髦的显示、艺术和游戏的所有内容,如下所示的演示。

Neopixel flexible tile

图片归属:adafruit灵活的Neopixel矩阵

要连接一条 neopixels,您需要连接 micro:bit,如下所示(假设您想从 pin 0 驱动像素 - 您也可以将 neopixels 连接到 pin 1 和 2)。鳄鱼夹上的标签告诉您将另一端连接到新像素条上的位置。在某些新像素变体上,VDD 引脚可能被标记为其他东西 - 例如“V+”。在某些情况下,它可能被称为“+5V”,只有在您没有连接其他 5V 设备时才可以安全使用。

警告

不要使用 Microbit 上的 3v 连接器一次为超过 8 个 Neopixels 供电。

如果您希望使用超过 8 个 Neopixels,则必须为 Neopixel 电源引脚使用单独的 3v-5v 电源。

_images/neopixel-croc.png

班级

class neopixel.NeoPixel(pin, n)
class neopixel.NeoPixel(pin, n, bpp)

初始化 n 通过 pin 控制的新像素 LED条数 pin。的V2微:位也可以支持RGBW neopixels,所以第三个参数可以被传递到NeoPixel用于指示每像素(BPP)的字节数。对于 RGBW,这4不是 3 RGB 和 GRB的默认值。

每个像素由一个位置(从 0 开始)寻址。Neopixels 被赋予 RGB(红、绿、蓝)/RGBW(红、绿、蓝、白) V2 值在 0-255 之间作为一个元组。例如,在 RGB 中, (255,255,255)就是白色。在RGBW,(255,255,255,0)或者 (0,0,0,255)是白色。

clear()

清除所有像素。

show()
write()

显示像素。必须调用任何更新才能可见。对于 micro:bit V2, 还有一种额外的write()方法可用,相当于show()

fill(colour)

V2用给定的 RGB/RGBW 值为所有像素着色。的颜色参数应该是相同的长度每像素(BPP)的字节数的一个元组。例如fill((0,0,255))。与 结合使用 show() 以更新 Neopixels。

操作

写入颜色不会更新显示(show() 用于此目的)。

np[0] = (255, 0, 128)  # first element
np[-1] = (0, 255, 0)  # last element
np.show()  # only now will the updated value be shown

要读取特定像素的颜色,只需引用它。

print(np[0])

使用 Neopixels

与 Neopixels 交互,就像它们是元组列表一样。每个元组代表特定像素的 RGB(红色、绿色和蓝色)/RGBW(红色、绿色、蓝色和白色)混合颜色。RGBW 值的范围可以在 0 到 255 之间。

例如,在连接到 pin0 的条带上初始化 8 个 RGB neopixels 条带,如下所示:

import neopixel
np = neopixel.NeoPixel(pin0, 8)

通过索引像素来设置像素(就像使用 Python 列表一样)。例如,要将第一个像素设置为全亮红色,您可以使用:

np[0] = (255, 0, 0)

或者最后一个像素变成紫色:

np[-1] = (255, 0, 255)

通过索引获取像素的当前颜色值。例如,要打印第一个像素的 RGB 值,请使用:

print(np[0])

最后,要将新颜色数据推送到 Neopixel 条带,请使用 .show() 函数:

np.show()

如果什么都没有发生,那可能是因为你忘记了这最后一步..!

笔记

如果您在 Neopixel 条带上没有看到任何变化,请确保您show() 至少有某处,否则您的更新将不会显示。

例子

"""
    neopixel_random.py

    Repeatedly displays random colours onto the LED strip.
    This example requires a strip of 8 Neopixels (WS2812) connected to pin0.

"""
from microbit import *
import neopixel
from random import randint

# Setup the Neopixel strip on pin0 with a length of 8 pixels
np = neopixel.NeoPixel(pin0, 8)

while True:
    #Iterate over each LED in the strip

    for pixel_id in range(0, len(np)):
        red = randint(0, 60)
        green = randint(0, 60)
        blue = randint(0, 60)

        # Assign the current LED a random red, green and blue value between 0 and 60
        np[pixel_id] = (red, green, blue)

        # Display the current pixel data on the Neopixel strip
        np.show()
        sleep(100)