我已经被困在这一段了一段时间了。我需要在python中向设备发送一个串行命令。以下是格式示例:
ser = serial.Serial('/dev/ttyO1',baudrate=115200)
ser.write('\xAA\x04\x05\x00\x00\x00')
如果我使用格式.write(~hex bytes〜)
进行通信,我能够正常通信然而,当我需要接收更大的数据块时,设备的通信协议将事物分成数据包,我必须确认接收每个数据包。为了避免在为每个数据包输入单独的ser.write()命令时得到腕管综合症,我想写一个循环来为我做数据包计数/确认。这就是我所拥有的:
for n in range(0,num_packets,1):
x = '\\x'"%0.2x"%(n)
print('Picture Ready Host Ack')
ser.write('\xAA\x0E\x00\x00' + x + '\x00')
time.sleep(.1)
response = ser.read(ser.inWaiting())
image_write(response,base_path, filename)
但是,双斜杠('\ x'..)给了我两个斜杠:
'\xaa\x0e\x00\x00\\x05\x00'
当我定义变量x:
时,单个斜杠('\ x'...)会返回问题ValueError: invalid \x escape
...帮助?
答案 0 :(得分:2)
如果不是将x
定义为'\\x'"%0.2x"%(n)
,而是x = chr(n)
,那么一切都应该有用。
答案 1 :(得分:0)
\xij
只是扩展为角色chr(int(ij, 16))
既然你无论如何发送字节,我会在循环中说,发送你的第一个块。不要向它添加任何内容,然后通过chr(int(n),16)
发送分隔符,然后发送下一个块。这应该可以解决你的问题。