led-server/rgbUtils/WS2812MasterStrip.py
2018-12-29 18:59:48 +01:00

46 lines
1.5 KiB
Python

# The Master Strip that can be used as multiple RGBStrips or later as one for Special Effects
# see https://github.com/mdaffin/PyNeoPixel for arduino ino
import struct
import serial
import time
class WS2812MasterStrip:
def __init__(self,port,LED_COUNT):
#serial connection
self.port = port
self.ser = serial.Serial(self.port, 115200, timeout=1)
self.command_count = 0
self.LED_COUNT = LED_COUNT
self.lock = False
self.setPixelColorRange(1,LED_COUNT, 0, 0, 0)
def setPixelColorRange(self, pixelstart, pixelstop, red, green, blue):
# locking while sending serial data, because multiple threads
# could try to send data at the same time
while self.lock:
#time.sleep(0.001)
return
self.lock = True
for pixel in [pixelstart,pixelstop]:
if pixelstart > self.LED_COUNT:
print("WS2812MasterStrip@"+self.port+" Strip is only "+self.LED_COUNT+" pixels long")
return
pixelstart = pixelstart - 1
pixelstop = pixelstop - 1
message = struct.pack('>BBBHHBBB', ord(':'), self.command_count, ord('r'), pixelstart, pixelstop, red, green, blue)
self.command_count += 1
if self.command_count >=255:
self.command_count = 0
#print(message)
self.ser.write(message)
response = self.ser.readline()
self.lock = False
#print(response)