During the summer months of 2010, I decided to better understand interfacing with GPS data by creating some simple experiments to actually see how GPS’s work, and how I can use them in my projects.
GPS NMEA Syntax
NMEA 0183 (or NMEA for short) is a combined electrical and data specification for communication between marine electronic devices such as echo sounder, sonars, anemometer, gyrocompass,autopilot, GPS receivers and many other types of instruments. It has been defined by, and is controlled by, the U.S.-based National Marine Electronics Association.
As an example, a waypoint arrival alarm has the form:
- $GPAAM,A,A,0.10,N,WPTNME*32
where:
| GP | Talker ID (GP for a GPS unit, GL for a GLONASS) |
| AAM | Arrival alarm |
| A | Arrival circle entered |
| A | Perpendicular passed |
| 0.10 | Circle radius |
| N | Nautical miles |
| WPTNME | Waypoint name |
| *32 | Checksum data |
With the syntax of the NMEA understood, I could better parse the data and make it into a more human readable form. After I had written a simple Arduino sketch to test this, I decided to test it on a drive across Southwestern Ontario. Here is an example of the human readable data.
type time latitude longitude speed (km/h) course
T 2009-08-01 15:47:04.949 43.6538817 -79.4253933 4.1 255.4
T 2009-08-01 15:47:05.948 43.6539333 -79.4254717 5.3 263.2
T 2009-08-01 15:47:06.951 43.6539367 -79.4254733 3.6 246.2
T 2009-08-01 15:47:07.948 43.6539067 -79.4256150 5.0 254.8
T 2009-08-01 15:47:08.951 43.6539217 -79.4255083 5.3 256.2
T 2009-08-01 15:47:09.951 43.6539000 -79.4254350 7.8 253.8
And here is a screen capture of the data plotted in Google Earth.
