467cf0f1c56c5704a35ad807fbf3a69136b4662e
[led-wall.git] / server.py
1 import socket
2 import threading
3 import time
4 from neopixel import *
5
6 LED_COUNT      = 1024      # Number of LED pixels.
7 LED_PIN        = 18      # GPIO pin connected to the pixels (18 uses PWM!).
8 #LED_PIN        = 10      # GPIO pin connected to the pixels (10 uses SPI /dev/spidev0.0).
9 LED_FREQ_HZ    = 800000  # LED signal frequency in hertz (usually 800khz)
10 LED_DMA        = 10      # DMA channel to use for generating signal (try 10)
11 LED_BRIGHTNESS = 128     # Set to 0 for darkest and 255 for brightest
12 LED_INVERT     = False   # True to invert the signal (when using NPN transistor level shift)
13 LED_CHANNEL    = 0       # set to '1' for GPIOs 13, 19, 41, 45 or 53
14
15 bind_ip = '0.0.0.0'
16 bind_port = 10000
17 strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS, LED_CHANNEL)
18 strip.begin()
19
20 server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
21 server.bind((bind_ip, bind_port))
22
23 print 'Listening on {}:{}'.format(bind_ip, bind_port)
24
25 pixels = []
26 for i in range(1024):
27   pixels.append(tuple((0,0,0)))
28
29 pixel_status = []
30 for i in range(1024):
31   pixel_status.append(0)
32
33 strip.show()
34
35 print "Starting Server"
36
37 def led_timeout(strip,pixel):
38   pixel_status[pixel] = time.time() + 30
39   for i in range(1024):
40     if (pixel_status[i] < time.time()) & (pixel_status[i] != 0):
41       strip.setPixelColor(i, Color(0,0,0))
42
43 while True:
44   data, addr = server.recvfrom(1024)
45   if data:
46     #print 'Received {}'.format(data)
47     elements=format(data).split(",")
48     color=elements[0].split(":")
49     pixel_color=pixels[int(color[1])]
50     red=pixel_color[0]
51     green=pixel_color[1]
52     blue=pixel_color[2]
53     led_timeout(strip,int(color[1]))
54     if (int(elements[1])==0):
55       strip.setPixelColor(int(color[1]), Color(0,0,0))
56     if color[0]=="R":
57       strip.setPixelColor(int(color[1]), Color(green, int(elements[1]), blue))
58       pixels[int(color[1])] =(int(elements[1]),green,blue)
59     if color[0]=="G":
60       strip.setPixelColor(int(color[1]), Color(int(elements[1]), red, blue))
61       pixels[int(color[1])] =(red,int(elements[1]),blue)
62     if color[0]=="B":
63       strip.setPixelColor(int(color[1]), Color(green, red, int(elements[1])))
64       pixels[int(color[1])] =(red,green,int(elements[1]))
65     strip.show()