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