关于 python:pySerial: port 仅在我开机后第一次使用时才有效 | 珊瑚贝

pySerial: port only works the first I use it after I power it on


我无法使用 pySerial 读取任意端口。我只能在端口打开后没有被任何程序使用时读取端口。否则,我可以打开端口,但 ser.inWaiting() 返回 0,告诉我端口缓冲区中没有数据。实际上,我可以在端口监视器中看到数据,那么为什么 pySerial 没有数据呢?我正在使用 os x 10.9.5.、python 2.7.8 和 pySerial 2.7

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
def usb():
    ser = serial.Serial(‘/dev/tty.usbmodem422651’, 115200)
    try:
        while True:
            print ser.read(1000)
    except KeyboardInterrupt:
        ser.close()
         exit

if __name__ ==“__main__”:
    testUSB()

感谢您的帮助!


你需要了解串行是如何工作的。

如果你已经打开了某个终端并读取了数据,那么它的串口输入缓冲区现在是空的。

1
2
while True:
   print ser.read(1000)

这不是一个好习惯,您可以使用 inWating 尝试以下操作:

1
2
if ser.inWaiting:
   ser.read(len(ser.inWaiting()))

您无法从 2 个不同的应用程序或软件打开端口。

一个好的代码应该是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import serial

def my_usb():
    s_handle = serial.Serial(‘/dev/tty.usbmodem422651’, 115200)

# or any other end condition
while True:
    try:
        if s_handle.inWaiting():
            print s_handle.read(s_handle.inWaiting())
    except KeyboardInterrupt:
        print“exiting….”
    finally:
        s_handle.close()

if __name__ ==“__main__”:
    my_usb()

  • 感谢您的建议。我发现,当我第一次使用端口时没有从缓冲区读取所有字节时,我无法再次使用该端口。你是对的等待!
  • NP,请记住串行端口没有内存它就像一个队列,如果您将数据弹出到软件或标准输出(屏幕),端口队列将为空,如果答案解决了问题,您可以接受它作为答案.


来源:https://www.codenong.com/29628436/

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?