Programmgesteuerte Kommunikation mit einem seriellen Port in OS X oder Linux
-
08-06-2019 - |
Frage
Ich habe ein Prolite-LED-Schild, das ich gerne so einrichten möchte, dass es scrollende Suchanfragen aus Apache-Protokollen und andere unterhaltsame Statistiken anzeigt.Das Problem ist, dass mein G5 keinen seriellen Anschluss hat, also muss ich einen USB-zu-Seriell-Dongle verwenden.Es wird als /dev/cu.usbserial und /dev/tty.usbserial angezeigt.
Wenn ich das mache, scheint alles in Ordnung zu sein:
stty -f /dev/cu.usbserial
speed 9600 baud;
lflags: -icanon -isig -iexten -echo
iflags: -icrnl -ixon -ixany -imaxbel -brkint
oflags: -opost -onlcr -oxtabs
cflags: cs8 -parenb
Alles funktioniert auch, wenn ich das verwende serielles Port-Tool mit ihm reden.
Wenn ich diesen Codeabschnitt während des oben genannten Serial-Port-Tools ausführe, funktioniert auch alles.Aber sobald ich das Tool trenne, geht die Verbindung verloren.
#!/usr/bin/python
import serial
ser = serial.Serial('/dev/cu.usbserial', 9600, timeout=10)
ser.write("<ID01><PA> \r\n")
read_chars = ser.read(20)
print read_chars
ser.close()
Die Frage ist also: Welche Zauberei muss ich ausführen, um ohne das Serial-Port-Tool mit der seriellen Schnittstelle zu kommunizieren?Ist das ein Berechtigungsproblem?Was ist außerdem der Unterschied zwischen /dev/cu.usbserial und /dev/tty.usbserial?
Nein, keine Seriennummern.Die Sache ist, dass das Problem auch dann bestehen bleibt, wenn das Python-Skript mit sudo ausgeführt wird, und das Einzige, was dazu führt, dass es funktioniert, wenn ich die Verbindung in dem von mir erwähnten GUI-Tool öffne.
Keine korrekte Lösung
Andere Tipps
/dev/cu.xxxxx
ist das „Callout“-Gerät. Es ist das, was Sie verwenden, wenn Sie eine Verbindung zum seriellen Gerät herstellen und mit ihm sprechen. /dev/tty.xxxxx
ist das „Dialin“-Gerät, das zur Überwachung eines Ports auf eingehende Anrufe für z.B.ein Fax-Hörer.
Haben Sie versucht, den Datenverkehr zwischen der GUI und der seriellen Schnittstelle zu überwachen, um festzustellen, ob ein spezieller Befehl gesendet wird?Auch nur neugierig, Python sendet ASCII und nicht UTF-8 oder etwas anderes, oder?Der Grund, warum ich frage, ist, dass ich Ihre Anführungszeichenänderungen für die Zeichenfolgen bemerkt habe und in einigen Sprachen tatsächlich der Unterschied zwischen ASCII und UTF-8 besteht.