GPS - NMEA プロトコルを眺めてみよう

NEO-6M などの多くの GPS モジュールからは、 NMEA プロトコルと呼ばれるデータ形式で、GPS のデータが取得できます。

Arduino などで GPS モジュールを利用する場合は、通常 TinyGPS などのライブラリを利用するので、 NMEA を直接自前で解析することなく、 必要なデータを取り出すことが可能です。

しかしながら、背後で動いているデータを理解しておくことは、特に問題が発生したときの調査等で役に立つことが多いので、 ここでは簡単に NMEA データを眺めておきましょう。

GPS データは NMEA プロトコルで取得

NEO-6M を用いて、シリアルポートに送られたデータをシリアルモニター等でみると、次のような文字列が取得できました。

良くみると、$GPRMC とか $GPVTG などの文字に続き、カンマ区切りでデータが記載されていることがわかります。

$GPRMC は推奨最小GPSデータです。手元で取得したデータにも多く含まれているので、試しにこのデータの内容を読み解いてみましょう。

$GPRMC,071323.00,A,3348.65406,N,11819.22616,W,0.047,,270716,,,A*6C

1番目のセクションは 071323。 これは UTC 時刻の 07:13:23 UTC であることを示しています。

2番目のセクションは A。これはナビゲーション受信機の警告を表します。 A は "OK"。V が "警告" です。

3, 4番目のセクションは 3348.65406,N。これは緯度。北緯 (N)、33 度48.65406 分です。

5, 6番目のセクションは 11819.22616,W。これは経度。西経(W)、118度19.22616分です。

7番目のセクションは 0.047。これは地表面に対する速度 (ノット) です。1 ノットは約1.9 km/h ですから、 0.047 ノットは時速約 0.09 km/hです。

8番目のセクションはここでは空。

9番目のセクションは 270716。これは UTC 時刻での日付で MMDDYY です。ここでは 2016年7月27日です。

10番目のセクションは進んでいる向きになりますが、ここでは空。

11番目のセクションは NMEA リリース 2.3 から追加されたモードインジケータですが、ここでは空。

最後のセクションはチェックサムです。

以上で緯度経度とUTC時刻がわかります。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 基礎からの IoT 入門