added button function
[led-wall.git] / server.py
1 import socket
2 import threading
3 import time
4 from neopixel import *
5 import RPi.GPIO as GPIO
6 import time
7
8 GPIO.setmode(GPIO.BCM)
9
10 GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)
11
12 LED_COUNT      = 1024      # Number of LED pixels.
13 LED_PIN        = 18      # GPIO pin connected to the pixels (18 uses PWM!).
14 #LED_PIN        = 10      # GPIO pin connected to the pixels (10 uses SPI /dev/spidev0.0).
15 LED_FREQ_HZ    = 800000  # LED signal frequency in hertz (usually 800khz)
16 LED_DMA        = 10      # DMA channel to use for generating signal (try 10)
17 LED_BRIGHTNESS = 128     # Set to 0 for darkest and 255 for brightest
18 LED_INVERT     = False   # True to invert the signal (when using NPN transistor level shift)
19 LED_CHANNEL    = 0       # set to '1' for GPIOs 13, 19, 41, 45 or 53
20
21 on = True
22
23 bind_ip = '0.0.0.0'
24 bind_port = 10000
25 strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS, LED_CHANNEL)
26 strip.begin()
27
28 server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
29 server.bind((bind_ip, bind_port))
30
31 print 'Listening on {}:{}'.format(bind_ip, bind_port)
32
33 pixels = []
34 for i in range(1024):
35   pixels.append(tuple((0,0,0)))
36
37 pixel_status = []
38 for i in range(1024):
39   pixel_status.append(0)
40
41 strip.show()
42 print "Starting Server"
43
44 def led_timeout(strip,pixel):
45   pixel_status[pixel] = time.time() + 30
46   for i in range(1024):
47     if (pixel_status[i] < time.time()) & (pixel_status[i] != 0):
48       strip.setPixelColor(i, Color(0,0,0))
49
50 while True:
51   input_state = GPIO.input(17)
52   if input_state == False:
53     if on == True:
54       on = False
55       for i in range(1024):
56         strip.setPixelColor(i, Color(0,0,0))
57       strip.show()
58     else:
59       on = True
60       for i in range(1024):
61         strip.setPixelColor(i, pixels[i])
62     time.sleep(0.5)
63
64   data, addr = server.recvfrom(1024)
65   if data:
66     elements=format(data).split(",")
67     if len(elements)>2:
68       print "Kill the sniffer and start over"
69       exit(0)
70     color=elements[0].split(":")
71     pixel_color=pixels[int(color[1])]
72     red=pixel_color[0]
73     green=pixel_color[1]
74     blue=pixel_color[2]
75     led_timeout(strip,int(color[1]))
76     if (int(elements[1])==0):
77       strip.setPixelColor(int(color[1]), Color(0,0,0))
78     if color[0]=="R":
79       strip.setPixelColor(int(color[1]), Color(green, int(elements[1]), blue))
80       pixels[int(color[1])] =(int(elements[1]),green,blue)
81     if color[0]=="G":
82       strip.setPixelColor(int(color[1]), Color(int(elements[1]), red, blue))
83       pixels[int(color[1])] =(red,int(elements[1]),blue)
84     if color[0]=="B":
85       strip.setPixelColor(int(color[1]), Color(green, red, int(elements[1])))
86       pixels[int(color[1])] =(red,green,int(elements[1]))
87
88   if on==True:  
89     strip.show()