2

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,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

read の代わりに readline を使用できます。これは、EOL が受信されるまで文字を読み続けます。

于 2014-02-05T18:59:55.877 に答える