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