Esp32 gnss: Difference between revisions

From wikiluntti
Line 124: Line 124:
         Serial.print(gps.date.year());
         Serial.print(gps.date.year());
         Serial.print(F("-"));
         Serial.print(F("-"));
         Serial.print(gps.date.month());
         Serial.printf("%02d",gps.date.month());
         Serial.print(F("-"));
         Serial.print(F("-"));
         Serial.print(gps.date.day());
         Serial.print(gps.date.day());
Line 130: Line 130:
         Serial.print(gps.time.hour());
         Serial.print(gps.time.hour());
         Serial.print(F(":"));
         Serial.print(F(":"));
         Serial.print(gps.time.minute());
         Serial.printf("%02d", gps.time.minute());
         Serial.print(F(":"));
         Serial.print(F(":"));
         Serial.print(gps.time.second());
         Serial.print("%02d", gps.time.second());
       } else {
       } else {
         Serial.print(F("Nan"));
         Serial.print(F("Nan"));

Revision as of 16:10, 21 March 2025

Introduction

Global Navinagation Network Systems

  • GPS (USA),
  • GLONASS (Russia)
  • BDS (Beidou) (China)
  • Galileo (Europe)

GPS based:

  • Japan's Quasi-Zenith Satellite System (QZSS)
  • India's GAGAN
  • European EGNOS

NMEA 0183 standard

See https://aprs.gids.nl/nmea/

Comma-delimited text format consists of rows of data.

Examples

  • $GPBOD – Bearing, origin to destination
  • $GPBWC – Bearing and distance to waypoint, great circle
  • $GPGGA – Global Positioning System Fix Data
  • $GPGLL – Geographic position, latitude / longitude
  • $GPGSA – GPS DOP and active satellites
  • $GPGSV – GPS Satellites in view
  • $GPHDT – Heading, True
  • $GPR00 – List of waypoints in currently active route
  • $GPRMA – Recommended minimum specific Loran-C data
  • $GPRMB – Recommended minimum navigation info
  • $GPRMC – Recommended minimum specific GPS/Transit data
  • $GPRTE – Routes
  • $GPTRF – Transit Fix Data
  • $GPSTN – Multiple Data ID
  • $GPVBW – Dual Ground / Water Speed
  • $GPVTG – Track made good and ground speed
  • $GPWPL – Waypoint location
  • $GPXTE – Cross-track error, Measured
  • $GPZDA – Date & Time

GPS Libraries

SoftwareSerial because the Serial port is used by USB.

TinyGPS

TinyGPS++

Basic GPS Module Operation – Beitian 180 & 220 with Arduino

Beitian 180 & 220

Beitian

Specs

Beitian BN-180 GPS includes

  • GPS antenna,
  • GNSS antenna,
  • RTK antenna,
  • Beisan RDSS antenna,
  • GPS module,
  • GNSS module, board,
  • GNSS receiver,
  • Beidou module.

Size 18*18*6.2mm

Pins (from left to right)

  1. GND (black)
  2. TX output (white) -> Connect to Serial RX pin ESP32 (eg GPIO 16: UART2 RX)
  3. RX input (yellow) -> Connect to Serial TX pin ESP32 (eg GPIO 17: UART2 TX)
  4. VCC 3.6 V - 5.5 V (red)

LEDs

  1. TX LED: blue. The data output, TX LED flashing
  2. PPS LED: red. PPS LED not bright when GPS not fixed, flashing when fixed.

ESP32 Code

#include <TinyGPS++.h>
#define GPS_BAUDRATE 9600  // The default baudrate of NEO-6M is 9600

TinyGPSPlus gps;  // the TinyGPS++ object

void setup() {
  Serial.begin(9600);
  Serial2.begin(GPS_BAUDRATE, SERIAL_8N1, 16, 17);

  Serial.println(F("ESP32 - GPS module"));
  Serial.println(F("Lat, Lon, Alt, speed [m/s], Datetime"));
}

void loop() {
  if (Serial2.available() > 0) {
    if (gps.encode(Serial2.read())) {
      if (gps.location.isValid()) {
        Serial.print(gps.location.lat(), 8);

        Serial.print(F(", "));
        Serial.print(gps.location.lng(), 8);

        Serial.print(F(", "));
        if (gps.altitude.isValid())
          Serial.print(gps.altitude.meters());
        else
          Serial.print(F("INVALID"));
      } else {
        Serial.print(F("Nan, Nan"));
      }

      Serial.print(F(", "));
      if (gps.speed.isValid()) {
        Serial.print(gps.speed.mps());
      } else {
        Serial.print(F("NaN"));
      }

      Serial.print(F(", "));
      if (gps.date.isValid() && gps.time.isValid()) {
        Serial.print(gps.date.year());
        Serial.print(F("-"));
        Serial.printf("%02d",gps.date.month());
        Serial.print(F("-"));
        Serial.print(gps.date.day());
        Serial.print(F(" "));
        Serial.print(gps.time.hour());
        Serial.print(F(":"));
        Serial.printf("%02d", gps.time.minute());
        Serial.print(F(":"));
        Serial.print("%02d", gps.time.second());
      } else {
        Serial.print(F("Nan"));
      }

      Serial.println();
    }
  }

  if (millis() > 5000 && gps.charsProcessed() < 10)
    Serial.println(F("No GPS data received: check wiring"));
}