neopixel — contrôle des LED WS2812 / NeoPixel

Ce module fournit un pilote pour les bandeaux de LED WS2812 / NeoPixel. Le pilote s’appuie sur machine.bitstream() pour générer le signal au timing précis attendu par les LED, de sorte qu’il fonctionne sur tout port dont le module machine implémente bitstream.

L’application définit les données de pixels par affectation d’éléments ou via NeoPixel.fill(), puis appelle NeoPixel.write() pour mettre à jour le bandeau. Chaque pixel est exposé sous forme de tuple RGB ou RGBW dans l’ordre accepté par l’utilisateur ; le pilote gère l’ordre de transmission GRB(W) en interne.

Exemple

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)

Construit un objet NeoPixel pour un bandeau de LED connecté à pin.

  • pin est une instance de machine.Pin ; elle sera reconfigurée en sortie par le constructeur.

  • n est le nombre de LED dans le bandeau.

  • bpp est le nombre d’octets par pixel : 3 pour les LED RGB (telles que WS2812) et 4 pour les LED RGBW (telles que SK6812-RGBW).

  • timing sélectionne le timing des bits. 0 sélectionne le timing lent à 400 kHz, 1 sélectionne le timing standard à 800 kHz utilisé par la plupart des bandeaux modernes. Un 4-tuple (high_0, low_0, high_1, low_1) de durées en nanosecondes peut être passé à la place, sous la forme acceptée par machine.bitstream().

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

Attribut de classe qui associe l’ordre des canaux côté utilisateur à l’ordre de transmission. Vaut par défaut (1, 0, 2, 3), c.-à-d. que les tuples (R, G, B[, W]) fournis par l’utilisateur sont transmis sous la forme G R B [W]. Les sous-classes peuvent redéfinir ORDER pour prendre en charge des bandeaux avec un ordre de transmission différent.

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

Définit chaque pixel du bandeau à pixel, un tuple RGB ou RGBW d’entiers compris dans la plage 0-255.

__len__() int

Renvoie le nombre de LED dans le bandeau.

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

Définit le pixel à index sur val, un tuple RGB ou RGBW. Les données sont seulement mises en tampon ; appelez write() pour les envoyer au bandeau.

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

Renvoie le pixel situé à index depuis le tampon local sous forme de tuple RGB ou RGBW dans l’ordre des canaux côté utilisateur.

write() None

Transmet les données de pixels mises en tampon au bandeau à l’aide de machine.bitstream().