从串口读取十六进制数据

Reading hex data from serial port

我正在尝试从通过 USB 连接的 MCU 读取十六进制数据。 MCU 旨在提供十六进制输出。

这是我使用 pyserial 编写的简单代码:

import serial
import time

ser = serial.Serial()
ser.port = '/dev/ttyUSB1'
ser.baudrate = 921600
ser.open()
bytesize = serial.EIGHTBITS
parity = serial.PARITY_NONE
stopbits = serial.STOPBITS_ONE

f = open('dataFile.txt','a')

for i in range(50):
    line = ser.readline()
    print(line)
    line=str(line)
    f.write(line)

大部分输出都是十六进制的,看起来不错,但也有这样的部分:

\x02\x01\x04\x03\x06\x05\x08\x07\x03\x00\x03\x03@\x00\x00\x00Ch\n'b'\x00^\xd4\x00\x00\xa1\xc7\x97\xbd\x00\x00\x00\x00\x00\x00\x00\x00

我得到像 \x00Ch\n'b'\x00^ 这样的字符,它们不是十六进制的,看起来像是一个错误。

您建议我如何更新代码以获得纯十六进制输出?

只是表示让你感到困惑。

您从串行读取的数据实际上是二进制的,可以显示为 - 例如 - 作为十六进制转储或您在二进制数据的默认表示 (rep) 中体验到的 Python 提供。从 bytes, you can use for instance bytes.hex(line) or one of the functions of the binascii 模块获取十六进制转储。

二进制数据的可能表示如下:

>>> d = b'abcd'
>>> bytes.hex(d, ' ')
'61 62 63 64'