从python中读取串行数据

时间:2014-02-05 18:44:51

标签: python gps serial-port nmea

我得到了返回NMEA数据的GPS模块。 当我尝试使用以下代码打印所有数据时,我得到this

while True:
try:
    rcv = port.read()
    print rcv

然后,我做了一些修改,将读取NMEA数据清理。它看起来像这样:

port = serial.Serial("/dev/ttyAMA0", baudrate=9600, timeout=10.0)

line = []
print("connected to: " + port.portstr)

while True:
    try:
        rcv = port.read()
    except:
        rcv = ''


    line.append(rcv)

    if rcv == '\n':
        line = "".join(line)        
        print line
        line = []

输出看起来像这样:

  

$ GPGGA,183345.000,5023.3424,N,01857.3817,E,1,7,1.25,313.3,男,42.1,M,* 53

     

$ GPGSA,A,3,09,26,28,08,15,18,17 ,,,,,, 1.52,1.25,0.88 * 06

     

$ GPRMC,183345.000,A,5023.3424,N,01857.3817,E,0.40,55.07,050214 ,,, A * 54

     

$ GPVTG,55.07,T ...,M,0.40,N,0.74,K,A * 0D

     

$ GPGGA,183346.000,5023.3423,N,01857.3817,E,1,7,1.25,313.3,男,42.1,M,* 57

     

$ GPGSA,A,3,09,26,28,08,15,18,17 ,,,,,, 1.52,1.25,0.88 * 06

问题在于,有时它会遗漏一些逗号或其他数据,并且NMEA解析器读错了。有没有更好更清洁的方法通过串口读取整个NMEA帧?

1 个答案:

答案 0 :(得分:4)

您可以使用readline而不是read,这将继续读取字符,直到收到EOL。