tssmokey46 tssmokey46 - 8 days ago 6
Python Question

how to send an hexadecimal from python to the UART?

I need to understand how to send a message in hexadecimal format from UART for example:
msg='99' +'70b4c55ad8cdb7806a7b043069c4e0d8'

'99'is to distinct the start of message and the rest is the data.
As
import serial
import time

#serial port
ser = serial.Serial(
port='COM4',\
baudrate=230400,\
parity=serial.PARITY_NONE,\
stopbits=serial.STOPBITS_ONE,\
bytesize=serial.EIGHTBITS,\
timeout=0)

msg=b'\x99\x70\xb4\xc5\x5a\xd8\xcd\xb7\x80\x6a\x7b\x04\x30\x69\xc4\xe0\xd8'
ser.write(msg)
time.sleep(0.4)

while True:
print(ser.read(30))
ser.close() # close ports


But i don't unerstand th error:

msg= b'\x99\x70\xb4\xc5\x5a\xd8\xcd\xb7\x80\x6a\x7b\x04\x30\x69\xc4\xe0\xd8'
^
IndentationError: unexpected indent


I need then to compare by using c langage, to compare the first received byte 99 with 0x99.

int lenght = dev_uart_ptr->uart_read((void*)buffer,34 );

if (lenght<34)
{
if buffer [0]='0x99'
}


Thanks in advance.

Answer
  1. It seems like you are loading to buf but using buffer in your c code.

  2. You are reading 34 bytes to the buffer, then checking if the length is less than 34. Shouldn't work well. And judging by your example, it should be 17.

  3. Encode will not convert msg to hex string. It will treat every character as a char, i.e. '0' is 48, '1' is 49 etc

Create bytes object using

msg = b'\x99\x70\xb4\xc5\x5a\xd8\xcd\xb7\x80\x6a\x7b\x04\x30\x69\xc4\xe0\xd8'
ser.write(msg)
Comments