我正在尝试通过串口发送值。我不确定如何将其转换为正确的格式。我尝试了二进制和格式()的bin(),但它没有用。
result = 2
ser.open()
ser.write(b'1')
time.sleep(3)
ser.write(result) # wrong format
ser.write("{0:b}".format(result)) # TypeError: unicode strings
# are not supported, please
# encode to bytes: '10'
第一个写操作发送' 1'作为二进制字符串现在我希望变量也作为二进制字符串发送。
答案 0 :(得分:1)
write()
需要一个字节对象。
>>> help(serial.Serial.write)
Help on function write in module serial.serialwin32:
write(self, data)
Output the given byte string over the serial port.
要将整数转换为字节,请调用int.to_bytes()
。
>>> result = 2
>>> b = result.to_bytes(4, 'little')
>>> b
b'\x02\x00\x00\x00'
>>> # to convert back to an integer
>>> int.from_bytes(b, 'little')
2
答案 1 :(得分:1)
write()
方法接受字符串参数。您可以将result
转换为带有str()
内置函数的字符串,如下所示。
result = str(result)
result = 2
ser.open()
ser.write(b'1')
time.sleep(3)
ser.write(str(result))
您必须以字节为单位对字符串进行编码。
result = 2
ser.open()
ser.write(b'1')
time.sleep(3)
ser.write(str(result).encode('utf-8'))
答案 2 :(得分:1)
像这样:
import binascii
def write(num):
pack = binascii.unlexlify("%04X"%num)
ser.write(pack)
重点:设备上使用的是哪个数字系统(8,16,32,64位)?
8位= 1字节(0-255)
16Bit = 2字节(0-65535)
32Bit = 4 Byte(如上行)(0-4294967295)
所有范围均为
UNSIGNED
(查询),但float
得到了额外的定义!
您无法使用键盘输入二进制1
值:
binascii.unlexlify("%01X"%1)
等于\x01
(当然您可以使用struct
包)