2013-07-11 20 views
6

Wiem, że było dużo dyskusji na ten temat, ale wciąż mam pytanie. Próbuję wysłać wartości hex przez pyserial do urządzenia za pomocą pyserialUżywanie pyserial do wysyłania danych binarnych

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

Jednak Wciąż dostaję błąd mówiąc string argument without encoding. Czy ktoś wie jak rozwiązać ten problem?

+0

Dlaczego nie użyć 'binascii'? 'od binascii import unhexlify', a następnie' command = unhexlify ("894556") ' – TyrantWave

+0

Jakiej wersji Pythona używasz? Jak wygląda wygląd całego tracebacka? – jszakmeister

Odpowiedz

1

Jeśli to Python 3, prawdopodobnie traktuje twój ciąg jako unicode i nie wie, jak go przekształcić. Myślę, że prawdopodobnie znaczy używać bajtów tutaj:

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

Jeśli używasz Python 3 można użyć bytes obiekt.

command=b"\x89\x45\x56" 

Z błędu wygląda na to, że pyserial próbuje przekonwertować ciąg (twój) na obiekt bajtów bez określania kodowania.

1

miałem sukces wysyłanie wartości hex z ciągiem tak:

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)