我需要了解如何从UART以十六进制格式发送消息,例如: msg = '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'
}
提前致谢。
答案 0 :(得分:1)
您似乎正在加载buf
,但在c代码中使用buffer
。
您正在向缓冲区读取34个字节,然后检查长度是否小于34.应该不能正常工作。从你的例子来看,它应该是17.
编码不会将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)