2013-07-11 16 views
6

So che ci sono state molte discussioni in merito, ma ho ancora una domanda. Sto cercando di inviare i valori esadecimali attraverso pySerial per il dispositivo utilizzando pySerialUtilizzo di Pyserial per inviare dati binari

command="\x89\x45\x56" 
ser.write(command) 

Tuttavia Continuo a ricevere un errore che dice string argument without encoding. Qualcuno sa come risolvere questo?

+0

Perché non usare 'binascii'? 'da binascii import unhexlify', e quindi' command = unhexlify ("894556") ' – TyrantWave

+0

Quale versione di Python stai usando? E come appare il traceback completo? – jszakmeister

risposta

1

Se si tratta di Python 3, probabilmente tratta la stringa come unicode e non sa come trasformarla. Penso che probabilmente intendi utilizzare byte qui:

command=b"\x89\x45\x56" 
1

Se si utilizza Python 3 è possibile utilizzare un oggetto bytes.

command=b"\x89\x45\x56" 

Da l'errore sembra pySerial tenta di convertire un (tua) stringa in un oggetto di byte senza specificare una codifica.

1

Ho avuto successo l'invio di valori esadecimali da una stringa in questo modo:

input = '736e7000ae01FF'  
ser.write(input.decode("hex")) 
print "sending",input.decode("hex") 

>> sending snp «☺  
0
packet = bytearray() 
packet.append(0x41) 
packet.append(0x42) 
packet.append(0x43) 

ser.write(packet)