Zum Hauptinhalt springen

Animationen

Was dieses Beispiel zeigt​

Wie Sie das gesamte Raster animieren, indem Sie es Bild für Bild neu zeichnen. Das Beispiel führt zwei Animationen in einer Endlosschleife aus: einen Zeilendurchlauf, der von oben nach unten jeweils eine Zeile zum Leuchten bringt, und einen Regenbogen, der jedes Pixel durch ein Farbrad laufen lässt, wobei jedes Pixel gegenüber seinem Nachbarn ein Stück weiter ist.

Verbinden Sie VCC mit 5 V, GND mit GND und DIN mit Pin 6 Ihres Controllers, oder ändern Sie die Zahl in Pin(6, Pin.OUT) auf den von Ihnen verwendeten Pin.

Der Beispielcode​

Dies ist Animations.py aus dem festgelegten Modul, genau in der ausgelieferten Form.

# FILE: Animations.py
# AUTHOR: Josip Šimun Kuči @ Soldered
# BRIEF: Demonstrates row sweep and colour-cycle animations on the
# Soldered 8x8 WS2812B LED grid.
# Connect the grid data line to the pin defined below.
# WORKS WITH: Soldered WS2812B LED Grid: www.soldered.com
# LAST UPDATED: 2026-05-12

from machine import Pin
from WS2812Grid import WS2812Grid
import time

PIN = Pin(6, Pin.OUT)

grid = WS2812Grid(PIN)
grid.begin()
grid.setBrightness(40)


# ---------------------------------------------------------------------------
# Helpers
# ---------------------------------------------------------------------------

def colorWheel(pos):
"""Simple HSV-to-RGB wheel: hue 0-255."""
pos = 255 - pos
if pos < 85:
return WS2812Grid.Color(255 - pos * 3, 0, pos * 3)
if pos < 170:
pos -= 85
return WS2812Grid.Color(0, pos * 3, 255 - pos * 3)
pos -= 170
return WS2812Grid.Color(pos * 3, 255 - pos * 3, 0)


# ---------------------------------------------------------------------------
# Animations
# ---------------------------------------------------------------------------

def rowSweep():
for y in range(8):
grid.clear()
for x in range(8):
grid.setPixel(x, y, 0, 180, 255)
grid.show()
time.sleep_ms(80)


def rainbowGrid(cycles):
for _ in range(cycles):
for hue in range(256):
for y in range(8):
for x in range(8):
offset = (x + y * 2) & 0xFF
grid.setPixel(x, y, colorWheel((hue + offset) & 0xFF))
grid.show()
time.sleep_ms(10)


# ---------------------------------------------------------------------------
# Main loop
# ---------------------------------------------------------------------------

while True:
rowSweep()
time.sleep_ms(200)
rainbowGrid(2)
time.sleep_ms(200)

🔗Vollständiges Beispiel öffnen

Examples/Animations.py im Commit db93fa3

→

Erwartetes Ergebnis: Das Beispiel gibt nichts in der Shell aus. Auf dem Raster leuchtet bei einer Helligkeit von 40 von 255 nacheinander jede Zeile 80 ms lang in der Farbe (0, 180, 255), von der obersten bis zur untersten Zeile. Nach einer Pause von 200 ms durchläuft der Regenbogen die 256 Farben des Rades zweimal, 10 ms pro Schritt, wobei jedes Pixel um seine Spalte plus das Doppelte seiner Zeile auf dem Rad versetzt ist. Nach einer weiteren Pause von 200 ms beginnt die Schleife von vorn, bis Sie das Skript beenden.

Verwendete Funktionen​

WS2812Grid(pin, width=8, height=8)returns WS2812Grid

Erzeugt den Raster-Driver: ein neopixel.NeoPixel-Objekt für width x height LEDs am angegebenen Pin. Ein Raster hat 8 x 8, das ist der Standardwert. Die Helligkeit beginnt bei 255.

ReturnsDas Raster-Objekt.

Parameter

TypNameBeschreibung
machine.PinpinPin-Objekt, das mit DIN des Rasters verbunden ist, zum Beispiel Pin(6, Pin.OUT).
intwidthAnzahl der Spalten, ein Vielfaches von 8. Standardwert 8.
intheightAnzahl der Zeilen, ein Vielfaches von 8. Standardwert 8.
begin()returns None

Löscht jedes Pixel und ruft show() auf, sodass das Raster dunkel startet.

ReturnsNichts.

setBrightness(brightness)returns None

Legt die Helligkeitsskala fest. Werte außerhalb von 0 bis 255 werden begrenzt. Sie wird beim Setzen eines Pixels angewendet, rufen Sie sie also vor setPixel() oder fill() auf; bereits gesetzte Pixel behalten ihre Helligkeit.

ReturnsNichts.

Parameter

TypNameBeschreibung
intbrightness0 (aus) bis 255 (volle Helligkeit).
clear()returns None

Schaltet jede LED im Puffer aus. Sie ruft show() nicht auf: Die LEDs werden erst beim nächsten show() dunkel. Der Zeilendurchlauf nutzt sie, um die vorherige Zeile zu löschen, bevor die nächste gezeichnet wird.

ReturnsNichts.

setPixel(x, y, r_or_color, g=None, b=None)returns None

Setzt eine LED anhand ihrer Position im Raster. Der Zeilendurchlauf übergibt r, g und b als drei Werte; der Regenbogen übergibt eine gepackte Farbe aus colorWheel() und lässt g und b weg. Die Farbe wird mit der Helligkeit skaliert. Eine Position außerhalb des Rasters wird ignoriert. Rufen Sie anschließend show() auf, um die Änderung an die LEDs zu senden.

ReturnsNichts.

Parameter

TypNameBeschreibung
intxSpalte, 0 = links.
intyZeile, 0 = oben.
intr_or_colorRot, 0 bis 255, oder eine gepackte Farbe 0x00RRGGBB, wenn g und b weggelassen werden.
intgGrün, 0 bis 255. Optional.
intbBlau, 0 bis 255. Optional.
WS2812Grid.Color(r, g, b)returns int

Eine statische Methode, die Rot, Grün und Blau zu einer Ganzzahl packt. Die Hilfsfunktion colorWheel() des Beispiels nutzt sie, um eine Position auf dem Rad in eine Farbe umzuwandeln.

ReturnsDie gepackte Farbe, (r << 16) | (g << 8) | b.

Parameter

TypNameBeschreibung
intrRot, 0 bis 255.
intgGrün, 0 bis 255.
intbBlau, 0 bis 255.
show()returns None

Schreibt die gepufferten Farben auf die LEDs.

ReturnsNichts.

Alles zusammen​

Jedes Bild wird auf dieselbe Weise gezeichnet: Ändern Sie die Pixel im Puffer mit clear() und setPixel(), rufen Sie dann einmal show() auf und warten Sie vor dem nächsten Bild. Das time.sleep_ms() nach jedem show() bestimmt die Geschwindigkeit. Ändern Sie daher die Werte 80 und 10, um den Zeilendurchlauf oder den Regenbogen schneller oder langsamer zu machen. colorWheel() und die beiden Animationsfunktionen gehören zum Beispiel, nicht zum Modul.