Bemerkung
Hallo, willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook! Tauchen Sie mit anderen Enthusiasten tiefer in Raspberry Pi, Arduino und ESP32 ein.
Warum beitreten?
Expertenunterstützung: Lösen Sie Probleme nach dem Kauf und technische Herausforderungen mit Hilfe unserer Community und unseres Teams.
Lernen & Teilen: Tauschen Sie Tipps und Tutorials aus, um Ihre Fähigkeiten zu verbessern.
Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und Sneak Peeks.
Sonderrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.
👉 Bereit, mit uns zu entdecken und zu gestalten? Klicken Sie auf [here] und treten Sie noch heute bei!
1.9 NeoPixel LED-Streifen
Einführung
In diesem Projekt lernen wir, wie man einen adressierbaren RGB-LED-Streifen (NeoPixel) über SPI-Kommunikation mit einem Raspberry Pi steuert. NeoPixel sind intelligente RGB-LEDs mit integrierten Treibern, sodass jede LED in einer Kette individuell gesteuert werden kann. Dieses Projekt demonstriert die grundlegende Farbsteuerung sowie das gleichzeitige Füllen des gesamten LED-Streifens mit verschiedenen Farben.
Benötigte Komponenten
Um dieses Projekt durchzuführen, benötigen Sie die folgenden Komponenten:
KOMPONENTE |
KAUFLINK |
|---|---|
- |
|
- |
|
Raspberry Pi |
- |
Verdrahtungsdiagramm
Einrichtungsschritte
Bevor Sie den Code ausführen, müssen Sie die erforderliche Bibliothek installieren:
Diese Bibliothek stellt die notwendigen Funktionen bereit, um NeoPixel-LEDs über SPI-Kommunikation zu steuern.
sudo pip3 install adafruit-circuitpython-neopixel-spi --break
Der gesamte Beispielcode in diesem Tutorial befindet sich im Verzeichnis
ai-lab-kit. Führen Sie die folgenden Schritte aus, um das Beispiel zu starten:cd ~/ai-lab-kit/python/ sudo python3 1.9_NeoPixel.py
Wenn dieses Skript ausgeführt wird, durchläuft das WS2812-LED-Modul drei Vollfarben:
Alle LEDs leuchten rot für eine Sekunde
Alle LEDs leuchten grün für eine Sekunde
Alle LEDs leuchten blau für eine Sekunde
Nach jeder Farbe werden die LEDs kurz ausgeschaltet, bevor der Zyklus erneut beginnt. Im Terminal wird während der Ausführung jeweils der aktuelle Farbname ausgegeben.
Code
Der folgende Python-Code steuert einen NeoPixel-LED-Streifen und wechselt zyklisch zwischen verschiedenen Farben:
import time # Used for delays
import board # Provides board-specific pin definitions
import neopixel_spi as neopixel # NeoPixel SPI driver
# Create an SPI object using the default SPI bus of the board
spi = board.SPI()
LED_COUNT = 12 # Number of LED pixels in the strip
PIXEL_ORDER = neopixel.GRB # Color order used by the LEDs (Green, Red, Blue)
# Create a NeoPixel strip object over SPI
# auto_write=False means we must call strip.show() to update the LEDs
strip = neopixel.NeoPixel_SPI(spi, LED_COUNT, pixel_order=PIXEL_ORDER, auto_write=False)
time.sleep(0.01) # Short delay to ensure the strip is ready
strip.fill(0) # Turn all pixels off (color value 0 = off)
strip.show() # Send the data to the LED strip
try:
while True:
print("RGB test")
# Display red on all LEDs
print("Red")
strip.fill((255, 0, 0)) # Full red, no green, no blue
strip.show()
time.sleep(1)
# Display green on all LEDs
print("Green")
strip.fill((0, 255, 0)) # Full green
strip.show()
time.sleep(1)
# Display blue on all LEDs
print("Blue")
strip.fill((0, 0, 255)) # Full blue
strip.show()
time.sleep(1)
# Turn all LEDs off
# print("Off for 10 seconds")
strip.fill((0, 0, 0)) # All channels 0 = off
strip.show()
time.sleep(1)
# Gracefully handle script termination (e.g., via KeyboardInterrupt)
except KeyboardInterrupt:
pass
Dieses Python-Skript demonstriert die grundlegende Steuerung eines 12-LED-WS2812-Rings mit dem NeoPixel-SPI-Treiber. Beim Ausführen passiert Folgendes:
Das Skript initialisiert die SPI-Schnittstelle und bereitet den WS2812-LED-Ring vor.
Alle LEDs wechseln im Abstand von einer Sekunde zwischen Rot, Grün und Blau.
Jede Farbänderung wird zu Debugzwecken in der Konsole ausgegeben.
Zwischen den Zyklen werden die LEDs kurz ausgeschaltet.
Das Programm läuft kontinuierlich weiter, bis es mit
Ctrl+Cunterbrochen wird.
Den Code verstehen
Bibliotheken importieren
Das Skript verwendet die Bibliothek
neopixel_spi, um WS2812-LEDs über die SPI-Schnittstelle des Raspberry Pi zu steuern.import time import board import neopixel_spi as neopixel
SPI- und NeoPixel-Konfiguration
Der SPI-Bus wird initialisiert und der NeoPixel-Ring mit 12 LEDs und der erforderlichen Farbreihenfolge (GRB) konfiguriert.
spi = board.SPI() LED_COUNT = 12 PIXEL_ORDER = neopixel.GRB strip = neopixel.NeoPixel_SPI( spi, LED_COUNT, pixel_order=PIXEL_ORDER, auto_write=False )
Initiales Zurücksetzen der LEDs
Eine kurze Verzögerung stellt sicher, dass die LEDs bereit sind, anschließend werden alle Pixel ausgeschaltet.
time.sleep(0.01) strip.fill(0) strip.show()
Hauptschleife für Farbwechsel
In der Endlosschleife wird der LED-Ring nacheinander vollständig mit Rot, Grün und Blau gefüllt. Jede Farbe wird eine Sekunde lang angezeigt.
while True: strip.fill((255, 0, 0)) # Red strip.show() time.sleep(1) # Similar code for green and blue...
5. Farbformat
Farben werden mit einem RGB-Tupel definiert:
(red, green, blue), wobei jeder Wert zwischen 0 und 255 liegt.strip.fill((0, 255, 0)) # Example: green
Fehlerbehebung
LED-Ring leuchtet nicht korrekt
Ursache: Falsche Verdrahtung oder unzureichende Stromversorgung
Lösung: Stellen Sie sicher, dass VCC mit 5V verbunden ist, GND gemeinsam genutzt wird und die Datenleitung mit DIN (manchmal als RGB bezeichnet) verbunden ist.
Falsche Farben
Ursache: Falsche Farbreihenfolge der LEDs
Lösung: Probieren Sie andere Pixelreihenfolgen wie
neopixel.RGBoderneopixel.GRBW.
SPI funktioniert nicht
Ursache: SPI ist deaktiviert oder es liegt ein Hardwarekonflikt vor
Lösung: Aktivieren Sie SPI über
sudo raspi-config.
Bibliothek kann nicht importiert werden
Ursache: Fehlende Abhängigkeit
Lösung:
sudo pip3 install adafruit-circuitpython-neopixel-spi --break
Erweiterungsideen
Sie können einzelne LEDs mit unterschiedlichen Farben beleuchten, um einfache Muster zu erstellen oder bestimmte Positionen auf dem Ring hervorzuheben.
strip[0] = (255, 0, 0) strip.show()
Durch zyklisches Berechnen von RGB-Werten können Sie einen fließenden Regenbogeneffekt über alle LEDs erzeugen.
strip.fill(wheel(50)) strip.show()
Erstellen Sie einen Lauflichteffekt, indem immer nur eine LED eingeschaltet wird, während die anderen ausgeschaltet bleiben.
strip[i] = (0, 255, 0) strip.show()
Sie können die Helligkeit des gesamten LED-Rings anpassen, indem Sie das Attribut
brightnessverändern.strip.brightness = 0.3
Fazit
Dieses Beispiel zeigt, wie ein WS2812-LED-Ring mit 12 LEDs über SPI auf einem Raspberry Pi gesteuert werden kann. Mit nur wenigen Codezeilen lassen sich Farben wechseln, Animationen erstellen und einzelne LEDs gezielt steuern. Dadurch eignen sich WS2812-Ringe hervorragend für Statusanzeigen, Robotikprojekte, dekorative Effekte und interaktive Visualisierungen.