GPS モジュール (NEO-6M) からの GPS データを液晶ディスプレイに表示する方法

ここでは手軽に利用可能な GPS モジュール の情報を、Arduino で読み込みむ方法を説明します。

さらに、液晶ディスプレイに表示します。

なお、ここでは GPS モジュールとしては、U-blox NEO-6M GPSモジュール を利用しています。

このモジュールは TTL シリアルインターフェイスで、Arduino と簡単に接続できます。

GPS モジュールからのデータ取得

GPS データは NMEA プロトコルというデータフォーマットが広く使われています。 ここで使用する NEO-6M でも NMEA がサポートされています。

NMEA については、当サイトの記事「GPS - NMEA プロトコルを眺めてみよう」もみてください。

GPS モジュールで受け取った GPS データは、UART (TTL シリアル) インターフェイスから、直ちに文字列の形で取得できます。

※記事「GPS モジュールを PC のシリアルポートへ接続し NMEA データを確認する方法」では、 PC のシリアルポートに接続することで NMEA データを直接確認しています。

GPS モジュールの TTL シリアルから取得できる GPS データを、 Arduino で受け取り、それをパースすれば OK ということになります。

Arduino での利用

Arduino では、 GPS データを解析するためのライブラリは多数あります。ここでは TinyGPS++ というライブラリを利用しました。

Arduino でライブラリを zip でダウンロードしてきて、開発環境に追加するには、 Sketch » Include Library » Add .ZIP Library... メニューから zip を指定します。

あるいは手動で、IDE のインストールディレクトリ以下の libraries ディレクトリ内に展開します。

NEO-6M からの TTL シリアルデータを受けるためには、ここでは 8 番ピンと 9 番ピンをそれぞれ RX, TX として、 GPS の TX, RX と接続しています。そして、SoftwareSerial ライブラリを利用して、TTL シリアルインターフェイスからデータを取得しています。

プログラム例

プログラム例は次の通りです。LCD への文字表示については、「Arduino を用いて LCD に文字を表示」をみてください。

#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd( 4, 6, 10, 11, 12, 13 );
const int PIN_RX = 8, PIN_TX = 9;

TinyGPSPlus gps;
SoftwareSerial ss(PIN_RX, PIN_TX);

void setup() {
  lcd.begin(16,2);
  lcd.clear();
  
  ss.begin(9600);
}

void loop() {
  while (ss.available() > 0){
    if (gps.encode(ss.read())){
      display_coordinate();
    }
  }
}

void display_coordinate() {
  
  if (gps.location.isValid()) {

    String s;
    s = "lat=";
    s += String(gps.location.lat(), 6);
    lcd.setCursor(0,0);
    lcd.print(s);
    
    s = "lng=";
    s += String(gps.location.lng(), 6);
    lcd.setCursor(0,1);
    lcd.print(s);

  }

}

SoftwareSerial のボーレート設定等がかみ合わないと正しくデータがとれないので、正常動作しない場合は設定を変えてみるなりしてみてください。

ブレッドボードに組み上げると次の通り。

試しに外を歩いてみましたが、確かに緯度経度がとれ LCD に表示できました。

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

© 2024 基礎からの IoT 入門