1.Environment setup: Refer to Arduino IDE Getting Started Tutorial to complete the IDE installation, and install the corresponding board manager and required driver libraries according to the actual development board used.
2.Required libraries:
3.Required hardware products:
G18 (RX)
, G17 (TX)
.Module GPS v2.0/v2.1 also supports switching pin connections via the DIP switch at the bottom, which can be adjusted as needed. The left image below is Module GPS v2.0, the right image is Module GPS v2.1. The part framed in yellow indicates the additional selectable pins in v2.1 compared to v2.0.
UnitGPSExample
example program in TinyGPSPlus, modify the corresponding UART initialization pins. Based on M5Unified and M5GFX, add basic coordinate display functionality to the example program./*
*SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
*
*SPDX-License-Identifier: MIT
*/
#include "M5Unified.h"
#include "M5GFX.h"
#include "MultipleSatellite.h"
static const int RXPin = 18, TXPin = 17;
static const uint32_t GPSBaud = 115200;
MultipleSatellite gps(Serial1, GPSBaud, SERIAL_8N1, RXPin, TXPin);
void displayInfo();
void setup()
{
M5.begin();
Serial.begin(115200);
gps.begin();
gps.setSystemBootMode(BOOT_FACTORY_START);
Serial.println(F("DeviceExample.ino"));
Serial.println(F("A simple demonstration of TinyGPSPlus with an attached GPS module"));
Serial.print(F("Testing TinyGPSPlus library v. "));
Serial.println(TinyGPSPlus::libraryVersion());
Serial.println(F("by Mikal Hart"));
Serial.println();
String version = gps.getGNSSVersion();
Serial.printf("GNSS SW=%s\r\n", version.c_str());
delay(1000);
// Set satellite mode
gps.setSatelliteMode(SATELLITE_MODE_GPS);
M5.Display.setFont(&fonts::FreeMonoBold12pt7b);
}
void loop()
{
// Update data
gps.updateGPS();
displayInfo();
delay(10);
}
void displayInfo()
{
Serial.print(F("Location: "));
Serial.printf("satellites:%d\n", gps.satellites.value());
if (gps.location.isUpdated()) {
Serial.print(gps.location.lat(), 6);
Serial.print(F(","));
Serial.print(gps.location.lng(), 6);
Serial.print(F("\n"));
M5.Display.fillRect(0, 0, 320, 60, BLACK);
M5.Display.setCursor(0, 0);
M5.Display.printf("Location: \nLat: %f\nlng: %f\n", gps.location.lat(), gps.location.lng());
} else {
M5.Display.fillRect(0, 0, 320, 60, BLACK);
M5.Display.setCursor(0, 0);
M5.Display.print("Location: \n");
M5.Display.print("Lat: ---------\n");
M5.Display.print("lng: ---------\n");
Serial.print(F("INVALID\n"));
}
Serial.print(F(" Date/Time: "));
if (gps.date.isUpdated()) {
Serial.print(gps.date.month());
Serial.print(F("/"));
Serial.print(gps.date.day());
Serial.print(F("/"));
Serial.print(gps.date.year());
M5.Display.fillRect(0, 100, 320, 60, BLACK);
M5.Display.setCursor(0, 100);
M5.Display.printf("Date/Time: %d/%d/%d\n", gps.date.month(), gps.date.day(), gps.date.year());
} else {
Serial.print(F("INVALID"));
}
Serial.print(F(" "));
if (gps.time.isUpdated()) {
if (gps.time.hour() < 10) Serial.print(F("0"));
Serial.print(gps.time.hour());
Serial.print(F(":"));
if (gps.time.minute() < 10) Serial.print(F("0"));
Serial.print(gps.time.minute());
Serial.print(F(":"));
if (gps.time.second() < 10) Serial.print(F("0"));
Serial.print(gps.time.second());
Serial.print(F("."));
if (gps.time.centisecond() < 10) Serial.print(F("0"));
Serial.print(gps.time.centisecond());
M5.Display.fillRect(0, 160, 320, 60, BLACK);
M5.Display.setCursor(0, 160);
M5.Display.printf("Time: %d:%d:%d.%d\n", gps.time.hour(), gps.time.minute(), gps.time.second(),
gps.time.centisecond());
} else {
Serial.print(F("INVALID"));
}
Serial.println();
delay(1000);
}
Connect the matched external antenna, place the antenna near a window or in an open outdoor area, and wait for the device to successfully search satellites and obtain coordinates.