为啥python串行读取我写的最后一件事而不是我的串行设备的响应

Posted

技术标签:

【中文标题】为啥python串行读取我写的最后一件事而不是我的串行设备的响应【英文标题】:Why does python serial read the last thing I wrote instead of the response from my serial device为什么python串行读取我写的最后一件事而不是我的串行设备的响应 【发布时间】:2020-05-24 04:59:46 【问题描述】:

我有一个 numato 128 GPIO 板,当我在终端中键入命令时它工作正常,但我的 python 程序没有得到相同的结果。当我编写从 IO 板读取的命令并等待 1 秒然后读取缓冲区中的内容时,我最终读回了我刚刚发送的命令,而不是来自设备的响应。如果我通读缓冲区中的所有内容,它最终会返回响应。这是在树莓派上。这是我的代码。

import serial
import time

class UsbSerial:
    def __init__(self, serial_conf):
        self.ser = serial.Serial(serial_conf['port'], serial_conf['baud'])

    def readGPIO(self, pin):
        self.ser.write("gpio read " + ("000" + str(pin))[-3:] + "r")
        time.sleep(1)
        return self.ser.readline()

ser_conf = "port": "/dev/ttyACM0", "baud": 19200
serGPIO = UsbSerial(ser_conf)
print serGPIO.readGPIO(20)

【问题讨论】:

【参考方案1】:

嗯,它不漂亮,但这是修改后的 readGPIO 子模块,似乎可以完成这项工作。我仍然会很感激关于如何使它更好的意见。

    def readGPIO(self, pin):
        self.ser.flush()
        self.ser.write("gpio read " + ("000" + str(pin))[-3:] + "r")
        time.sleep(.1)
        x=self.ser.readline()
        x=self.ser.read(1)
        x=self.ser.read(1)
        y=self.ser.read(1)
        #time.sleep(.1)
        self.ser.flush()
        return x

【讨论】:

这意味着你掩盖了真正的问题,谁知道将来会出现什么问题。

以上是关于为啥python串行读取我写的最后一件事而不是我的串行设备的响应的主要内容,如果未能解决你的问题,请参考以下文章

在 python 中,为啥从数组读取比从列表读取慢?

实习第一周总结

Node.js 中的 JSON 数组

Kettle 中的循环

Matplotlib“实时”在python中绘图

python 输出1~100的所有偶数,为啥我写的通不过?