NeoPixel Ring (WS2812) aansluiten op een Raspberry Pi

In de Raspberry Pi en Arduino wereld is het aansturen van leds zeer populair. De leds worden vaak als NeoPixel verkocht. Een NeoPixel bestaat uit een aantal adresseerbare WS2812 5050 RGB leds die worden verkocht als strip, ring of matrix. Iedere led kan individueel worden aangestuurd en van een RGB kleur worden voorzien.

De aansturing van de leds in de WS281x serie kan op een Raspberry Pi met behulp van pyhton en speciale hiervoor geschreven Adafruit library.

Componenten voor dit project

NeoPixel Ring 12x led ws2812 (link)
• Dupont verbindingkabels male/female (link)

Raspberry Pi Zero, Raspberry Pi 2, Raspberry Pi 3
Raspbian Jessie (2016-11-25 kernel 4.4)

NeoPixel aansluitschema

neopixel raspberry pi led ws281x

NeoPixel RPI functie RPI pin
PWR VCC 3.3V 1
GND GND 6
IN GPIO #18 12

Hoewel er op de NeoPixel wordt 5V wordt aangegeven volstaat 3.3v voor een 12 led versie.

Python library installeren

Om te kunnen communiceren met de NeoPixel hebben we een speciale Python library van Adafruit nodig, deze kun je 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

De library toevoegen 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 foto bovenaan deze pagina.

Python Script

Vanuit Python is het nu mogelijk om de leds individueel aan te sturen. Het onderstaande script genereert een lopende led, beginnend bij de eerste tot de laatste led, waarna de richt wordt omgekeerd. Na vijf maal wordt het script automatisch beëindigd.

# Demoscript NeoPixel Ring (12 led)
# https://raspberrytips.nl
import time
from neopixel import *
from random import randint
LEDS = 12 # Aantel LEDS
PIN = 18 # GPIO 18 / PIN 12
BRIGHTNESS = 55 # min 0 / max 255
KLEUR_R = randint(0,255)
KLEUR_G = randint(0,255)
KLEUR_B = randint(0,255)
def loopLed(ring, color, wait_ms):
for i in range(ring.numPixels()):
ring.setPixelColor(i,color)
ring.show()
time.sleep(wait_ms/1000.0)
ring.setPixelColor(i,0)
ring.setPixelColor(i-1,0)
for i in range(ring.numPixels()-1,-1,-1):
ring.setPixelColor(i,color)
ring.show()
time.sleep(wait_ms/1000.0)
ring.setPixelColor(i,0)
ring.setPixelColor(i+1,0)
def resetLeds(ring, color, wait_ms=10):
for i in range(ring.numPixels()):
ring.setPixelColor(i, color)
ring.show()
if __name__ == '__main__':
ring = Adafruit_NeoPixel(LEDS, PIN, 800000, 5, False, BRIGHTNESS)
ring.begin()
for t in range (0, 5, 1):
loopLed (ring,Color(KLEUR_G, KLEUR_R, KLEUR_B),100)
resetLeds (ring,Color(0,0,0))
view raw neopixelring.py hosted with ❤ by GitHub

Plaats het bovenstaande script op je Raspberry Pi met behulp van een editor, of download deze naar je Raspberry Pi met het commando:

wget https://raspberrytips.nl/neopixelring.py

Start het Python script met:

sudo python neopixelring.py

Na het starten van het script zal de laser in een oneindige loop 1 seconde aan/uit gaan.

neopixel ring raspberry pi

Aanpassingen script

LEDS pas deze parameter aan met het aantal leds dat je gaat gebruiken.
KLEUR_R, G ,B automatisch wordt een willekeurige gekozen, je kunt deze ook zelf selecteren door de juiste worden op te geven. Bijvoorbeeld voor rood:

KLEUR_R 255, KLEUR_G 0, KLEUR_B 0

.

4 gedachten over “NeoPixel Ring (WS2812) aansluiten op een Raspberry Pi”

  1. Update: nu kun je de library installeren met “pip install rpi-ws281x”. Er wordt geadviseerd om dit in een “virtual environment” te doen. De regel “from neopixel import *” moet “from rpi_ws281x import *” worden.

    Beantwoorden

Plaats een reactie