A TinyGPS upgrade adding NMEA v3.0 and GLONASS support

TL;DR: Checkout my forked https://github.com/florind/TinyGPS, adding GLONASS and NMEA 3.x support and that it’s fully compatible with the original TinyGPS and Arduino.

It’s been too long of a dry streak on my blog (four years!) but in the mean time I’ve been actively working on several projects. About 3,5 years ago I have reconnected with hardware engineering, a hobby of mine ever since I was a kid.
I am integrating GPS in one of my Arduino-compatible hardware projects and I’m using a Maestro Wireless part, called A5100 that notably comes with GLONASS support (the Russian constellation of GPS satellites).
There’s some pretty nice GPS support in the TinyGPS project but it lacks any of the advancements in the field such as NMEA v3.0 or support for additional constellations. This means that some good data is ignored when parsing NMEA sentences from devices such as the aforementioned A5100.

I have therefore worked on an update to TinyGPS to incorporate some missing support that I published here https://github.com/florind/TinyGPS. This is a drop-in replacement for TinyGPS and backwards compatible with any NMEA compatible GPS receiver integrated with your Arduino.

The full complement of details is in the Github documentation. Notably, this update adds GLONASS support and exposes some interesting data when not tracking:
– Date and time
– Satellites in view

With this data we can build GPS user interfaces containing more advanced data. Here’s one I’ve built on a small Sharp ePaper LCD model LS013B4DN04

gps-notrack gps-track

The left screen capture shows the GPS device searching for a fix. There is a valid date and time shown on the top as well as the satellites in view: 4 from the GPS constellation and 5 from the GLONASS constellation (having PRNs 65 and above). Each satellite specifies its signal/noise ratio in dB (abbreviated to ‘d’ here).
NMEA IDs in depth here: https://github.com/mvglasow/satstat/wiki/NMEA-IDs.

The screen capture on the right shows the GPS device tracking. Satellites in view are still showing although only three are participating in the solution. Shown is also the GNS mode indicator, the “AN” string, indicating that only the GPS constellation is used in the solution in this moment.

If you wonder what the e210 is, it’s the horizontal dilution of precision, HDOP. Divide by 100 to get to the ranges specified on wikipedia.

A5100 and other modern GPS parts promise out of the box support for Galileo who will become operational in 2016 and BEIDOU, already operational in Asia.
As this update only adds GLONASS support, feel free to add support for others if they’re available in your area (BEIDOU for now).

  • Валерий Лем

    Hello, I have connected VK2828 gps/glonass/beidou, on bitrate 19200. It is not displayed the number of satellites, hdop and altitude at all in sketch “test_with_gps_device.ino”. At the same time, latitude and longitude in this sketch are shown more accurately, if it compared with the coordinates taken from Google maps. Sketch with TinyGPS++ parser, shows 5…6 sats in the same place & time.
    Where I have to look for the cause?

  • stamasd

    I have the same issue with my setup. The module is a Beitian BN-357 (ublox8-compatible) which supports GPS and GLONASS out-of-the-box (raw output is a mix of GPS and GLONASS sentences); the output is fed into a ESP32-devkitV1 board using the latest Arduino for ESP32 from Expressif. Blank output of number of satellites, HDOP and altitude. The latitude and longitude are accurate. With this module I can routinely track (using a different setup) between 8 and 13 satellites at a time.