2

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

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

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

问题是有时它会遗漏一些逗号或其他数据,并且 NMEA 解析器读取错误。有没有更好更干净的方法来通过串行读取整个 NMEA 帧?

4

1 回答 1

5

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

于 2014-02-05T18:59:55.877 回答