2013-04-15 31 views
8

Ho visto molti esempi di codice utilizzando la porta seriale e la gente dice che anche i codici funzionano. Il fatto è che quando provo il codice non funziona.Uso di pySerial con Python 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)) 

L'errore che mi dà è: "SerialException: Port è già aperto". Sono io a usare python3.3 il problema o c'è qualcosa di aggiuntivo che devo installare? C'è un altro modo per usare le porte COM con Python3.3?

+0

Se qualcuno chiede, ho COM1. Lo uso molto. Non è stato aperto da un altro programma nel momento in cui ho provato questo codice. Quando provato con Docklite apre COM1 con successo. –

risposta

10

Quindi la morale della storia è .. la porta viene aperta quando inizializzata. ser.open() non riesce perché la porta seriale è già aperta dal ser = serial.Serial(.....). E questa è una cosa.

L'altro problema lassù è ser.write(0xAA) - Mi aspettavo che questo significasse "invia un byte 0xAA", quello che effettivamente ha fatto è stato inviare 170 (0xAA) zeri. Nella funzione write, ho visto quanto segue: data = bytes(data) dove i dati sono l'argomento che si passa. sembra che la funzione bytes() non prenda stringhe come argomenti, quindi non è possibile inviare stringhe direttamente con: serial.write(), ma il lavoro è ser.write(bytearray(TheString,'ascii')).

Anche se Sto considerando di aggiungere:

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

in ser.write(), anche se che avrebbe fatto il mio codice non funziona su altri PC.

Problemi correlati