【问题标题】:throwing exception SerialException: device reports readiness to read but returned no data抛出异常 SerialException:设备报告已准备好读取但未返回数据
【发布时间】:2017-08-13 16:15:33
【问题描述】:

我的树莓派通过串行引脚连接到微控制器。我正在尝试从串口读取数据。该脚本读取数据几秒钟。但是,它会终止抛出以下异常

serial.serialutil.SerialException:设备报告已准备好读取但未返回数据(设备已断开连接?)

我使用了以下python代码

#!/usr/bin/python
import serial
import time
serialport = serial.Serial("/dev/ttyAMA0", 115200, timeout=.5)

while 1:

       response = serialport.readlines(None)
       print response 
       time.sleep(.05)


serialport.close()

【问题讨论】:

    标签: python python-2.7 serial-port raspberry-pi


    【解决方案1】:

    如果您认真地尝试传输和打印文件,则应该使用以下代码:

    for line in serialport.readlines().split('\n'):
        print line
    

    ----------------------------------------------- -------------

    我相信您遇到了问题,因为您使用的是 readlines(None) 而不是 readline() Readline() 一次读取一行,并且会等待每一行。如果读取整个文件,它将比 readlines 慢。但是 readlines() 需要一个完整的文件。它显然不是在等待您的串行传输速度。

    ----------------------------------------------- ---

    我的数据记录循环每两分钟接收一行并将其写入文件。它可以像您在 OP 中显示的那样轻松打印每一行。 readine() 等待每一行。我已经通过更改 Nano 上的程序对其进行了测试,可以在两行之间等待长达 30 分钟,没有任何问题。

    import datetime
    import serial
    ser = serial.Serial("/dev/ttyUSB0",9600)     --/dev/ACM0 is fine 
    
    while True :
        linein = ser.readline()
    
        date   = str(datetime.datetime.now().date())
        date   = date[:10]            
        time   = str(datetime.datetime.now().time())
        time   = time[:8]
    
        outline = date + tab + time + tab + linein
    
        f = open("/home/pi/python/today.dat","a")
        f.write(outline)
        f.close()
    

    也许改用这种方法对你会更好。

    【讨论】:

      猜你喜欢
      • 2017-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多