/NeoGPS

NMEA and ublox GPS parser for Arduino, configurable to use as few as 10 bytes of RAM

Primary LanguageC++

NeoGPS

This fully-configurable Arduino library uses minimal RAM, PROGMEM and CPU time, requiring as few as 10 bytes of RAM, 866 bytes of PROGMEM, and less than 1mS of CPU time per sentence.

It supports the following protocols and messages:

####NMEA 0183

  • GPGGA - System fix data
  • GPGLL - Geographic Latitude and Longitude
  • GPGSA - DOP and active satellites
  • GPGST - Pseudo Range Error Statistics
  • GPGSV - Satellites in View
  • GPRMC - Recommended Minimum specific GPS/Transit data
  • GPVTG - Course over ground and Ground speed
  • GPZDA - UTC Time and Date

The "GP" prefix usually indicates an original GPS source. NeoGPS parses all Talker IDs, including

This means that GLRMC, GBRMC or BDRMC, GARMC and GNRMC will also be correctly parsed. See discussion of Talker IDs in Configurations.

Most applications can be fully implemented with the standard NMEA messages above. They are supported by almost all GPS manufacturers.

However, to illustrate how unique capabilities of a particular device can be utilized, derived classes are also provided for ublox devices.

(This is the plain Arduino version of the CosaGPS library for Cosa.)

Goals

In an attempt to be reusable in a variety of different programming styles, this library supports:

  • resource-constrained environments (e.g., ATTINY targets)
  • sync or async operation (main loop() vs interrupt processing)
  • event or polling (deferred handling vs. continuous fix() calls in loop())
  • single, fused or coherent fixes (multiple reports into one)
  • optional buffering of fixes
  • optional floating point
  • configurable message sets, including hooks for implementing proprietary NMEA messages
  • configurable message fields
  • multiple protocols from same device
  • any kind of input stream (Serial, SoftwareSerial, PROGMEM arrays, etc.)

Inconceivable!

Don't believe it? Check out these detailed sections:

Section Description
[Installing] (doc/Installing.md) Copying files
[Data Model](doc/Data Model.md) Aggregating pieces into a fix
Configurations Tailoring NeoGPS to your needs
Performance 37% to 72% faster! Really!
RAM requirements Doing it without buffers!
Program Space requirements Making it fit
Examples Programming styles
Troubleshooting Troubleshooting
Extending NeoGPS Using specific devices
ublox ublox-specific code
Tradeoffs Comparing to other libraries
Acknowledgements Thanks!