Sending byte strings to serial device
You are using the bytes
constructor incorrectly. When you call it with an int
as argument, you get:
bytes(int) -> bytes object of size given by the parameter initialized with null bytes
So bytes(0x00)
(which is just bytes(0)
) is the empty string, and bytes(0x04)
is four zero bytes:
>>> bytes(0x00)
b''
>>> bytes(0x04)
b'\x00\x00\x00\x00'
What you want is bytes([ 0x00 ])
etc., or simply an array with all your byte values:
>>> bytes([0, 4])
b'\x00\x04'
If the string is short, you could simply write it as a constant: b'\x00\x04'
, for example. See the documentation of bytes()
for more options.
Related videos on Youtube

joebee
Updated on August 04, 2020Comments
-
joebee about 3 years
I'm using Python3 running on a Raspberry. I have a serial device (max232/PiC16F84) connected to the Raspberry via an USB to Serial adapter. I try to send two bytes to the device (e.g 0000 0011) which then will be interpreted as a command by the PIC. The USB - serial adapter is configured correctly and the parameter such as bauderate should be ok. I guess that my code doesn't send the correct bytes to the serial port.
import serial ser = serial.Serial( port='/dev/ttyUSB0', baudrate=1200, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, xonxoff=serial.XOFF, rtscts=False, dsrdtr=False ) ser.open() ser.isOpen() print("Initializing the device ..") ser.write(bytes(0x00)) print("Write command") ser.write (bytes(0x04)) print('Done')