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 WS2812GridErzeugt 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
| Typ | Name | Beschreibung |
|---|---|---|
machine.Pin | pin | Pin-Objekt, das mit DIN des Rasters verbunden ist, zum Beispiel Pin(6, Pin.OUT). |
int | width | Anzahl der Spalten, ein Vielfaches von 8. Standardwert 8. |
int | height | Anzahl der Zeilen, ein Vielfaches von 8. Standardwert 8. |
begin()returns NoneLöscht jedes Pixel und ruft show() auf, sodass das Raster dunkel startet.
ReturnsNichts.
setBrightness(brightness)returns NoneLegt 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
| Typ | Name | Beschreibung |
|---|---|---|
int | brightness | 0 (aus) bis 255 (volle Helligkeit). |
clear()returns NoneSchaltet 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 NoneSetzt 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
| Typ | Name | Beschreibung |
|---|---|---|
int | x | Spalte, 0 = links. |
int | y | Zeile, 0 = oben. |
int | r_or_color | Rot, 0 bis 255, oder eine gepackte Farbe 0x00RRGGBB, wenn g und b weggelassen werden. |
int | g | Grün, 0 bis 255. Optional. |
int | b | Blau, 0 bis 255. Optional. |
WS2812Grid.Color(r, g, b)returns intEine 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
| Typ | Name | Beschreibung |
|---|---|---|
int | r | Rot, 0 bis 255. |
int | g | Grün, 0 bis 255. |
int | b | Blau, 0 bis 255. |
show()returns NoneSchreibt 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.