Hallo zusammen,
ich bin aktuell dabei ein Messgerät mit nem Raspberry Pi 3 und Python 3 aufzusetzen.
Es funktioniert eigentlich alles. Ich habe allerdings Probleme damit, wenn man USB erst nachträglich anschließt oder entfernt.
Beim ersten Mal läuft das Gerät unter "ttyUSB0". Zieht man den USB Stecker und schließt ihn neu an, ist das Device auf einmal "ttyUSB1".
Ich habe bei Stackoverflow eine Anleitung gefunden, wie man ein Gerät unter einem Namen hinterlegen kann. Ich kann zwar die Verbindung darüber aufbauen, aber es werden keine Werte empfangen:
# ttyUSB0: Serial<id=0x75478a10, open=True>(port='/dev/ttyUSB0', baudrate=38400, bytesize=8, parity='N', stopbits=1, timeout=1, xonxoff=False, rtscts=False, dsrdtr=False)
# mesgeraetUSB: Serial<id=0x74af25d0, open=True>(port='/dev/messgeraetUSB', baudrate=38400, bytesize=8, parity='N', stopbits=1, timeout=1, xonxoff=False, rtscts=False, dsrdtr=False)
Nachfolgend mein Programmcode (ohne UI):
#!/user/bin/python3
# Programm zur Ausgabe von Messdaten
from tkinter import *
from PIL import Image
import tkinter.font as tkf
import serial
import os
import threading
# Aufbau UI wird in dem Beispiel ausgelassen
# Prüfen, ob das USB Gerät angeschlossen wurde
def usb_exists():
try:
os.stat("/dev/messgeraetUSB")
except OSError:
return False
return True
# Ausschaltfunktion
def shutdown():
print("System wird heruntergefahren")
#os.system("sudo shutdown -h now")
#sys.exit()
def messwertAusgeben():
while usb_exists():
try:
value = ser.readline()
except:
print("Daten konnten nicht gelesen werden")
checkData()
# Daten entgegen nehmen
def checkData():
global ser
t = threading.Timer(2, checkData)
if(usb_exists()):
t.cancel()
ser = serial.Serial('/dev/messgeraetUSB', 38400 ,timeout=1)
print("usb vorhanden")
print(ser)
# ttyUSB0: Serial<id=0x75478a10, open=True>(port='/dev/ttyUSB0', baudrate=38400, bytesize=8, parity='N', stopbits=1, timeout=1, xonxoff=False, rtscts=False, dsrdtr=False)
# mesgeraetUSB: Serial<id=0x74af25d0, open=True>(port='/dev/messgeraetUSB', baudrate=38400, bytesize=8, parity='N', stopbits=1, timeout=1, xonxoff=False, rtscts=False, dsrdtr=False)
messwertAusgeben()
else:
print("usb nicht vorhanden")
messwert.set("USB nicht erkannt / USB not found")
t.start()
checkData()
mywin.mainloop()
Alles anzeigen
Die Abfrage, ob USB angeschlossen ist oder nicht, funktioniert. Ich kann nur nicht zuverlässig auf das Device zugreifen.
Wenn es nicht anders ginge, würde ich halt mit "ttyUSB0" und "ttyUSB1" arbeiten. Wenn "ttyUSB0" nicht vorhanden ist, gehe ich auf "ttypUSB1". Aber das kann nicht die richtige Lösung sein?!
MfG Sekob