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')
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With