先日、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の使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。
リンク
ごく基本的なところから、かなり複雑なスケッチや、ネットワーク接続など、比較的高度なものまで、つまづかずに読み進めていけるような構成になっており、大変わかりやすい本です。