miércoles, 15 de octubre de 2025

GPS NEO-6M sobre ESP32

Un módulo GPS NEO-6M conectado a un microcontrolador ESP32 nos permite obtener datos GPS en formato NMEA. También se pueden obtener fácilmente la latitud, la longitud, la altitud, la velocidad y la hora UTC usando la biblioteca TinyGPSPlus

Podemos realizar un diseño similar al siguiente con el Cirkit Designer.

Estos son los pines del GPS que se han de conectar en el ESP32. Como podemos ver, los cables que unen el Tx y Rx del GPS y del ESP32 están cruzados. El pin Tx de uno está unido con el pin Rx del otro y viceversa.

Programa de Arduino

/*********
  Rui Santos & Sara Santos - Random Nerd Tutorials
  Complete instructions at https://RandomNerdTutorials.com/esp32-neo-6m-gps-module-arduino/
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*********/

 // Define the RX and TX pins for Serial 2
#define RXD2 16
#define TXD2 17

#define GPS_BAUD 9600

// Create an instance of the HardwareSerial class for Serial 2
HardwareSerial gpsSerial(2);

void setup(){
  // Serial Monitor
  Serial.begin(115200);
  
  // Start Serial 2 with the defined RX and TX pins and a baud rate of 9600
  gpsSerial.begin(GPS_BAUD, SERIAL_8N1, RXD2, TXD2);
  Serial.println("Serial 2 started at 9600 baud rate");
}

void loop(){
  while (gpsSerial.available() > 0){
    // get the byte data from the GPS
    char gpsData = gpsSerial.read();
    Serial.print(gpsData);
  }
  delay(1000);
  Serial.println("-------------------------------");
}

El monitor serie mostrará información en formato NMEA con datos GPS. Al ejecutar este programa por primera vez, puede tardar unos minutos en obtener una posición. Empezará a obtener datos reales cuando el LED rojo empiece a parpadear.

La información en formato NMEA comienza con el carácter $ y cada campo de datos está separado por una coma.

$GPRMC ,110827.00,A,4107.32485,N,00831.79799,W,0.888,30.44,180724,,,A*4B 

$GPVTG ,30.44,T,,M,0.888,N,1.644,K,A*01 

$GPGGA ,110827.00,41XX.32485,N,00831.79799,W,1,07,0.99,123.1,M,50.1,M,,*48 

$GPGSA ,A,3,03,32,22,08,04,14,17,,,,,,,2.25,0.99,2.02*0A 

$GPGSV ,3,1,11,3,11,22,26,296,29,27,01,142,,32,17,042,23*48 

$GPGLL ,4107.32485,N,00831.79799,W,110827.00,A,A*7F

Existen diferentes tipos de sentencias NMEA. El tipo de mensaje se indica mediante los caracteres antes de la primera coma.

El GP después del $ indica que se trata de una posición GPS. $GPGGA es el mensaje NMEA GPS básico, que proporciona datos de ubicación y precisión en 3D.

En la siguiente sentencia:

$GPGGA ,110827.00,41XX.32485,N,008XX.XXXXX,W,1,07,0.99,123.1,M,50.1,M,,*48

110827  – representa la hora en la que se tomó la ubicación fija, 11:08:27 UTC

41XX.32845,N  – latitud 41 grados XX.32845,N

00831.79799,W  – Longitud 008 grados XX.XXXXX′ O

1  – calidad de la corrección (0 = no válida; 1 = corrección GPS; 2 = corrección DGPS; 3 = corrección PPS; 4 = cinemática en tiempo real; 5 = RTK flotante; 6 = estimada (estimación); 7 = modo de entrada manual; 8 = modo de simulación)

07  – número de satélites rastreados

0,99  – Dilución horizontal de la posición (menos de uno es ideal)

123.1, M  – Altitud, en metros sobre el nivel del mar

50.1, M  – Altura del geoide (nivel medio del mar) sobre el elipsoide WGS84

campo vacío – tiempo en segundos desde la última actualización de DGPS

campo vacío – número de identificación de la estación DGPS

*4 8 – los datos de la suma de comprobación, siempre comienzan con *

Las otras sentencias NMEA proporcionan información adicional:

$GPGSA  – DOP GPS y satélites activos

$GPGSV  – Información detallada del satélite GPS

$GPGLL  – Latitud y longitud geográfica

$GPRMC  – Datos esenciales de GPS pvt (posición, velocidad, tiempo)

$GPVTG  – La velocidad se ha mantenido

Se puede utilizar este analizador NMEA en línea y pegar sus oraciones allí para interpretar los datos del GPS.

Sin embargo, la forma más sencilla de obtener e interpretar los datos GPS deseados es analizar las sentencias NMEA directamente en el código. Para ello, podemos usar la biblioteca TinyGPSPlus, que proporciona métodos para extraer datos de las sentencias NMEA fácilmente.

A continuación se puede ver la posición de la antena del GPS respecto de la ventana que tiene más cerca. Desde aquí proporciona correctamente los datos que se muestran en el puerto serie. Estuvo funcionando sin interrupción durante más de un cuarto de hora.



El siguiente programa está realizado en SteamakersBlocks.

Cuando recibe la información de los satélites, envía por el puerto serie el valor de la latitud, longitud, altitud y hora UTC. Cuando recibe señal parpadea el led rojo del módulo GPS. El valor de la altitud no es estable, ha variado entre 90 y 150 metros.




No hay comentarios: