2013-04-15 16 views
8

Widziałem wiele próbek kodu za pomocą portu szeregowego i ludzie mówią, że również działają. Chodzi o to, że kiedy próbuję kodu, to nie działa.Używanie pySerial z Pythonem 3.3

import serial 

ser = serial.Serial(
    port=0, 
    baudrate=9600 
    # parity=serial.PARITY_ODD, 
    # stopbits=serial.STOPBITS_TWO, 
    # bytesize=serial.SEVENBITS 
) 

ser.open() 
ser.isOpen() 

print(ser.write(0xAA)) 

Błąd, który mi daje: "SerialException: Port is already opened". Czy to ja używam Pythona3.3 problemu, czy jest coś dodatkowego, co muszę zainstalować? Czy istnieje inny sposób korzystania z portów COM w Python3.3?

+0

Jeśli ktoś zapyta, mam COM1. Używam go dużo. Nie został otwarty przez inny program w czasie, gdy próbowałem tego kodu. Po wypróbowaniu z Docklite otwiera COM1 z powodzeniem. –

Odpowiedz

10

Więc morał tej historii brzmi ... port jest otwierany po zainicjowaniu. ser.open() kończy się niepowodzeniem, ponieważ port szeregowy jest już otwarty przez ser = serial.Serial(.....). I to jest jedno.

Drugi problem to: ser.write(0xAA) - Spodziewałem się, że oznacza to "wyślij jeden bajt 0xAA", co faktycznie spowodowało wysłanie zera 170 (0xAA). W funkcji write zobaczyłem: data = bytes(data) gdzie dane to argument, który przekazujesz. wygląda na to, że funkcja bytes() nie przyjmuje łańcuchów jako argumentów, więc nie można wysyłać ciągów bezpośrednio za pomocą: serial.write(), ale zadanie wykonuje: ser.write(bytearray(TheString,'ascii')).

chociaż jestem rozważa dodanie:

if(type(data) == type('String')): 
    data = bytearray(data,'ascii') 

w ser.write(), mimo że uczyniłoby mój kod nie działa na innych komputerach.