Ich habe in meinen Ausbildungsbetrieb die Aufgabe bekommen, zusammen in einer Gruppe, eine Art Anwesenheitstafel zu bauen.
Um auf der Tafel angezeigt zu werden wird mittels Fingerabdruckleser die Identifikation des Benutzer bestimmt.
Es sollen die Grundrisse der Schreibtische angezeigt werden, und bei Anwesenheits soll der passende Schreibtisch mit einer Farbe gefüllt. (Gruen bspw.)(Später auch ein Foto und weitere Daten)
Uns wird völlig offen gelassen, wie wir die Aufgabe lösen. Wir haben uns dann dazu entschlossen es mit Python auf einen Raspberry Pi zu probieren.
Eine Konsolenvariante, um zu schauen ob die Serielle Verbindung zu den Fingerabdruckscanner (Hängt an einen Arduino) besteht, funktioniert wie erwartet.
Zu meinen Problem:
Ich bekomme es hin, dass die Grundrisse der Schreibtische gezeichnet werden. Das erstmalige lesen eines Fingerabdrucks färbt auch den entsprechende Tisch korrekt um. Allerdings hat danach jeder weiterer Einleseversuch keinen Erfolg mehr.
So sieht es nachdem der erste Abdruck gescannt wurde aus.
https://imgur.com/a/Tsc42gw
Code: Alles auswählen
from Tkinter import *
import MySQLdb
import serial
#db = MySQLdb.connect(host="localhost", user="SUED3", passwd="SUED3", db="anwesenheitstafel")
#cursor = db.cursor()
def drawTables():
#Serielle Daten zur Kommunikation zwischen Arduino und dem Raspberry Pi 3
ser = serial.Serial(port = '/dev/ttyACM0', baudrate = 9600, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=None)
#Einlesen der Seriellen Daten (Fingerabdruck ID)
serialData = ser.readline().decode("UTF-8").split()
fid = int(serialData[0])
##### TESTWEISE OHNE SQL ABFRAGE
#Tisch einfaerben
if fid == 19:
status[15] = 1
if fid == 25:
status[12] = 1
if fid == 20:
status[2] = 1
#Banner
canvas.create_rectangle(100, 50, 980, 250, tags='banner')
#Ausbildertische
canvas.create_rectangle(100, 300, 400, 400, fill='yellow', tags='tisch')
canvas.create_rectangle(680, 300, 980, 400, fill='yellow', tags='tisch')
#Tische richtig anordnen
for i in range(24):
if status[i] == 0:
color = 'white'
else:
color = 'green'
if i < 6:
#Drittes Lehrjahr Tisch 7-12
canvas.create_rectangle(xAlign, yAlign + (i*h), xAlign+w, yAlign + (i*h) + h, fill=color, tags='tisch')
elif i< 12:
#Drittes Lehrjahr Tisch 1-6
canvas.create_rectangle(xAlign+w, yAlign + ((i-6)*h), xAlign+(2*w), yAlign + ((i-6)*h) +h, fill=color, tags='tisch')
elif i <18:
#Zweites Lehrjahr Tisch 7-12
canvas.create_rectangle((1080-xAlign)-(2*w), yAlign + ((i-12)*h), (1080-xAlign)-w, yAlign + ((i-12)*h) +h, fill=color, tags='tisch')
else:
#Zweites Lehrjahr Tisch 1-6
canvas.create_rectangle((1080-xAlign)-(w), yAlign + ((i-18)*h), (1080-xAlign), yAlign + ((i-18)*h) +h, fill=color, tags='tisch')
# 0:Abwesend, 1:Anwesend
status = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
root = Tk()
root.title("Anwesenheitstafel SUED3")
canvas = Canvas(root, width = 1080, heigh = 1920)
canvas.pack()
#Abstand zu den Seiten
xAlign = 150
yAlign = 400
#Masse der Tische
w = 100
h = 220
root.after(100, drawTables())
root.mainloop()
Die funktionierede Konsolenversion
Code: Alles auswählen
import MySQLdb
import serial
from colorama import init, Fore, Style
init()
#Serielle Daten zur Kommunikation zwischen Arduino und dem Raspberry Pi 3
ser = serial.Serial(port = '/dev/ttyACM0', baudrate = 9600, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=None)
#MySQL
db = MySQLdb.connect(host="localhost", user="SUED3", passwd="SUED3", db="anwesenheitstafel")
cursor = db.cursor()
print ("connected to: " + ser.portstr)
while True:
serialData = ser.readline().decode("UTF-8").split()
SQL_query = "SELECT * FROM USER WHERE FID='{fingerid}' OR FID2='{fingerid}'"
SQL_query = SQL_query.format(fingerid=serialData[0])
cursor.execute(SQL_query)
for row in cursor.fetchall():
# row 0: UID, 1: Name, 2: Vorname, 3: Gruppe, 4: Geburtsdatum, 5: Fotopfad, 6: FID1, 7: FID8, 8: Status
print str(serialData[0] + " " + row[2] + " " + str(row[8]) + " " + str(row[3]) + " "),
userid = int(row[0])
fingerid = int(row[6])
if str(serialData[0]) == str(row[6]):
print "Finger 1",
else:
print "Finger 2",
print (" Confidence: "),
if int(serialData[1]) <= 150:
print (Fore.RED),
elif int(serialData[1]) <= 400:
print (Fore.YELLOW),
else:
print (Fore.GREEN),
print (serialData[1] + Style.RESET_ALL)
cursor.execute("INSERT INTO LOGIN (ID,UID,FID,CONFIDENCE,TIME) VALUES (NULL,%s,%s,%s,CURRENT_TIMESTAMP)",(userid,serialData[0],serialData[1],))
db.commit()
cursor.close()
db.close()
ser.close()
Mit freundlichen Grüßen
Jan