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