dancefloor-monorepo/python/server.py

55 lines
1.2 KiB
Python
Raw Permalink Normal View History

2020-04-26 19:08:59 +01:00
#!/usr/bin/python3
from flask import Flask, request
import threading
2020-04-26 19:08:59 +01:00
import serial
2020-04-28 14:02:30 +01:00
import time
2020-04-26 19:08:59 +01:00
app = Flask(__name__)
2020-04-28 13:58:16 +01:00
globals()['data'] = ""
globals()['lock'] = threading.Lock()
@app.route('/update', methods=['PUT'])
def update():
grid = request.json['data']
grid_string = prepare_grid(grid)
2020-04-28 13:58:16 +01:00
with globals()['lock']:
globals()['data'] = grid_string
return grid_string
def prepare_grid(grid):
# follow down up down down up down
HEIGHT = 5
WIDTH = 6
out = ""
for x in range(WIDTH):
for y in (range(0,HEIGHT,1) if x%3 == 1 else range(HEIGHT-1,-1,-1)):
for r in range(3):
out += hex(grid[x][y][r])[2:] + 'n'
out += 'l'
out += 'q'
return out
2020-04-28 13:55:26 +01:00
def serial_func():
with serial.Serial('/dev/ttyACM0', 9600, timeout=1) as ser:
2020-04-28 14:02:30 +01:00
while True:
with globals()['lock']:
if globals()['data'] != '':
2020-04-28 15:04:26 +01:00
t1 = time.time()
2020-04-28 14:03:17 +01:00
ser.write(bytes(globals()['data'], 'ascii'))
2020-04-28 15:04:26 +01:00
t2 = time.time()
print("time taken: " + str(t2-t1) + "s")
2020-04-28 14:02:30 +01:00
globals()['data'] = ''
time.sleep(0.1)
2020-04-28 13:55:26 +01:00
serial_thread = threading.Thread(target=serial_func)
serial_thread.start()
if __name__ == '__main__':
app.run(host='0.0.0.0')
2020-04-26 19:08:59 +01:00