diff --git a/clients/strip-rpi-udp/rpi_udp_strip.py b/clients/strip-rpi-udp/rpi_udp_strip.py new file mode 100644 index 0000000..bd0379d --- /dev/null +++ b/clients/strip-rpi-udp/rpi_udp_strip.py @@ -0,0 +1,30 @@ + +#!/usr/bin/env python +# -*- coding: utf-8 -*- +from util.RGBStrip import RGBStrip as RGBStrip +from util.UDPListner import UDPListner as UDPListner +import sys + +#use the BCM pin numbers here +rgbStrips = [ + #RGBStrip("Test Dahem", 4, 17 , 22), + RGBStrip("Unter Theke", 20, 16 , 21), + RGBStrip("Über Theke", 22, 13, 27), + RGBStrip("Fensterbank", 5, 26, 6) +] +# set remote address and port +remoteaddr = ("192.168.0.255",8002) + + +udplistners = [] +for rgbStrip in rgbStrips: + udplistners.append(UDPListner(rgbStrip,remoteaddr)) + +while True: + try: + for udplistner in udplistners: + udplistner.loop() + except KeyboardInterrupt: + for rgbStrip in rgbStrips: + rgbStrip.stop() + sys.exit() \ No newline at end of file diff --git a/clients/strip-rpi-udp/util/RGBStrip.py b/clients/strip-rpi-udp/util/RGBStrip.py new file mode 100644 index 0000000..a7956da --- /dev/null +++ b/clients/strip-rpi-udp/util/RGBStrip.py @@ -0,0 +1,72 @@ +try: + import RPi.GPIO as GPIO +except ImportError: + print("Install RPi.GPIO") +# setup PRi.GPIO +GPIO.setmode(GPIO.BCM) + +class RGBStrip: + STRIP_NAME = None + # GPIO PWM Frequenz + hertz = 100 + + RED_PIN = None + GREEN_PIN = None + BLUE_PIN = None + + RED_PWM = None + GREEN_PWM = None + BLUE_PWM = None + + + def __init__(self,STRIP_NAME,RED_PIN,GREEN_PIN,BLUE_PIN): + self.STRIP_NAME = STRIP_NAME + self.RED_PIN = RED_PIN + self.GREEN_PIN = GREEN_PIN + self.BLUE_PIN = BLUE_PIN + + # setup RED + GPIO.setup(self.RED_PIN, GPIO.OUT) + self.RED_PWM = GPIO.PWM(self.RED_PIN, self.hertz) + self.RED_PWM.start(0) + # setup GREEN + GPIO.setup(self.GREEN_PIN, GPIO.OUT) + self.GREEN_PWM = GPIO.PWM(self.GREEN_PIN, self.hertz) + self.GREEN_PWM.start(0) + # setup BLUE + GPIO.setup(self.BLUE_PIN, GPIO.OUT) + self.BLUE_PWM = GPIO.PWM(self.BLUE_PIN, self.hertz) + self.BLUE_PWM.start(0) + + def RGB(self,red,green,blue,brightness = 100): + #print(self.STRIP_NAME,red,green,blue) + if(red < 0): + red = 0 + if(red > 255): + red = 255 + + if(green < 0): + green = 0 + if(green > 255): + green = 255 + + if(blue < 0): + blue = 0 + if(blue > 255): + blue = 255 + + if(brightness < 0): + brightness = 0 + if(brightness > 100): + brightness = 100 + self.RED_PWM.ChangeDutyCycle(round(red/255*100,2)) + self.GREEN_PWM.ChangeDutyCycle(round(green/255*100,2)) + self.BLUE_PWM.ChangeDutyCycle(round(blue/255*100,2)) + + def stop(self): + self.RED_PWM.ChangeDutyCycle(0) + self.GREEN_PWM.ChangeDutyCycle(0) + self.BLUE_PWM.ChangeDutyCycle(0) + self.RED_PWM.stop() + self.GREEN_PWM.stop() + self.BLUE_PWM.stop() \ No newline at end of file diff --git a/clients/strip-rpi-udp/util/UDPListner.py b/clients/strip-rpi-udp/util/UDPListner.py new file mode 100644 index 0000000..d6bff19 --- /dev/null +++ b/clients/strip-rpi-udp/util/UDPListner.py @@ -0,0 +1,34 @@ +from random import randint +import time +import socket + +class UDPListner: + lastping = time.time()-1 + + def __init__(self, rgbStrip, remoteaddr): + self.rgbStrip = rgbStrip + self.remoteaddr = remoteaddr + self.localaddr = ("",randint(6000,7000)) + self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) + self.socket.settimeout(.002) + + def loop(self): + #print(time.time() - self.lastping) + if time.time() - self.lastping > .5 : + self.socket.sendto("s:ping".encode(), self.remoteaddr) + self.lastping = time.time() + try: + data, address = self.socket.recvfrom(4096) + data = data.decode('UTF-8') + #print(data[0],data[1]) + if data: + if data[0] is "s" and data[1] is "r": + self.socket.sendto(("r:1:"+self.rgbStrip.STRIP_NAME+":1").encode(), address) + if data[0] is "d": + self.rgbStrip.RGB(self.getRgbVal(data,1),self.getRgbVal(data,4),self.getRgbVal(data,7)) + except socket.timeout: + pass + + def getRgbVal(self,data,pos): + return 100*int(data[pos]) + 10*int(data[pos+1]) + int(data[pos+2]) \ No newline at end of file