build rpi gpio strip udp client
This commit is contained in:
parent
e787dde1bd
commit
ba8d17e519
30
clients/strip-rpi-udp/rpi_udp_strip.py
Normal file
30
clients/strip-rpi-udp/rpi_udp_strip.py
Normal file
@ -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()
|
72
clients/strip-rpi-udp/util/RGBStrip.py
Normal file
72
clients/strip-rpi-udp/util/RGBStrip.py
Normal file
@ -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()
|
34
clients/strip-rpi-udp/util/UDPListner.py
Normal file
34
clients/strip-rpi-udp/util/UDPListner.py
Normal file
@ -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])
|
Loading…
x
Reference in New Issue
Block a user