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 フレーム全体を読み取る、より適切でクリーンな方法はありますか?