Mercurial > code > home > repos > homeauto
changeset 1071:9a8897fac103
neopixel lib change. factor out pwm setup and try another pwm rate
Ignore-this: 870f68d8297c6387be35b452058f0b97
darcs-hash:3d0aaef22b809485659f0ec829b340e3b312f863
author | drewp <drewp@bigasterisk.com> |
---|---|
date | Thu, 14 Apr 2016 00:13:06 -0700 |
parents | 1630e50d9842 |
children | 34a2afdcef2f |
files | service/piNode/config/main.n3 service/piNode/devices.py |
diffstat | 2 files changed, 29 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/service/piNode/config/main.n3 Thu Apr 14 00:11:12 2016 -0700 +++ b/service/piNode/config/main.n3 Thu Apr 14 00:13:06 2016 -0700 @@ -1,5 +1,6 @@ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix : <http://projects.bigasterisk.com/room/> . +@prefix order: <http://projects.bigasterisk.com/room/ledColorOrder/> . @prefix ha: <http://bigasterisk.com/homeauto/> . @prefix sensor: <http://bigasterisk.com/homeauto/sensor/> . @prefix houseLoc: <http://bigasterisk.com/homeauto/houseLoc/> . @@ -128,6 +129,7 @@ board5pin:GPIO18 :connectedTo :changingRgb . :changingRgb a :RgbPixels; + :colorOrder order:GRB; :pixels ( board5:rgb0 board5:rgb1
--- a/service/piNode/devices.py Thu Apr 14 00:11:12 2016 -0700 +++ b/service/piNode/devices.py Thu Apr 14 00:13:06 2016 -0700 @@ -9,9 +9,18 @@ pigpio = None import w1thermsensor try: - import NeoPixel + import neopixel except ImportError: - NeoPixel = None + neopixel = None + +def setupPwm(pi, pinNumber, hz=8000): + pi.set_mode(pinNumber, pigpio.OUTPUT) + # see http://abyz.co.uk/rpi/pigpio/cif.html#gpioCfgClock + # and http://abyz.co.uk/rpi/pigpio/cif.html#gpioSetPWMfrequency + actual = pi.set_PWM_frequency(pinNumber, hz) + if actual != hz: + raise ValueError('pwm actual=%s' % actual) + pi.set_PWM_dutycycle(pinNumber, 0) import sys @@ -192,9 +201,7 @@ def setup(self): for i in self.rgb: - self.pi.set_mode(i, pigpio.OUTPUT) - self.pi.set_PWM_frequency(i, 200) - self.pi.set_PWM_dutycycle(i, 0) + setupPwm(self.pi, i) def hostStatements(self): return [(self.uri, ROOM['color'], Literal(self.value))] @@ -350,9 +357,7 @@ self.value = 0 def setup(self): - self.pi.set_mode(self.pinNumber, pigpio.OUTPUT) - self.pi.set_PWM_frequency(self.pinNumber, 200) - self.pi.set_PWM_dutycycle(self.pinNumber, 0) + setupPwm(self.pi, self.pinNumber) def outputPatterns(self): return [(self.uri, ROOM['brightness'], None)] @@ -415,14 +420,25 @@ px = self.graph.value(self.uri, ROOM['pixels']) self.pixelUris = list(self.graph.items(px)) self.values = dict((uri, Literal('#000000')) for uri in self.pixelUris) + colorOrder, stripType = self.getColorOrder(self.graph, self.uri) self.replace = {'ledArray': 'leds_%s' % self.pinNumber, 'ledCount': len(self.pixelUris), 'pin': self.pinNumber, 'ledType': 'WS2812', + 'colorOrder': colorOrder } - self.neo = NeoPixel.NeoPixel(len(self.values)) + self.neo = neopixel.Adafruit_NeoPixel(len(self.values), pin=18, strip_type=stripType) self.neo.begin() - + + def getColorOrder(self, graph, uri): + colorOrder = graph.value(uri, ROOM['colorOrder'], + default=ROOM['ledColorOrder/RGB']) + head, tail = str(colorOrder).rsplit('/', 1) + if head != str(ROOM['ledColorOrder']): + raise NotImplementedError('%r colorOrder %r' % (uri, colorOrder)) + stripType = getattr(neopixel.ws, 'WS2811_STRIP_%s' % tail) + return colorOrder, stripType + def _rgbFromHex(self, h): rrggbb = h.lstrip('#') return [int(x, 16) for x in [rrggbb[0:2], rrggbb[2:4], rrggbb[4:6]]] @@ -435,7 +451,7 @@ if px not in self.values: raise ValueError(px) self.values[px] = Literal(color) - self.neo.setPixelColor(self.pixelUris.index(px), rgb[0], rgb[1], rgb[2]) + self.neo.setPixelColorRGB(self.pixelUris.index(px), rgb[0], rgb[1], rgb[2]) self.neo.show() def hostStatements(self):