如何将 python 中的十六进制数发送到 UART?

how to send an hexadecimal from python to the UART?

我需要了解如何从 UART 以十六进制格式发送消息,例如: 味精='99' +'70b4c55ad8cdb7806a7b043069c4e0d8'

'99'是区分消息的开始,其余是数据。 作为 导入序列号 导入时间

#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

但我不明白错误:

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

然后我需要使用c语言进行比较,将第一个接收到的字节99与0x99进行比较。

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

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

提前致谢。

  1. 您似乎正在加载到 buf 但在您的 c 代码中使用 buffer

  2. 您正在向缓冲区读取 34 个字节,然后检查长度是否小于 34。应该不会正常工作。从你的例子来看,它应该是 17。

  3. Encode 不会将 msg 转换为十六进制字符串。它会将每个字符视为一个字符,即 '0'48'1'49

使用

创建字节对象
msg = b'\x99\x70\xb4\xc5\x5a\xd8\xcd\xb7\x80\x6a\x7b\x04\x30\x69\xc4\xe0\xd8'
ser.write(msg)