USB auf Seriell nach Text abfragen

  • Hallo zusamen,

    ich bin zur Zeit am Einlesen einer seriellen Schnittstelle beschäftigt. NUn komme ich nicht mehr wirklich vorwärts.

    Ich will in einem python Script die serielle Schnittstelle, welche auf /dev/ttyUSB0 liegt abfragen.

    Kommt keine Text (len==0) soll das Script von vorne gestartet werden.

    Hintergrund ist, dass nur selten text kommt, kommt dieser, soll er in eine TXT Datei geschrieben werden.

    ZUr Zeit habe ich folgendes Script, bei welchem ich nicht weiterkomme:

    import serial

    ser = serial.Serial(

    port='/dev/ttyUSB0',

    baudrate=9600,

    parity=serial.PARITY_NONE

    stopbits=serial.STOPBITS_ONE

    bytesize=serial.EIGHTBITS

    )

    while true:

    ser.flushInput()

    file_out = open('rs232daten.txt',"a+")

    data = ser.readline()

    if len(date) == 0

    print(nix)

    else:

    print(data)

    file_out.write(data)


    Das print(nix) war als gedanke, zum testen wenn nix kommt. Geht aber auch nicht so richtig.

    Mit ls /dev/ttyUSB* finde ich unter ttyUSB0 mein RS232 - USB Wandler.


    Wäre schön wenn ich ein paar Tipps bekommen könnte, sollte man das noch nicht sagen, nebenbei gesagt, ich bin blutjunger Anfänger was das angeht ;)

    Viele Grüße Markus

  • Bitte Code Tags verwenden: Du hast keine Einrückungen mehr, die sehr entscheidend sind bei Python.

    Was mir auffällt: Du löschst den seriellen Speicher ser.flushInput() und fragst danach den Wert ab. Lass man das ser.flushInput() weg.

    ...wenn Software nicht so hard-ware ;) ...

    Freue mich über jeden like :thumbup:

  • Hallo Markus,

    bist Du Dir sicher, dass Du die Baudrate, Anzahl der Stopbits, Parität etc. (also Parameter der seriellen Schnittstelle) zwischen Sender und Empfänger richtig abgeglichen hast?

    Wenn nein, dann mache dies vorher mit dem Linux-Kommando

    Code
    stty

    was Du evtl. vorher installieren musst.


    Funktioniert die Kommunikation Deines Senders mit dem Raspberry Pi über eine Anwendung wie cutecom oder mincom? Wenn nein, dann liegt es nicht an Deinem Progamm sondern an prinzipiellen Verständnisproblemen.


    Gebe im Terminal mal ein

    Code
    cat /dev/ttyUSB0 > /Pfad/zu/irgendeiner/Datei.txt &

    während der Sender Daten an die seriellen Schnittstelle schickt.

    Dann poste die Ausgabe von

    Code
    ls -al /Pfad/zu/irgendeiner/Datei.txt

    über einen längeren Zeitraum.

    Erklärung: Du kopierst die Daten, die auf der seriellen Schnittstelle anstehen. Wenn Du hier z.B. die Dateigröße auslsiest, dann brauchst Du nur dann die Datei auszulesen, wenn denn wirklich was drin steht. Ist mit wesentlich geringerer CPU-Auslastung verbunden. Und wenn die Datei dann noch im RAM steht, dann gibt's da auch keinen SD-Karten-Verschleiß.


    Dann sehen wir weiter...

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo Andreas,

    die Baudrate schein zu passen.

    Wenn ich stty -F /dev/ttyUSB0 eingebe kommt:

    speed 9600 baud; line = 0;

    -brkint -imaxbel

    Was bewirkt das "&" Zeichen hinter dem cat Befehl?

    Der Sender arbeitet nicht mit irgedwelchen Programmen. Jetzt weiss ich aber, dass ich auf dem richtigen weg bin und teste weiter.

    btw. Gibt es eine Möglichkeit die schnittstelle /dev/ttyUSB0 zum testen zu manipulieren, im SInne von Daten hinschicken, auch wenn mein Sender nichts sendet?

    Vielen Danke

    Grüße Markus!

    2 Mal editiert, zuletzt von Markus5579 (3. Dezember 2017 um 21:36)

  • Servus Markus5579 ,

    btw. Gibt es eine Möglichkeit die schnittstelle /dev/ttyUSB0 zum testen zu manipulieren, im SInne von Daten hinschicken, auch wenn mein Sender nichts sendet?

    mit minicom (sudo apt-get install minicom) oder cutecom (sudo apt-get install cutecom) oder ...

    cu,

    -ds-

  • Hallo Markus,

    die Baudrate schein zu passen.

    Na ja, scheint zu passen heißt noch lange nicht: Passt!

    Geht das noch etwas genauer, präziser, valider?



    Was bewirkt das "&" Zeichen hinter dem cat Befehl?

    Schickt das gestartete Programm in den Hintergrund. Das Terminal steht sofort für neue Schandtaten zur Verfügung.

    Ohne & würde das Linux-Kommando nicht von selber zu einem Abschluss kommen (außer Du brichst es über Strg-C ab, schickst über ein anderes Terminal ein passendes Signal, das zum Programmabbruch führt).


    Der Sender arbeitet nicht mit irgendwelchen Programmen. Jetzt weiss ich aber, dass ich auf dem richtigen weg bin und teste weiter.

    Das muss er aber. Der Sender sendet irgendwas an die Schnittstelle. Der Schnittstelle ist es vergleichsweise gleichgültig, wer was wie warum wann sendet. Mit meinem Vorschlag von cat hastenichgesehn wird jedes Bit in eine Datei geschaufelt, deren Wachstum Du mit ls hastenichgesehn  verfolgen kannst.

    Wenn diese Datei nicht wächst, dann gibt es da nur wenige Ursachen:

    • Der Sender sendet nix
    • Sender und Empfänger verstehen sich nicht
    • Die serielle Schnittstelle heißt anders, als Du vermutest
    • Durch irgendwelche Experimente an GPIO14 / GPIO15 ist die serielle Schnittstelle bereits defekt - - dito für USB.
    • Verwechsbuchselungen zwischen Rx und Tx: Rx geht an Tx und umgekehrt (Nicht Tx an Tx und Rx an Rx!)

    Ach: Sind die Pegel identisch? Der Raspberry liebt nur Pegel von 3,3 V an GPIO14/GPIO15 bzw. 5 V über USB. Alles höhere zerlegt ihn, alles kleinere als HIGH (z.B. 1,3 V bei 3V3-Pegeln) "hört" er nicht. Abhilfe schafft ein Pegelwandler / Levelshifter oder eine einfache Schaltung (z.B. Spannungsteiler zum Reduzieren des Pegels auf 3,3V oder eine einfache Verstärkerschaltung mit 2 Transistoren und 3 Widerständen, um einen kleineren Pegel auf 3,3 V zu erhöhen).

    Wenn Dein Sender sendet, und mit dem cat-Zeugs ODER cuteCom ODER mincom nichts empfangen werden kann, dann kannst Du noch so gut programmieren, wie Du möchtest, dann KANN DEIN PROGRAMM AUCH NICHTS EMPFANGEN.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (4. Dezember 2017 um 23:11)

  • Um es generell zu testen, ob die Verbindung steht, gebe in Terminal diesen String ein. Die Daten, wie die kommen, werden im Terminal angezeigt.

    Code
    socat stty -F /dev/ttyUSB0,b9600 STDOUT

    Damit die Sendeseite etwas sendet, schalte mal das Gerät aus und wieder ein. Tx und Dx mal tauschen?

    3 Mal editiert, zuletzt von Kilowatt (7. Januar 2018 um 19:24)

Jetzt mitmachen!

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