pySerial write() 无法接收我的字符串

28 投票
3 回答
185862 浏览
提问于 2025-04-17 21:27

我正在使用Python 3.3和pySerial进行串口通信。

我想给我的COM端口发送一个命令,但写入的方法却无法接受我的字符串。(大部分代码来自这里 pySerial包的完整示例

这是怎么回事呢?

import time
import serial


ser = serial.Serial(
    port='\\\\.\\COM4',
    baudrate=115200,
    parity=serial.PARITY_ODD,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS
)
if ser.isOpen():
    ser.close()
ser.open()
ser.isOpen()

ser.write("%01#RDD0010000107**\r")
out = ''
# let's wait one second before reading output (let's give device time to answer)
time.sleep(1)
while ser.inWaiting() > 0:
    out += ser.read(40)

if out != '':
    print(">>" + out)


ser.close()

错误出现在ser.write("%01#RDD0010000107**\r")这行,出现的错误信息是 追踪信息大致是这样的: data = to_bytes(data) b.append(item) TypeError: 需要一个整数。

3 个回答

2

我在尝试写东西的时候也遇到了“类型错误:需要一个整数”的错误信息。谢谢你,使用 .encode() 解决了我的问题。我是在一台运行32位Windows XP专业版的Dell D530上使用Python 3.4。

这里我省略了串口设置:

>>>import serial

>>>ser = serial.Serial(5)

>>>ser.close()

>>>ser.open()

>>>ser.write("1".encode())

1

>>>
10

你已经找到了问题的根本原因。或者可以这样做:

ser.write(bytes(b'your_commands'))
45

结果发现,这个字符串需要转换成字节数组。为此,我修改了代码,变成了:

ser.write("%01#RDD0010000107**\r".encode())

这样就解决了问题。

撰写回答