Problem mit wechselnden USB-Devices in Verbindung mit PySerial

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • 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:

    Code
    # 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):

    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

  • Problem mit wechselnden USB-Devices in Verbindung mit PySerial? Schau mal ob du hier fündig wirst!

  • Eine udev-rule erstellen, die dem Device immer den gleiche Namen, z.B. /dev/messgeraet gibt. Die Serial eignet sich gut als Identifier.

    Ich hatte doch eine udev-rule angelegt. Das passende Gerät habe ich ermittelt, indem ich lsusb vor und nach dem ziehen des Geräts ausgeführt habe.
    Warum auch immer beim ausgeben der Schnittstelle eine andere ID angegeben ist.
    Auf das Ziehen und Einstecken des USB-Geräts reagiert das Programm jedenfalls korrekt.

  • Naja, dann wird deine udev-Regel wohl nicht 100% passen, also nachbessern. Nimm udevadm um mehr Info zum Gerät zu erhalten.

    Wenn du nichts zu sagen hast, sag einfach nichts.

  • Ich bin wieder etwas schlauer geworden: Das Problem scheint irgendwo in meinem Code zu sein. Wenn ich den USB-Stecker oft genug (?) trenne und wieder verbinde, funktioniert es.

    Ich kann mir aber nicht erklärenn, warum er manchmal nur leere Werte erhält b '' und manchmal die korrekten.

    Das Device an sich scheint er ja korrekt zu erkennen.

    Hat jemand ne Idee wo das Problem liegen könnte, wenn es nicht am Port liegt?

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!