【问题标题】:Error with sending Ints/Strings from Python via PySerial通过 PySerial 从 Python 发送整数/字符串时出错
【发布时间】:2014-04-07 20:00:52
【问题描述】:

我正在尝试使用 Python 和 Arduino 构建 CPU 监视器。 Arduino 工作正常,但我在使用 Python 时遇到问题。 我的问题是我无法让 PySerial 发送一个 int 或一个字符串。

如果我尝试发送一个 Int,我会得到:

TypeError: 'int' object is not iterable

如果我将 Int 转换为字符串,则错误是:

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 中的一个错误,还是我只是瞎了眼也看到了错误?

【问题讨论】:

    标签: python arduino pyserial psutil


    【解决方案1】:

    PySerial 确实接受字符串。 我相信,如果您将最后一行更改为以下行,它应该发送数据:

    ser.write(str(v))
    

    【讨论】:

    • 我试过它输出:“TypeError: an integer is required”
    • 您确定错误是针对最后一行的吗?将一些打印件放入最后一个循环或将完整的错误消息放在这里
    • 在该行错误代码:" Traceback (最近一次调用最后一次):文件 "test.py",第 12 行,在 ser.write("test") 文件 "C: \Python34\lib\site-packages\serial\serialwin32.py”,第 283 行,写入数据 = to_bytes(data) 文件“C:\Python34\lib\site-packages\serial\serialutil.py”,第 76 行, in to_byte s b.append(item) # 这个处理 int 和 str 用于我们的模拟和 int 用于 Python 3.x TypeError: an integer is required"
    【解决方案2】:

    可以通过将str转成二进制来解决: ser.write(str(v).encode())

    【讨论】:

      【解决方案3】:

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

      ser.write([v])
      

      现在,它可以迭代了。

      要写字符串,你必须把它转换成字节。

      ser.write(b'v')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-25
        • 1970-01-01
        • 2014-02-09
        • 1970-01-01
        • 1970-01-01
        • 2014-09-01
        • 1970-01-01
        相关资源
        最近更新 更多