我正在尝试发送包含命令的字符串变量。
像这样:
value="[0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a]"
self.s.write(serial.to_bytes(value))
上述失败。不会给出任何错误。
但是当我发送这样的值时,它正在工作:
self.s.write(serial.to_bytes([0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a]))
我也试过像这样发送字符串:
self.s.write(serial.to_bytes(str(value)))
仍然无法正常工作。有人可以通过存储在字符串中让我知道如何发送值吗?
我想做这件事:
value="[0x"+anotherstring+",0x"+string2+"0x33, 0x0a]"
并发送值。
谢谢!
答案 0 :(得分:4)
serial.to_bytes将序列作为输入。您应该删除value
周围的双引号,以传递一系列整数,而不是代表您要传递的序列的str
:
value = [0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a]
self.s.write(serial.to_bytes(value)) # works now
在第一种情况下,您发送了一个表示"[0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a]"
的字节序列。现在,您将按预期发送序列[0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a]
。
如果您想发送字符串,只需将其发送为bytes
:
# Python 2
self.s.write('this is my string')
text = 'a string'
self.s.write(text)
# Python 3
self.s.write(b'this is my string')
text = 'a string'
self.s.write(text.encode())
对于一个序列:
for value in values:
# Python 2
self.s.write(value)
# Python 3
self.s.write(value.encode())
答案 1 :(得分:2)
如果传递整数列表对你有用,那么只需将十六进制表示转换为整数并将它们放在列表中。
详细步骤:
打开python解释器
导入serial
并打开一个串口,将其称为ser
。
复制下面的代码并将其粘贴到python解释器中:
代码:
command = '310a320a330a'
hex_values = ['0x' + command[0:2], '0x' + command[2:4],
'0x' + command[4:6], '0x' + command[6:8],
'0x' + command[8:10], '0x' + command[10:12]]
int_values = [int(h, base=16) for h in hex_values]
ser.write(serial.to_bytes(int_values))
它具有与此相同的效果:
ser.write(serial.to_bytes([0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a]))
实际上你可以测试int_values == [0x31, 0x0a, 0x32, 0x0a, 0x33, 0x0a]
是True
,所以你写的是完全相同的东西。