2014-02-05 81 views
1

我得到了返回NMEA数据的GPS模块。 当我试图打印所有使用以下代码返回的数据时,我得到this从python的串口读取数据

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,男, * 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,M,42.1, M,* 57

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

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

回答

3

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