我知道对此有很多讨论,但我仍然有一个问题。我正在尝试使用 pyserial 通过 pyserial 将十六进制值发送到我的设备
command="\x89\x45\x56"
ser.write(command)
但是我不断收到错误 消息,string argument without encoding.
有人知道如何解决这个问题吗?
packet = bytearray()
packet.append(0x41)
packet.append(0x42)
packet.append(0x43)
ser.write(packet)
来自 pySerial API文档:
write(data) 将字节数据写入端口。这应该是字节类型(或兼容的,例如 bytearray 或 memoryview)。Unicode 字符串必须经过编码(例如,'hello'.encode('utf-8')。
假设您正在使用 Python 3(您应该),这是发送单个字节的方法:
command = b'\x61' # 'a' character in hex
ser.write(command)
对于几个字节:
command = b'\x48\x65\x6c\x6c\x6f' # 'Hello' string in hex
ser.write(command)
我已经成功地从这样的字符串发送十六进制值:
input = '736e7000ae01FF'
ser.write(input.decode("hex"))
print "sending",input.decode("hex")
>> sending snp «☺
如果这是 Python 3,它可能会将您的字符串视为 unicode,并且不知道如何转换它。我想你可能是想在这里使用字节:
command=b"\x89\x45\x56"
如果您使用 Python 3,则可以使用bytes
对象。
command=b"\x89\x45\x56"
从错误看来,pyserial 尝试将(您的)字符串转换为字节对象而不指定编码。
谢谢,
最后,我弄清楚如何读取二进制文件的指定区域并通过 uart 发送(作为流控制)。
binary_file = open("test_small.jpg", 'rb')
filesize = getSize(binary_file)
ser = serial.Serial('COM7', 115200, timeout=0.5)
count = 0
while (offset < filesize):
binary_file.seek(offset, 0)
ser.write(binary_file.read(MTU))
offset = offset + MTU