From eae0d18bd12c717eadc17ad26d0bf46680d94faf Mon Sep 17 00:00:00 2001 From: Lucca Ketterer Date: Mon, 1 Jun 2020 00:12:32 +0200 Subject: [PATCH] restructure code base --- README | 4 +++ cavaSend.sh => client/cavaSend.sh | 0 client/client.py | 21 +++++++++++++++ config => client/config | 0 install_on_pi.sh | 2 ++ requirements | 5 ++++ server/color_mode.py | 30 +++++++++++++++++++++ server/led_controll.py | 45 +++++++++++++++++++++++++++++++ server/server.py | 21 +++++++++++++++ server/ws2801.py | 25 +++++++++++++++++ 10 files changed, 153 insertions(+) create mode 100644 README rename cavaSend.sh => client/cavaSend.sh (100%) create mode 100644 client/client.py rename config => client/config (100%) create mode 100755 install_on_pi.sh create mode 100644 requirements create mode 100644 server/color_mode.py create mode 100755 server/led_controll.py create mode 100644 server/server.py create mode 100644 server/ws2801.py diff --git a/README b/README new file mode 100644 index 0000000..d7a4234 --- /dev/null +++ b/README @@ -0,0 +1,4 @@ +SPI has to be enabled: + + sudo raspi-config -> Interface -> SPI + diff --git a/cavaSend.sh b/client/cavaSend.sh similarity index 100% rename from cavaSend.sh rename to client/cavaSend.sh diff --git a/client/client.py b/client/client.py new file mode 100644 index 0000000..22e04dd --- /dev/null +++ b/client/client.py @@ -0,0 +1,21 @@ +import socket + + +def client_program(): + host = "192.168.188.61" + port = 5000 + + client_socket = socket.socket() # instantiate + client_socket.connect((host, port)) # connect to the server + + message = input(" -> ") # take input + + while message.lower().strip() != 'bye': + client_socket.send(message.encode()) # send message + message = input(" -> ") # again take input + + client_socket.close() # close the connection + + +if __name__ == '__main__': + client_program() diff --git a/config b/client/config similarity index 100% rename from config rename to client/config diff --git a/install_on_pi.sh b/install_on_pi.sh new file mode 100755 index 0000000..21edaf3 --- /dev/null +++ b/install_on_pi.sh @@ -0,0 +1,2 @@ +scp server/* pi@192.168.188.61:~/led_controll/ +#ws2801.py --daemon diff --git a/requirements b/requirements new file mode 100644 index 0000000..c8cbd9b --- /dev/null +++ b/requirements @@ -0,0 +1,5 @@ +RPi.GPIO +Adafruit-WS2801 +Adafruit-GPIO + + diff --git a/server/color_mode.py b/server/color_mode.py new file mode 100644 index 0000000..31ee7e6 --- /dev/null +++ b/server/color_mode.py @@ -0,0 +1,30 @@ +def color_cycle(speed): + if int(speed) == 0: + delay = 0 + else: + delay = 1/int(speed) * 10 + + r = 255 + g = 0 + b = 0 + while True: + while r > 0: + r = r-1 + g = g+1 + set_color(r,g,b) + time.sleep(delay) + while g > 0: + g = g-1 + b = b+1 + set_color(r,g,b) + time.sleep(delay) + while b > 0: + b = b-1 + r = r+1 + set_color(r,g,b) + time.sleep(delay) + +def visualizer(): + for volume in sys.stdin: + volume = int(volume) + set_color(volume,0,0) \ No newline at end of file diff --git a/server/led_controll.py b/server/led_controll.py new file mode 100755 index 0000000..df9f8a9 --- /dev/null +++ b/server/led_controll.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +import sys +import getopt +import time + +import "ws2801" +import "server" + +def helpmenu(): + print("Options:") + print("-h show help") + print("-s color in hex") + print("-c colorcycle") + +def main(argv): + + if not sys.stdin.isatty(): + visualizer() + sys.exit() + + try: + opts, args = getopt.getopt(argv,"hds:c:r") + except getopt.GetoptError: + print("ws2801.py: invalid option") + print("Try 'ws2801.py -h' for help") + sys.exit(2) + + for opt, arg in opts: + if opt == "-h": + helpmenu() + sys.exit() + elif opt == "-s": + r,g,b = hex_to_rgb(arg) + set_color(r,g,b) + sys.exit() + elif opt == "-c": + color_cycle(arg) + elif opt == "-d": + start_server() + + helpmenu() + sys.exit() + +if __name__ == "__main__": + main(sys.argv[1:]) diff --git a/server/server.py b/server/server.py new file mode 100644 index 0000000..123a508 --- /dev/null +++ b/server/server.py @@ -0,0 +1,21 @@ +import socket + +def start_server(): + host = socket.gethostname() + port = 5000 + + server_socket = socket.socket() + server_socket.bind((host, port)) + + # configure how many client the server can listen simultaneously + server_socket.listen(1) + conn, address = server_socket.accept() # accept new connection + print("Connection from: " + str(address)) + while True: + # receive data stream. it won't accept data packet greater than 1024 bytes + data = conn.recv(1024).decode() + print(str(data)) + + + conn.close() # close the connection + diff --git a/server/ws2801.py b/server/ws2801.py new file mode 100644 index 0000000..bb03370 --- /dev/null +++ b/server/ws2801.py @@ -0,0 +1,25 @@ +import RPi.GPIO as GPIO +import Adafruit_WS2801 +import Adafruit_GPIO.SPI as SPI + +PIXEL_COUNT = 32 + +SPI_PORT = 0 +SPI_DEVICE = 0 +pixels = Adafruit_WS2801.WS2801Pixels(PIXEL_COUNT, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE), gpio=GPIO) + +def hex_to_rgb(hex): + r = int(hex[0:2],16) + g = int(hex[2:4],16) + b = int(hex[4:6],16) + print(r,g,b) + return r,g,b + +def set_color(r,g,b): + for i in range(pixels.count()): + pixels.set_pixel(i, Adafruit_WS2801.RGB_to_color(r,g,b)) + pixels.show() + +def clear_pixels(): + pixels.clear() + pixels.show()