neopixel --- 控制 WS2812 / NeoPixel LED

本模組提供 WS2812 / NeoPixel LED 燈條的驅動程式。此驅動程式依賴 machine.bitstream() 來產生 LED 所需的精確時序訊號,因此它可在任何 machine 模組實作了 bitstream 的連接埠上運作。

應用程式透過項目賦值或 NeoPixel.fill() 來設定像素資料,然後呼叫 NeoPixel.write() 來更新燈條。每個像素都以使用者所接受的順序,以 RGB 或 RGBW 元組形式呈現;驅動程式會在內部處理 GRB(W) 的線路順序。

範例::

import machine
import neopixel

# 32 LED strip connected to pin P7.
n = neopixel.NeoPixel(machine.Pin("P7"), 32)

# Draw a red gradient.
for i in range(32):
    n[i] = (i * 8, 0, 0)

# Update the strip.
n.write()

class NeoPixel

class neopixel.NeoPixel(pin: 'machine.Pin', n: int, bpp: int = 3, timing: int | tuple[int, int, int, int] = 1)

為連接到 pin 的 LED 燈條建構一個 NeoPixel 物件。

  • pin 是一個 machine.Pin 實例;建構子會將它重新設定為輸出。

  • n 是燈條中 LED 的數量。

  • bpp 是每個像素的位元組數:RGB LED(例如 WS2812)為 3,RGBW LED(例如 SK6812-RGBW)為 4

  • timing 選擇位元時序。0 選擇較慢的 400 kHz 時序,1 選擇大多數現代燈條所使用的標準 800 kHz 時序。也可以改為傳入一個以奈秒為單位的 4 元組 (high_0, low_0, high_1, low_1),其格式為 machine.bitstream() 所接受的形式。

ORDER: tuple[int, int, int, int]

將使用者面向的通道順序對應到線路順序的類別屬性。預設為 (1, 0, 2, 3),亦即使用者提供的 (R, G, B[, W]) 元組會以 G R B [W] 的順序傳輸。子類別可覆寫 ORDER 以支援具有不同線路順序的燈條。

fill(pixel: tuple[int, ...]) None

將燈條中的每個像素設定為 pixel,即一個整數值範圍在 0-255 之間的 RGB 或 RGBW 元組。

__len__() int

傳回燈條中 LED 的數量。

__setitem__(index: int, val: tuple[int, ...]) None

將位於 index 的像素設定為 val,即一個 RGB 或 RGBW 元組。資料只會被緩衝;請呼叫 write() 將其推送到燈條。

__getitem__(index: int) tuple[int, ...]

從本地緩衝區傳回位於 index 的像素,以使用者面向的通道順序的 RGB 或 RGBW 元組形式呈現。

write() None

使用 machine.bitstream() 將緩衝的像素資料傳輸到燈條。