Python library for parsing the NMEA 0183 protocol (GPS)
Alternatives To Pynmea2
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Pynmea25376223a month ago44April 13, 202134mitPython
Python library for parsing the NMEA 0183 protocol (GPS)
Gps Glonass Android Driver24
3 years ago5C
GPS/GLONASS generic android driver (
5 years agoJava
Manage your trips containing several steps with a description, photos and GPS points.
Material Ui Gps Player5
3 years ago15March 03, 2020mitJavaScript
GPS player developed using react and material ui
8 years agomitPython
A python toolbox for GPS data processing
Alternatives To Pynmea2
Select To Compare

Alternative Project Comparisons


pynmea2 is a python library for the NMEA 0183 protocol

pynmea2 is based on pynmea by Becky Lewis

The pynmea2 homepage is located at Knio/pynmea2


pynmea2 is compatable with Python 2.7 and Python 3.4+

Python version Build Status Coverage status


The recommended way to install pynmea2 is with pip:

pip install pynmea2

PyPI version PyPI downloads


You can parse individual NMEA sentences using the parse(data, check=False) function, which takes a string containing a NMEA 0183 sentence and returns a NMEASentence object. Note that the leading '$' is optional and trailing whitespace is ignored when parsing a sentence.

With check=False, parse will accept NMEA messages that do not have checksums, however it will still raise pynmea2.ChecksumError if they are present. check=True will also raise ChecksumError if the checksum is missing.


>>> import pynmea2
>>> msg = pynmea2.parse("$GPGGA,184353.07,1929.045,S,02410.506,E,1,04,2.6,100.00,M,-33.9,M,,0000*6D")
>>> msg
<GGA(timestamp=datetime.time(18, 43, 53), lat='1929.045', lat_dir='S', lon='02410.506', lon_dir='E', gps_qual='1', num_sats='04', horizontal_dil='2.6', altitude=100.0, altitude_units='M', geo_sep='-33.9', geo_sep_units='M', age_gps_data='', ref_station_id='0000')>

The NMEASentence object has different properties, depending on its sentence type. The GGA message has the following properties:

>>> msg.timestamp
datetime.time(18, 43, 53)
>>> msg.lat_dir
>>> msg.lon
>>> msg.lon_dir
>>> msg.gps_qual
>>> msg.num_sats
>>> msg.horizontal_dil
>>> msg.altitude
>>> msg.altitude_units
>>> msg.geo_sep
>>> msg.geo_sep_units
>>> msg.age_gps_data
>>> msg.ref_station_id

Additional properties besides the ones explicitly in the message data may also exist.

For example, latitude and longitude properties exist as helpers to access the geographic coordinates as python floats (DD, "decimal degrees") instead of the DDDMM.MMMM ("Degrees, minutes, seconds") format used in the NMEA protocol. latitude_minutes, latitude_seconds, longitude_minutes, and longitude_seconds are also supported and allow easy creation of differently formatted location strings.

>>> msg.latitude
>>> msg.longitude
>>> '%02d°%07.4f′' % (msg.latitude, msg.latitude_minutes)
>>> '%02d°%02d′%07.4f″' % (msg.latitude, msg.latitude_minutes, msg.latitude_seconds)


You can create a NMEASentence object by calling the constructor with talker, message type, and data fields:

>>> import pynmea2
>>> msg = pynmea2.GGA('GP', 'GGA', ('184353.07', '1929.045', 'S', '02410.506', 'E', '1', '04', '2.6', '100.00', 'M', '-33.9', 'M', '', '0000'))

and generate a NMEA string from a NMEASentence object:

>>> str(msg)

File reading example

See examples/

import pynmea2

file = open('examples/data.log', encoding='utf-8')

for line in file.readlines():
        msg = pynmea2.parse(line)
    except pynmea2.ParseError as e:
        print('Parse error: {}'.format(e))

pySerial device example

See examples/

import io

import pynmea2
import serial

ser = serial.Serial('/dev/ttyS1', 9600, timeout=5.0)
sio = io.TextIOWrapper(io.BufferedRWPair(ser, ser))

while 1:
        line = sio.readline()
        msg = pynmea2.parse(line)
    except serial.SerialException as e:
        print('Device error: {}'.format(e))
    except pynmea2.ParseError as e:
        print('Parse error: {}'.format(e))
Popular Gps Projects
Popular Properties Projects
Popular Hardware Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Python Library