stabel version
This commit is contained in:
parent
1c9a743ec3
commit
e0a1cdb693
Binary file not shown.
Binary file not shown.
Binary file not shown.
68
src/main.py
68
src/main.py
@ -1,5 +1,11 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
import time
|
import time
|
||||||
import json
|
import json
|
||||||
|
import sys
|
||||||
|
import threading
|
||||||
|
import subprocess
|
||||||
|
import numpy as np
|
||||||
import paho.mqtt.client as mqtt
|
import paho.mqtt.client as mqtt
|
||||||
|
|
||||||
from gps_hat import GPS_DATA
|
from gps_hat import GPS_DATA
|
||||||
@ -18,12 +24,20 @@ def update_hat_data():
|
|||||||
client.publish("MOBKOM/SENS/humidity", sens.humidity)
|
client.publish("MOBKOM/SENS/humidity", sens.humidity)
|
||||||
client.publish("MOBKOM/SENS/pressure", sens.pressure)
|
client.publish("MOBKOM/SENS/pressure", sens.pressure)
|
||||||
|
|
||||||
|
#client.publish("MOBKOM/IMU/pitch", sens.pitch, qos=0, retain=False)
|
||||||
|
#client.publish("MOBKOM/IMU/roll", sens.roll, qos=0, retain=False)
|
||||||
|
#client.publish("MOBKOM/IMU/yaw", sens.yaw, qos=0, retain=False)
|
||||||
|
|
||||||
client.publish("MOBKOM/IMU/pitch", sens.pitch)
|
client.publish("MOBKOM/IMU/pitch", sens.pitch)
|
||||||
client.publish("MOBKOM/IMU/roll", sens.roll)
|
client.publish("MOBKOM/IMU/roll", sens.roll)
|
||||||
client.publish("MOBKOM/IMU/yaw", sens.yaw)
|
client.publish("MOBKOM/IMU/yaw", sens.yaw)
|
||||||
client.publish("MOBKOM/IMU/x", sens.x)
|
#client.publish("MOBKOM/IMU/x", sens.x)
|
||||||
client.publish("MOBKOM/IMU/y", sens.y)
|
#client.publish("MOBKOM/IMU/y", sens.y)
|
||||||
client.publish("MOBKOM/IMU/z", sens.z)
|
#client.publish("MOBKOM/IMU/z", sens.z)
|
||||||
|
client.publish("MOBKOM/IMU/x", str(sens.x), qos=0, retain=False)
|
||||||
|
client.publish("MOBKOM/IMU/y", str(sens.y), qos=0, retain=False)
|
||||||
|
client.publish("MOBKOM/IMU/z", str(sens.z), qos=0, retain=False)
|
||||||
|
|
||||||
# print(sens.temp)
|
# print(sens.temp)
|
||||||
|
|
||||||
def encode_led_set_payload(payload):
|
def encode_led_set_payload(payload):
|
||||||
@ -114,29 +128,67 @@ def on_connect(client, userdata, flags, rc):
|
|||||||
client.subscribe("MOBKOM/LED/set_matrix")
|
client.subscribe("MOBKOM/LED/set_matrix")
|
||||||
client.subscribe("MOBKOM/LED/get_matrix")
|
client.subscribe("MOBKOM/LED/get_matrix")
|
||||||
|
|
||||||
|
def mqtt_loop_thread(run):
|
||||||
|
while not run.is_set():
|
||||||
|
client.loop()
|
||||||
|
time.sleep(0.01)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
# gps = GPS_DATA("/dev/ttyUSB0")
|
# gps = GPS_DATA("/dev/ttyUSB0")
|
||||||
|
update_timer = 0 # for mqtt update send
|
||||||
|
run = True # lauf variable für die while schleifen
|
||||||
|
|
||||||
gps = GPS_DATA("/dev/serial0")
|
gps = GPS_DATA("/dev/serial0")
|
||||||
sens = SENS_HAT()
|
sens = SENS_HAT()
|
||||||
|
|
||||||
|
sens.led_clear()
|
||||||
|
for _ in range(5):
|
||||||
|
sens.led_set_pixel(0, 0, 0, 0, 0)
|
||||||
|
time.sleep(0.5)
|
||||||
|
sens.led_set_pixel(0, 0, 255, 0, 0)
|
||||||
|
time.sleep(0.5)
|
||||||
|
|
||||||
client = mqtt.Client()
|
client = mqtt.Client()
|
||||||
client.on_connect = on_connect
|
client.on_connect = on_connect
|
||||||
client.on_message = on_message
|
client.on_message = on_message
|
||||||
client.connect("localhost", 1883)
|
client.connect("localhost", 1883)
|
||||||
|
|
||||||
|
sens.led_set_pixel(1, 0, 255, 0, 0)
|
||||||
|
|
||||||
|
stop_event = threading.Event()
|
||||||
|
t = threading.Thread(target=mqtt_loop_thread, args=(stop_event,))
|
||||||
|
t.start()
|
||||||
|
|
||||||
|
sens.led_matrix = np.array([[[255,0,0],[255,109,0],[255,219,0],[182,255,0],[73,255,0],[0,255,36],[0,255,146],[0,255,255]],
|
||||||
|
[[255,109,0],[255,219,0],[182,255,0],[73,255,0],[0,255,36],[0,255,146],[0,255,255],[0,146,255]],
|
||||||
|
[[255,219,0],[182,255,0],[73,255,0],[0,255,36],[0,255,146],[0,255,255],[0,146,255],[0,36,255]],
|
||||||
|
[[182,255,0],[73,255,0],[0,255,36],[0,255,146],[0,255,255],[0,146,255],[0,36,255],[73,0,255]],
|
||||||
|
[[73,255,0],[0,255,36],[0,255,146],[0,255,255],[0,146,255],[0,36,255],[73,0,255],[182,0,255]],
|
||||||
|
[[0,255,36],[0,255,146],[0,255,255],[0,146,255],[0,36,255],[73,0,255],[182,0,255],[255,0,219]],
|
||||||
|
[[0,255,146],[0,255,255],[0,146,255],[0,36,255],[73,0,255],[182,0,255],[255,0,219],[255,0,109]],
|
||||||
|
[[0,255,255],[0,146,255],[0,36,255],[73,0,255],[182,0,255],[255,0,219],[255,0,109],[255,0,0]]])
|
||||||
|
|
||||||
|
for y, row in enumerate(sens.led_matrix):
|
||||||
|
for x, col in enumerate(row):
|
||||||
|
sens.led_set_pixel(x, y, col[0], col[1], col[2])
|
||||||
|
|
||||||
update_timer = 0 # for mqtt update send
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
while True:
|
while run:
|
||||||
if update_timer + 2 < time.time():
|
if update_timer + 1 < time.time():
|
||||||
update_hat_data()
|
update_hat_data()
|
||||||
update_timer = time.time()
|
update_timer = time.time()
|
||||||
|
|
||||||
client.loop()
|
run = not sens.detect_long_press()
|
||||||
|
|
||||||
time.sleep(0.01)
|
time.sleep(0.01)
|
||||||
|
|
||||||
|
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
|
print("exit by user")
|
||||||
|
finally:
|
||||||
|
stop_event.set()
|
||||||
|
t.join() # warten bis der thread fertig ist
|
||||||
gps.ser.close()
|
gps.ser.close()
|
||||||
client.disconnect()
|
client.disconnect()
|
||||||
|
subprocess.run(["sudo", "shutdown", "-h", "0"])
|
||||||
|
sys.exit(0)
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
|
import time
|
||||||
from sense_hat import SenseHat
|
from sense_hat import SenseHat
|
||||||
|
|
||||||
class SENS_HAT:
|
class SENS_HAT:
|
||||||
@ -14,6 +15,8 @@ class SENS_HAT:
|
|||||||
y = 0
|
y = 0
|
||||||
z = 0
|
z = 0
|
||||||
|
|
||||||
|
time_down = 0
|
||||||
|
|
||||||
led_matrix = np.zeros((8, 8, 3), dtype=np.uint8)
|
led_matrix = np.zeros((8, 8, 3), dtype=np.uint8)
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@ -37,6 +40,8 @@ class SENS_HAT:
|
|||||||
|
|
||||||
def led_clear(self):
|
def led_clear(self):
|
||||||
self.sense.clear()
|
self.sense.clear()
|
||||||
|
self.led_matrix = np.zeros((8, 8, 3), dtype=np.uint8)
|
||||||
|
|
||||||
|
|
||||||
def led_set_pixel(self, x, y, r, g, b):
|
def led_set_pixel(self, x, y, r, g, b):
|
||||||
if not (0 <= x <= 7) or not (0 <= y <= 7):
|
if not (0 <= x <= 7) or not (0 <= y <= 7):
|
||||||
@ -61,8 +66,61 @@ class SENS_HAT:
|
|||||||
|
|
||||||
return pixel_data
|
return pixel_data
|
||||||
|
|
||||||
|
def detect_long_press(self):
|
||||||
|
"""
|
||||||
|
Returns True wenn der Taster für 4 Sekunden gedrückt werde.
|
||||||
|
"""
|
||||||
|
|
||||||
|
for event in self.sense.stick.get_events():
|
||||||
|
if event.direction == "middle":
|
||||||
|
if event.action == "pressed":
|
||||||
|
self.time_down = time.time()
|
||||||
|
|
||||||
|
|
||||||
|
if event.action == "released":
|
||||||
|
self.time_down = time.time()
|
||||||
|
for y, row in enumerate(self.led_matrix):
|
||||||
|
for x, col in enumerate(row):
|
||||||
|
self.sense.set_pixel(x, y, col[0], col[1], col[2])
|
||||||
|
|
||||||
|
|
||||||
|
if self.time_down + 0.5 < time.time():
|
||||||
|
self.sense.clear()
|
||||||
|
|
||||||
|
button_down_time = time.time() - self.time_down
|
||||||
|
if button_down_time >= 4:
|
||||||
|
print("shutdown")
|
||||||
|
return True
|
||||||
|
|
||||||
|
if button_down_time <= 7:
|
||||||
|
button_down_time_int = int(button_down_time * 2)
|
||||||
|
else:
|
||||||
|
button_down_time_int = 7
|
||||||
|
|
||||||
|
for y in range(8 - button_down_time_int):
|
||||||
|
self.sense.set_pixel(7, 7 - y, 255, 0, 0)
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
sens = SENS_HAT()
|
sens = SENS_HAT()
|
||||||
|
|
||||||
print(sens.led_matrix)
|
sens.led_matrix = np.array([[[255,0,0],[255,109,0],[255,219,0],[182,255,0],[73,255,0],[0,255,36],[0,255,146],[0,255,255]],
|
||||||
print(sens.led_matrix.tolist())
|
[[255,109,0],[255,219,0],[182,255,0],[73,255,0],[0,255,36],[0,255,146],[0,255,255],[0,146,255]],
|
||||||
|
[[255,219,0],[182,255,0],[73,255,0],[0,255,36],[0,255,146],[0,255,255],[0,146,255],[0,36,255]],
|
||||||
|
[[182,255,0],[73,255,0],[0,255,36],[0,255,146],[0,255,255],[0,146,255],[0,36,255],[73,0,255]],
|
||||||
|
[[73,255,0],[0,255,36],[0,255,146],[0,255,255],[0,146,255],[0,36,255],[73,0,255],[182,0,255]],
|
||||||
|
[[0,255,36],[0,255,146],[0,255,255],[0,146,255],[0,36,255],[73,0,255],[182,0,255],[255,0,219]],
|
||||||
|
[[0,255,146],[0,255,255],[0,146,255],[0,36,255],[73,0,255],[182,0,255],[255,0,219],[255,0,109]],
|
||||||
|
[[0,255,255],[0,146,255],[0,36,255],[73,0,255],[182,0,255],[255,0,219],[255,0,109],[255,0,0]]])
|
||||||
|
|
||||||
|
for y, row in enumerate(sens.led_matrix):
|
||||||
|
for x, col in enumerate(row):
|
||||||
|
sens.led_set_pixel(x, y, col[0], col[1], col[2])
|
||||||
|
|
||||||
|
# print(sens.led_matrix)
|
||||||
|
# print(sens.led_matrix.tolist())
|
||||||
|
|
||||||
|
while True:
|
||||||
|
sens.detect_long_press()
|
||||||
|
time.sleep(0.1)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user