2008-08-06 3 views
14

Ich habe ein Prolite LED-Zeichen, das ich einrichten möchte, um Scroll-Suchanfragen aus einem Apache-Logs und anderen lustigen Statistiken anzuzeigen. Das Problem ist, mein G5 hat keine serielle Schnittstelle, also muss ich einen USB-zu-Seriell-Dongle verwenden. Es wird als /dev/cu.usbserial und /dev/tty.usbserial angezeigt.Programmgesteuertes Sprechen mit einem seriellen Port in OS X oder Linux

Als ich dies alles scheint prima an zu sein: auch

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, wenn ich die serial port tool verwenden, um darüber zu sprechen.

Wenn ich dieses Stück Code während des oben genannten seriellen Port-Tool ausführen, funktioniert auch alles. Aber sobald ich das Tool abziehe, 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, was magicks muss ich ohne die serielle Schnittstelle Werkzeug an den seriellen Port zu starten, führen Sie sprechen? Ist das ein Berechtigungsproblem? Was ist der Unterschied zwischen /dev/cu.usbserial und /dev/tty.usbserial?


Nein, keine Seriennummern. Das Problem ist, dass das Problem auch bei der Ausführung des Python-Skripts durch sudo bestehen bleibt, und das einzige, was es passieren lässt, wenn ich die Verbindung in dem erwähnten GUI-Tool öffne.

+0

Erst letzte Woche habe ich ein kleines Python-Dienstprogramm geschrieben, das mir beim Debuggen einer eingebetteten C-App hilft, indem ich Debug-Informationen von einem USB-Serial-Dongle lese, sodass ich PySerial ziemlich gut verstehe. Einige zusätzliche Informationen können helfen, das Problem zu diagnostizieren: * Welchen USB-Seriell-Treiber verwenden Sie? * Sind Sie sicher, dass Sie alle seriellen Optionen (Baudrate, Flusskontrolle, Parität, Stoppbits usw.) korrekt konfiguriert haben, bevor Sie versuchen, die serielle Verbindung von Python zu öffnen? * Welche Version von PySerial verwenden Sie? – Matt

+0

Sie sehen keine Seriennummern nach ihnen? Wie zum Beispiel: /dev/cu.usbserial-xxxxxxxxA /dev/tty.usbserial-xxxxxxxxA /dev/cu.usbserial-xxxxxxxxB /dev/tty.usbserial-xxxxxxxxB Meine andere Sache war vielleicht, dass es eine Erlaubnisfrage von Python gibt, die mit dem spricht serielle Schnittstelle. Weißt du, unter welchem ​​Benutzer deine Python-Instanz läuft? Und vielleicht welche Rollen hat es? –

Antwort

0

haben Sie versucht, den Verkehr zwischen der GUI und dem seriellen Port zu überwachen, um zu sehen, ob ein spezieller Befehl gesendet wird? Auch nur neugierig, Python sendet ASCII und nicht UTF-8 oder etwas anderes richtig? Der Grund, warum ich frage, ist, weil ich bemerkt habe, dass sich Ihr Zitat für die Zeichenketten ändert und in einigen Sprachen tatsächlich der Unterschied zwischen ASCII und UTF-8 ist.

4

/dev/cu.xxxxx ist das "Callout" -Gerät, das Sie verwenden, wenn Sie eine Verbindung zum seriellen Gerät herstellen und mit ihm sprechen. /dev/tty.xxxxx ist das "Einwahl" -Gerät, das zum Überwachen eines Ports für eingehende Anrufe für z.B. ein Faxhörer.

+2

Ist das nur eine Konvention, oder gibt es einen greifbaren Unterschied zwischen ihnen? –