A Small experiment using GPS module

Full form of GPS is global positioning system. GPS is one of the very superb inventions that help us very much. GPS finds the position by making satellites as reference. It is accurate upto some meters. Now a days almost everyone in the world are using gps for navigation. Here I am sharing my experience with a gps module. GPS modules are available in electronic shops. The picture of a gps module is shown below.

gps1The gps unit that I bought is having an RS232 as well as a TTL interface. We can connect this device to a computer, raspberry pi or any micro-controller very easily. I connected and did the experiments using this device on raspberry pi, laptop and micro-controller. Here I am explaining a sample python program that will find the coordinates using this gps module. I used a python library called pynmea for reading and parsing the data returned by the gps module.

First power up the gps module. This depends on the type of gps module that you are using. The module I used supports 12V and 5V input voltage. Then connect the gps module to your computer using the RS232. If your laptop or PC is not having the RS232 port, don’t worry, you can use an RS232 to USB converter cable. Check the serial port in which this device is connected (This can be found from the device manager). Before we start writing the program, ensure that the pynmea library is installed in your computer.

First we will check whether the device is working properly. So we will write a small python program to read the data from the serial port.

__author__ = 'Amal G Jose'

import serial
ser = serial.Serial()
ser.baudrate = 9600
ser.port = 'COM5'
while True:
    print ser.readline()

In my case the device was connected to COM5 port. Change the port accordingly and execute this program. If you are getting values in the console, then you are good to go.

Then execute the following program to parse the data and find the coordinates.

About amalgjose
I am an Electrical Engineer by qualification, now I am working as a Software Architect. I am very much interested in Electrical, Electronics, Mechanical and now in Software fields. I like exploring things in these fields. I love travelling, long drives and music.

3 Responses to A Small experiment using GPS module

  1. beampower says:

    I was trying your code for reading data from a GPS receiver.
    I have a GPS receiver that plugs into a USB port.
    It’s a GlobalSat USB Dongle.
    This USB dongle is a really small, compact unit.
    I modified your code with the following lines to get access to the port:
    ser = serial.Serial(
    baudrate = 4800,
    The data seems to be parsing, but I’m getting an error at the end.

    Traceback (most recent call last):
    File “read_and_parse.py”, line 52, in
    print “Latitude : ” + str(latitude_string)
    UnicodeEncodeError: ‘ascii’ codec can’t encode character u’\xb0′ in position 2: ordinal not in range(128)

    I think the lines of code are:
    latitude_string = lat_deg + u’\N{DEGREE SIGN}’ + lat_mins + string.printable[68] + str(lat_secs) + string.printable[63]
    print “Latitude : ” + str(latitude_string)

  2. beampower says:

    I fixed some errors.
    You were taking a string of a string.

    Here’s a new listing.
    __author__ = ‘Amal G Jose’
    #modified 20180110

    import time
    import serial
    import string
    from pynmea import nmea

    ser = serial.Serial(
    baudrate = 4800,

    gpgga = nmea.GPGGA()
    while True:
    data = ser.readline()
    if data[0:6] == ‘$GPGGA’:

    lat = gpgga.latitude
    print “Latitude values : ” + str(lat)

    lat_dir = gpgga.lat_direction
    print “Latitude direction : ” + str(lat_dir)

    lon = gpgga.longitude
    print “Longitude values : ” + str(lon)

    lon_dir = gpgga.lon_direction
    print “Longitude direction : ” + str(lon_dir)

    time_stamp = gpgga.timestamp
    print “GPS time stamp : ” + str(time_stamp)

    alt = gpgga.antenna_altitude
    print “Antenna altitude : ” + str(alt)

    # extract latitude
    lat_deg = lat[0:2]
    lat_min = lat[2:4]
    lat_sec_chars = lat[5:]
    lat_sec = round(float(lat[5:])*60/10000, 2)

    print “Latitude degrees = ” + lat_deg
    print “Latitude minutes = ” + lat_min
    print “Latitude seconds characters = ” + lat_sec_chars
    print “Latitude seconds = ” + str(lat_sec)

    lat_string = (lat_deg +
    u’\N{DEGREE SIGN}’ +
    lat_min +
    string.printable[68] +
    str(lat_sec) +
    print “Latitude : ” + lat_string

    # extract longitude
    lon_deg = lon[0:3]
    lon_min = lon[3:5]
    lon_sec_chars = lon[6:]
    lon_sec = round(float(lon[6:])*60/10000, 2)

    print “Longitude degrees = ” + lon_deg
    print “Longitude minutes = ” + lon_min
    print “Longitude seconds characters = ” + lon_sec_chars
    print “Longitude seconds = ” + str(lon_sec)

    lon_string = (lon_deg +
    u’\N{DEGREE SIGN}’ +
    lon_min +
    string.printable[68] +
    str(lon_sec) +
    print “Longitude : ” + lon_string

  3. yash solanki says:

    hi, please could you tell me if i want to connect gps module with raspberry pi using UART connection. what changes needs to be done for this code.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: