Esp32 gnss: Difference between revisions

From wikiluntti
(Created page with "== Introduction == Global Navinagation Network System * GPS (USA), * GLONASS (Russia) * BDS (Beidou) (China) * Galileo (Europe)")
 
 
(18 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Introduction ==
== Introduction ==


Global Navinagation Network System
Global Navinagation Network Systems


* GPS (USA),  
* GPS (USA),  
Line 7: Line 7:
* BDS  (Beidou) (China)
* BDS  (Beidou) (China)
* Galileo (Europe)
* 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
NEO6M
== 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)
# GND (black)
# TX output (white) -> Connect to Serial RX pin ESP32 (eg GPIO 16: UART2 RX)
# RX input (yellow) -> Connect to Serial TX pin ESP32 (eg GPIO 17: UART2 TX)
# VCC 3.6 V - 5.5 V (red)
LEDs
# TX LED: blue. The data output, TX LED flashing
# PPS LED: red. PPS LED not bright when GPS not fixed, flashing when fixed.
=== ESP32 Code ===
<syntaxhighlight lang="C">
#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"));
}
</syntaxhighlight>

Latest revision as of 10:39, 4 April 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

NEO6M

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"));
}