如何使用PySerial将整数写入端口
我正在尝试使用PySerial将数据写入第一个串口,COM1。
import serial
ser = serial.Serial(0)
print (ser.name)
ser.baudrate = 56700
ser.write("abcdefg")
ser.close()
这应该可以工作。不过,我需要不断发送28个字节的整数,格式是
255 255 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
循环发送,每个整数占用一个字节的数据。
我尝试了:
import serial
ser = serial.Serial(0)
print (ser.name)
ser.baudrate = 56700
while True:
ser.write(255 255 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000)
ser.close()
结果出现了一个语法错误
。
如果write
只能发送字符串,那我该如何将整数写入串口呢?我怎么能确保每个数字都是以8位的形式发送的?
关于serial
这个类的文档内容非常少,所以任何帮助都将不胜感激。
3 个回答
0
我经常用来把字节值列表变成字符串的方式是:
''.join(map(chr,values))
如果你一开始就是用空格分开的数字列表,那你可以更灵活一点,使用:
''.join(map(chr,map(int,values_string.strip().split())))
你可能能猜到我喜欢用map这个东西。用上lambda函数后,效果会更有趣!
0
我之前没用过pySerial,不过看了一下它的文档,上面说你也可以发送字节数据。所以请看看这个链接:https://docs.python.org/3.1/library/functions.html#bytes
7
首先,写 123 12 123 123 123
这样的内容在Python里是不合法的语法。
你需要创建一个列表或者元组来存放你的整数,比如: values = (1,2,3,4,5)
接下来,我们需要把这些数据转换成一个二进制字符串,以便表示我们的数值。
下面是我们怎么做的:
import struct
values = (1,2,3,4,5)
string = b''
for i in values:
string += struct.pack('!B',i)
# Now send the string to the serial port
根据你想为每个数字使用多少字节,你需要以不同的方式来打包它们。具体可以查看这里的文档: https://docs.python.org/3/library/struct.html