2008-08-06 25 views
14

Mam znak Prolite LED, który chcę skonfigurować, aby wyświetlał przewijanie zapytań z dzienników apache i innych zabawnych statystyk. Problem polega na tym, że mój G5 nie ma portu szeregowego, więc muszę użyć klucza USB do klucza szeregowego. Pojawia się jako /dev/cu.usbserial i /dev/tty.usbserial.Programowo rozmawia z portem szeregowym w systemie OS X lub Linux

gdy zrobić to wszystko wydaje się być klawy:

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 

Wszystko działa również podczas korzystania z serial port tool rozmawiać z nim.

Jeśli uruchomię ten fragment kodu podczas korzystania z wyżej wymienionego narzędzia portu szeregowego, wszystko będzie działać. Ale zaraz po odłączeniu narzędzia połączenie zostanie utracone.

#!/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() 

Pytanie więc, jakie magie muszę wykonać, aby rozpocząć rozmowę z portem szeregowym bez narzędzia portu szeregowego? Czy to jest problem z uprawnieniami? Jaka jest różnica między /dev/cu.usbserial i /dev/tty.usbserial?


Nie, bez numerów seryjnych. Problem w tym, że problem utrzymuje się nawet po uruchomieniu sudo skryptu Pythona, a jedyna rzecz, która go powoduje, to jeśli otworzę połączenie w narzędziu GUI, o którym wspomniałem.

+0

W zeszłym tygodniu napisałem małe narzędzie Pythona, które pomaga mi debugować osadzoną aplikację C, odczytując informacje debugowania z klucza USB-Serial, więc chciałbym myśleć, że rozumiem PySerial całkiem dobrze. Niektóre dodatkowe informacje mogą pomóc w zdiagnozowaniu problemu: * Jakiego sterownika USB-Serial używasz? * Czy jesteś pewien, że poprawnie skonfigurowałeś wszystkie opcje szeregowe (szybkość transmisji, kontrola przepływu, parzystość, stop bit, itd.) Przed przystąpieniem do otwierania połączenia szeregowego z Pythona? * Z jakiej wersji PySerial korzystasz? – Matt

+0

Nie widzisz po nich numerów seryjnych? Takich jak: /dev/cu.usbserial-xxxxxxxxA /dev/tty.usbserial-xxxxxxxxA /dev/cu.usbserial-xxxxxxxxB /dev/tty.usbserial-xxxxxxxxB Moje inne może być istnieje problem z uprawnieniami python rozmawia z Port szeregowy. Czy wiesz, z jakiego użytkownika działa Twoja instancja pythona? A może jakie ma role? –

Odpowiedz

0

Czy próbowałeś oglądać ruch pomiędzy interfejsem GUI a portem szeregowym, aby sprawdzić, czy jest jakieś specjalne polecenie wysyłane przez? Co ciekawe, Python wysyła ASCII, a nie UTF-8 lub coś innego, prawda? Powodem, dla którego pytam, jest to, że zauważyłem zmiany w cudzysłowach w łańcuchach iw niektórych językach, które faktycznie są różnicą między ASCII i UTF-8.

4

/dev/cu.xxxxx to urządzenie "objaśnienie", to jest to, czego używasz, gdy nawiązujesz połączenie z urządzeniem szeregowym i zaczynasz z nim rozmawiać. /dev/tty.xxxxx to urządzenie "dialin", używane do monitorowania portu dla połączeń przychodzących, np. słuchacz faksu.

+2

Czy to tylko konwencja, czy jest między nimi konkretna różnica? –