ESP32 - GPS
Aprenda a obter localização a partir de um módulo GPS usando o ESP32 e o módulo NEO-6M GPS. Saiba como obter as coordenadas de GPS (longitude, latitude, altitude), velocidade e data/hora; como conectar o módulo GPS ao ESP32 e como programar o ESP32 passo a passo.
Neste guia, vamos descobrir como:
- Coordenadas GPS (longitude, latitude, altitude)
- Velocidade (em quilômetros por hora)
- Data e hora via GPS
Além disso, exploraremos como calcular a distância entre a posição GPS atual e um conjunto pré-definido de coordenadas GPS (como as coordenadas de Londres).
Introdução ao módulo GPS NEO-6M
Pinagem do módulo:
- VCC: conectar ao VCC (5V)
- GND: conectar ao GND (0V)
- TX: conectar ao RX do ESP32
- RX: conectar ao TX do ESP32
Código para Leitura de Dados GPS
#include <TinyGPS++.h>
#define GPS_BAUDRATE 9600
TinyGPSPlus gps;
void setup() {
Serial.begin(9600);
Serial2.begin(GPS_BAUDRATE, SERIAL_8N1, 16, 17);
Serial.println(F("ESP32 - módulo GPS"));
}
void loop() {
if (Serial2.available() > 0) {
if (gps.encode(Serial2.read())) {
if (gps.location.isValid()) {
Serial.print(F("- latitude: "));
Serial.println(gps.location.lat());
Serial.print(F("- longitude: "));
Serial.println(gps.location.lng());
Serial.print(F("- altitude: "));
if (gps.altitude.isValid())
Serial.println(gps.altitude.meters());
else
Serial.println(F("INVÁLIDO"));
} else {
Serial.println(F("- localização: INVÁLIDA"));
}
Serial.print(F("- velocidade: "));
if (gps.speed.isValid()) {
Serial.print(gps.speed.kmph());
Serial.println(F(" km/h"));
} else {
Serial.println(F("INVÁLIDO"));
}
Serial.print(F("- data/hora GPS: "));
if (gps.date.isValid() && gps.time.isValid()) {
Serial.print(gps.date.year()); Serial.print(F("-"));
Serial.print(gps.date.month()); Serial.print(F("-"));
Serial.print(gps.date.day()); Serial.print(F(" "));
Serial.print(gps.time.hour()); Serial.print(F(":"));
Serial.print(gps.time.minute()); Serial.print(F(":"));
Serial.println(gps.time.second());
} else {
Serial.println(F("INVÁLIDO"));
}
Serial.println();
}
}
if (millis() > 5000 && gps.charsProcessed() < 10)
Serial.println(F("Nenhum dado GPS recebido: verifique a fiação"));
}
Calculando a Distância até Londres
#include <TinyGPS++.h>
#define GPS_BAUDRATE 9600
TinyGPSPlus gps;
const double LONDON_LAT = 51.508131;
const double LONDON_LON = -0.128002;
void setup() {
Serial.begin(9600);
Serial2.begin(GPS_BAUDRATE, SERIAL_8N1, 16, 17);
Serial.println(F("ESP32 - módulo GPS"));
}
void loop() {
if (Serial2.available() > 0) {
if (gps.encode(Serial2.read())) {
if (gps.location.isValid()) {
double latitude = gps.location.lat();
double longitude = gps.location.lng();
unsigned long distanceKm =
TinyGPSPlus::distanceBetween(latitude, longitude, LONDON_LAT, LONDON_LON) / 1000;
Serial.print(F("- latitude: ")); Serial.println(latitude);
Serial.print(F("- longitude: ")); Serial.println(longitude);
Serial.print(F("- distância até Londres: ")); Serial.println(distanceKm);
} else {
Serial.println(F("- localização: INVÁLIDA"));
}
Serial.println();
}
}
if (millis() > 5000 && gps.charsProcessed() < 10)
Serial.println(F("Nenhum dado GPS recebido: verifique a fiação"));
}