Search code examples
pythoncuart

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.


Solution

    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)