M5STICK-Cの汎用I/Oポートがどこまで汎用なのか?を知りたいので、前回はI2C接続でしたが、今回は、UART接続に挑戦してみます!
また、手元にあった秋月電子のGPSモジュール(AE-GPS)をM5STICK-Cに繋いで、位置情報を取得してみましょう!
ソースコード
TinyGPS Plusのライブラリーを使用しています。
// M5STICK-Cで、GPS(UART接続)を繋いで値を取得する
// Programed by Kazuyuki Eguchi
#include <M5StickC.h>
#include <TinyGPS++.h>
HardwareSerial GPSUART(1);
TinyGPSPlus gps;
void setup() {
M5.begin();
M5.Axp.ScreenBreath(9); // バックライトの明るさ(7-15)
M5.Lcd.setRotation(1);
M5.Lcd.fillScreen(TFT_BLACK);
M5.Lcd.setTextSize(2);
M5.Lcd.setTextColor(TFT_YELLOW);
M5.Lcd.setCursor(0, 0);
GPSUART.begin(9600, SERIAL_8N1, 26, 36);
}
void loop() {
if (GPSUART.available()) {
int inByte = GPSUART.read();
// Serial.write(inByte);
if(gps.encode(inByte)){
displayInfo();
}
}
}
void displayInfo()
{
M5.Lcd.fillScreen(TFT_BLACK);
M5.Lcd.setCursor(0, 0);
Serial.print(F("Location: "));
M5.Lcd.print(F("Location: "));
if (gps.location.isValid())
{
M5.Lcd.print(gps.location.lat(), 6);
M5.Lcd.print(F(","));
M5.Lcd.print(gps.location.lng(), 6);
Serial.print(gps.location.lat(), 6);
Serial.print(F(","));
Serial.print(gps.location.lng(), 6);
}
else
{
M5.Lcd.print(F("INVALID"));
Serial.print(F("INVALID"));
}
M5.Lcd.print(F(" Date/Time: "));
Serial.print(F(" Date/Time: "));
if (gps.date.isValid())
{
M5.Lcd.print(gps.date.month());
M5.Lcd.print(F("/"));
M5.Lcd.print(gps.date.day());
M5.Lcd.print(F("/"));
M5.Lcd.print(gps.date.year());
Serial.print(gps.date.month());
Serial.print(F("/"));
Serial.print(gps.date.day());
Serial.print(F("/"));
Serial.print(gps.date.year());
}
else
{
M5.Lcd.print(F("INVALID"));
Serial.print(F("INVALID"));
}
M5.Lcd.print(F(" "));
Serial.print(F(" "));
if (gps.time.isValid())
{
if (gps.time.hour() < 10) {
M5.Lcd.print(F("0"));
Serial.print(F("0"));
}
M5.Lcd.print(gps.time.hour());
M5.Lcd.print(F(":"));
Serial.print(gps.time.hour());
Serial.print(F(":"));
if (gps.time.minute() < 10) {
M5.Lcd.print(F("0"));
Serial.print(F("0"));
}
M5.Lcd.print(gps.time.minute());
M5.Lcd.print(F(":"));
Serial.print(gps.time.minute());
Serial.print(F(":"));
if (gps.time.second() < 10) {
M5.Lcd.print(F("0"));
Serial.print(F("0"));
}
M5.Lcd.print(gps.time.second());
M5.Lcd.print(F("."));
Serial.print(gps.time.second());
Serial.print(F("."));
if (gps.time.centisecond() < 10) {
M5.Lcd.print(F("0"));
Serial.print(F("0"));
}
M5.Lcd.print(gps.time.centisecond());
Serial.print(gps.time.centisecond());
}
else
{
M5.Lcd.print(F("INVALID"));
Serial.print(F("INVALID"));
}
Serial.println();
}
動作イメージ
以上、ご参考までに