为啥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串行读取我写的最后一件事而不是我的串行设备的响应的主要内容,如果未能解决你的问题,请参考以下文章