Bij Raspberry Pi gebruikers is het aansturen van RGB leds zeer populair, het aansturen van leds is direct mogelijk vanaf de GPIO. Kwalitatief goede led zijn de WS2812 5050 RGB welke ook als NeoPixel worden verkocht. Een NeoPixel bestaat uit een aantal adresseerbare WS2812 5050 RGB leds die worden verkocht in de vorm van een strip, ring of matrix. Iedere led kan individueel worden aangestuurd en van een RGB kleur worden voorzien. In dit stappen plan gebruiken we een NeoPixel stick met 8 leds.
De aansturing van de leds in de WS281x serie kan op een Raspberry Pi met behulp van python en een speciale python library.
Componenten voor dit project
• NeoPixel Stick 8x led ws2812 (link)
• Dupont verbindingkabels male/female (link)
Raspberry Pi Zero
Raspbian Jessie (2016-05-27 kernel 4.4.13)
NeoPixel Stick aansluitschema
NeoPixel | Raspberry Pi pin | Functie |
---|---|---|
5V | 1 | 3.3v |
GND | 6 | Ground |
(D)IN | 12 | GPIO 28 |
Hoewel er op de NeoPixel 5V wordt aangegeven volstaat 3.3v voor de versie met 8 leds.
Python library installeren
Om te kunnen communiceren met de NeoPixel hebben we een speciale Python library nodig, deze kun je vanaf Github installeren met behulp van de onderstaande stappen:
sudo apt-get install build-essential python-dev git scons swig
Hierna installeren we ws281x ondersteuning:
git clone https://github.com/jgarff/rpi_ws281x.git
cd rpi_ws281x
Compileer de library:
scons
Voeg de library toe aan Python:
cd python && sudo python setup.py install
In de library is een test script aanwezig om de werking van de leds te testen, die vind je terug in de rpi_ws281x map en kun je starten met behulp van het commando:
cd ~/rpi_ws281x && sudo ./test
De leds gaan nu in een willekeurige kleur onafhankelijk van elkaar knipperen, zie bovenaan deze pagina.
NeoPixel Stick Python Script
Vanuit Python is het nu mogelijk om de leds individueel aan te sturen. Het onderstaande script genereert een Knight Rider effect. De leds zullen rood oplichten, beginnend bij de eerste tot de laatste led, waarna de richting wordt omgekeerd. Na vijf maal heen en weer wordt het script automatisch beëindigd.
import time from neopixel import * from random import randint LEDS = 8 # Aantel LEDS PIN = 18 # GPIO 18 / PIN 12 BRIGHTNESS = 55 # min 0 / max 255 KLEUR_R = 0 KLEUR_G = 0 KLEUR_B = 255 # rood waarde def loopLed(stick, color, wait_ms): for i in range(stick.numPixels()): stick.setPixelColor(i,color) stick.show() time.sleep(wait_ms/1000.0) stick.setPixelColor(i,0) stick.setPixelColor(i-1,0) for i in range(stick.numPixels()-1,-1,-1): stick.setPixelColor(i,color) stick.show() time.sleep(wait_ms/1000.0) stick.setPixelColor(i,0) stick.setPixelColor(i+1,0) def resetLeds(stick, color, wait_ms=10): for i in range(stick.numPixels()): stick.setPixelColor(i, color) stick.show() if __name__ == '__main__': stick = Adafruit_NeoPixel(LEDS, PIN, 800000, 5, False, BRIGHTNESS) stick.begin() for t in range (0, 5, 1): loopLed (stick,Color(KLEUR_G, KLEUR_R, KLEUR_B),100) resetLeds (stick,Color(0,0,0))
Kopieer het bovenstaande Python script en plaats de code in het bestand, gebruik hiervoor nano
of een andere editor. In het onderstaande commando gebruiken we de nano editor en geven het script de naam stick.py.
sudo nano stick.py
Kopieer het script in de editor en sla de wijzigingen op (ctrl + x, y, enter).
Je kunt het python script ook downloaden met:
wget https://raspberrytips.nl/files/stick.py
Hierna kun je het script uitvoeren met:
sudo python stick.py
Aanpassingen script
• LEDS
pas deze parameter aan met het aantal leds dat je gebruikt.
• KLEUR_R, G ,B
Je kunt de kleur ook zelf selecteren door de juiste worden op te geven. Bijvoorbeeld voor groen:
KLEUR_R 0, KLEUR_G 255, KLEUR_B 0
.
Top, hier was ik naar op zoek.
Een punt van zorg: bij
from neopixel import *
komt de melding naar boven:
‘module’ object has no attribute ‘WS2811_STRIP_RGB’
Hoe kunnen we dat omzeilen; enig idee?