如何使用PySerial将整数写入端口

The*_*tle 6 python serial-port pyserial python-3.x

我正在尝试使用PySerial将数据写入第一个串行端口COM1。

import serial
ser = serial.Serial(0)
print (ser.name)
ser.baudrate = 56700
ser.write("abcdefg")
ser.close()
Run Code Online (Sandbox Code Playgroud)

应该工作。但是,我需要不断发送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
Run Code Online (Sandbox Code Playgroud)

循环,每个整数使用一个字节的数据。

试:

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()
Run Code Online (Sandbox Code Playgroud)

提出一个Syntax Error

如果write仅发送字符串,如何将整数写入串行端口?如何确保每个数字都以8位发送?

很少的类的文档中serial,因此任何帮助将不胜感激。

LtW*_*orf 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
Run Code Online (Sandbox Code Playgroud)

根据每个数字要使用多少字节,您需要以不同的方式打包它们。请参阅此处的文档:https : //docs.python.org/3/library/struct.html

  • +1。您也可以执行s = struct.pack('!{0} B'.format(len(values)),* values)` (2认同)