M5StickCでGPSユニットを使う

先日、M5StickCの環境構築、および動作確認を行いました(記事は こちら)。


ところで、M5StickCにはGroveポートがついているので、今回は、これを使ってセンサをつないでみようと思います。

今回使うのは「M5Stack用GPSユニット」です。



このGPSユニットは、1500円程度と非常に安価ながら、GroveケーブルでM5StackやM5StickCにつないで使用することができます。

まずは、GPSデータを解析するためのライブラリ(TinyGPS++)をインストールします。

  • ライブラリのダウンロードページ( http://arduiniana.org/libraries/tinygpsplus/ )を開きます。

  • 「Download」ボタンをクリックします。

  • 最新版のライブラリをダウンロードします。
  • 解凍後、フォルダ名を「TinyGPSPlus」に変更して、「Arduino\libraries」フォルダ下に置きます。

以下のようなスケッチを書いてみました。
一定期間毎にGPSデータを取り込み、M5StickCのディスプレイに経度、緯度を表示するものです。
以下のふたつのサンプルスケッチを参考にしました。

  • 「ファイル」>「スケッチ例」>「M5StickC」>「Unit」>「GPS」>「GPSRaw」
  • 「ファイル」>「スケッチ例」>「TinyGPS++」>「DeviceExample」
#include <M5StickC.h>
#include <TinyGPS++.h>

HardwareSerial GPSRaw(2);
TinyGPSPlus gps;

int cnt=0;

void setup() {
  M5.begin();
  M5.Lcd.setRotation(3);
  GPSRaw.begin(9600, SERIAL_8N1, 33, 32);
}

void loop() {
  M5.Lcd.setCursor(0, 0, 2);
  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.printf("### GPS TEST %d\n", cnt++);
  while(GPSRaw.available()>0) {
    if(gps.encode(GPSRaw.read())) {
      break;
    }
  }
  if(gps.location.isValid()) {
    M5.Lcd.printf("LAT:%.6f\n", gps.location.lat() );
    M5.Lcd.printf("LNG:%.6f\n", gps.location.lng() );
    M5.Lcd.printf("ALT:%.2f\n", gps.altitude.meters() );
  } else {
    M5.Lcd.printf("INVALID\n");
  }
  delay(5000);
}

M5StickCとGPSユニットを屋外に持っていき、しばらく待っていると、ディスプレイに情報が表示されました。

位置情報はさまざまな用途に使えそうです。

なお、私がM5Stack、M5StickCの使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。


ごく基本的なところから、かなり複雑なスケッチや、ネットワーク接続など、比較的高度なものまで、つまづかずに読み進めていけるような構成になっており、大変わかりやすい本です。


このサイトで書いている、M5Stackシリーズ(M5Stack、M5StickCなど)に関するブログ記事を、「さとやまノート」という別のブログページに、あらためて整理してまとめました。

他のM5Stackシリーズの記事にも興味のある方は「さとやまノート」をご覧ください。