-
Notifications
You must be signed in to change notification settings - Fork 0
/
gui.py
89 lines (74 loc) · 1.91 KB
/
gui.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/usr/bin/env python3
import argparse
import os
from os import path
import re
import serial # pip3 install pyserial
import serial.tools.list_ports
import sys
import tkinter as tk
def find_ports():
"""
Return list a avaible ports.
"""
avaible_ports = []
ports = list(serial.tools.list_ports.comports())
for port in ports:
avaible_ports.append(port[0]) # /dev/ttyACM0
return avaible_ports
def find_numbers(str):
"""
Extract all the numbers from the given string.
Return list.
"""
numbers = re.findall(r'[-+]?[0-9]*\.?[0-9]+', str)
return numbers
def read_serial():
"""
Read Serial port.
Return average temp.
"""
try:
incoming_data = ser.readline()[:-2].decode('ascii')
numbers = find_numbers(incoming_data)
average_temp = numbers[2]
except KeyboardInterrupt:
print('CTRL-C detected.')
ser.close()
exit(0)
return average_temp
def idle(parent,canvas):
"""
Update number on canvas.
"""
data = str(read_serial())
canvas.itemconfigure("text",text="+"+data+"°C")
canvas.update()
parent.after_idle(idle,parent,canvas)
# Check command line arguments
if (len(sys.argv) != 3):
print("command line: gui.py port baudrate") #/dev/ttyUSB0 4800
sys.exit()
port = sys.argv[1]
baudrate = int(sys.argv[2])
# kas port on olemas????
if not path.exists(port):
print("{} not avaible. Try the ones below:". format(port))
print(find_ports())
exit(0)
print("Port: {}".format(port))
print("Baudrate: {}".format(baudrate))
# Open serial port
ser = serial.Serial(port, baudrate)
# set up GUI
appname = "Lämmämõõdusk"
WINDOW = 200 # window size
window = tk.Tk()
window.title(appname)
window.bind('q', 'exit')
canvas = tk.Canvas(window, width=2*WINDOW, height=WINDOW, background='white')
canvas.create_text(WINDOW,.5*WINDOW,text="0°C",font=("Ubuntu", 36),tags="text",fill="#525252")
canvas.pack()
# Loop
window.after(100,idle,window,canvas)
window.mainloop()