通过PySerial从Python发送整数/字符串时出错

0 投票
3 回答
2027 浏览
提问于 2025-04-18 01:46

我正在用Python和Arduino制作一个CPU监控器。Arduino运行得很好,但我在Python上遇到了问题。

我的问题是,我无法让PySerial发送整数或字符串。

当我尝试发送一个整数时,我得到了:

TypeError: 'int' object is not iterable

如果我把整数转换成字符串,错误变成了:

TypeError: an integer is required

这看起来很奇怪……

这是我的代码:

import psutil
import serial
ser = serial.Serial(2)
while True:
    line = ser.readline()
    line = str(line[:-2],'utf-8')
    if line=="cpu":
        cpus = psutil.cpu_times_percent(percpu=True)
        for x in range(4):
            v=int(cpus[x][0]+cpus[x][1])
            print(v)
            ser.write(v)

注释掉最后一行确认了CPU返回的值是0到100之间的整数,这正是我预期的。

这是PySerial的一个bug,还是我自己看不出问题所在?

3 个回答

0

我已经解决了这个问题。简单的解决办法如下:

ser.write([v])

现在,它可以被遍历了。

要写入字符串,你需要把它转换成字节。

ser.write(b'v')
0

这个问题可以通过把字符串转换成二进制来解决:
ser.write(str(v).encode())

0

PySerial确实可以接受字符串。我认为如果你把最后一行改成下面这一行,它就应该能发送数据了:

ser.write(str(v))

撰写回答