Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
python-gps sample codes, Raspberry Pi 4 + u-blox GPS module (uart)

Raspberry Pi 4 + u-blox GPS module (uart)

$ sudo apt-get update
$ sudo apt-get install gpsd gpsd-client python-gps

Enable the serial interface and disable serial login shell with raspi-config then reboot. Confirm /dev/ttyS0 exists

$ ls -l /dev/serial*
lrwxrwxrwx 1 root root 5 May  9 10:38 /dev/serial0 -> ttyS0
lrwxrwxrwx 1 root root 7 May  9 10:38 /dev/serial1 -> ttyAMA0

Configure gpsd to use /dev/ttyS0 in /etc/defaults/gpsd then restart gpsd service. Use cgps command to make sure it works.

# Deprecate. The latest gps python module has been changed significantly.
import gps, os, time
session = gps.gps()
while 1:
os.system('clear')
session.query('admosy')
# a = altitude, d = date/time, m=mode,
# o=postion/fix, s=status, y=satellites
print
print ' GPS reading'
print '----------------------------------------'
print 'latitude ' , session.fix.latitude
print 'longitude ' , session.fix.longitude
print 'time utc ' , session.utc, session.fix.time
print 'altitude ' , session.fix.altitude
print 'eph ' , session.fix.eph
print 'epv ' , session.fix.epv
print 'ept ' , session.fix.ept
print 'speed ' , session.fix.speed
print 'climb ' , session.fix.climb
print
print ' Satellites (total of', len(session.satellites) , ' in view)'
for i in session.satellites:
print '\t', i
time.sleep(3)
#! /usr/bin/python
# Written by Dan Mandle http://dan.mandle.me September 2012
# License: GPL 2.0
# Updated by wolfg1969 https://guoyong.dev May 2020
import os
from gps import *
from time import *
import time
import threading
gpsd = None #seting the global variable
os.system('clear') #clear the terminal (optional)
class GpsPoller(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
global gpsd #bring it in scope
gpsd = gps(mode=WATCH_ENABLE) #starting the stream of info
self.current_value = None
self.running = True #setting the thread running to true
def run(self):
global gpsd
while gpsp.running:
gpsd.next() #this will continue to loop and grab EACH set of gpsd info to clear the buffer
if __name__ == '__main__':
gpsp = GpsPoller() # create the thread
try:
gpsp.start() # start it up
while True:
# It may take a second or two to get good data
# print(gpsd.fix.latitude,', ',gpsd.fix.longitude,' Time: ',gpsd.utc)
os.system('clear')
print
print(' GPS reading')
print('----------------------------------------')
print('latitude ', gpsd.fix.latitude)
print('longitude ', gpsd.fix.longitude)
print('time utc ', gpsd.utc, ' + ', gpsd.fix.time)
print('altitude (m)', gpsd.fix.altitude)
print('eps ', gpsd.fix.eps)
print('epx ', gpsd.fix.epx)
print('epv ', gpsd.fix.epv)
print('ept ', gpsd.fix.ept)
print('speed (m/s) ', gpsd.fix.speed)
print('speed (mph) ', gpsd.fix.speed * 2.237)
print('climb ', gpsd.fix.climb)
print('track ', gpsd.fix.track)
print('mode ', gpsd.fix.mode)
print
print('sats ', gpsd.satellites)
time.sleep(5) #set to whatever
except (KeyboardInterrupt, SystemExit): #when you press ctrl+c
print("\nKilling Thread...")
gpsp.running = False
gpsp.join() # wait for the thread to finish what it's doing
print("Done.\nExiting.")
@wolfg1969

This comment has been minimized.

Copy link
Owner Author

wolfg1969 commented Mar 26, 2013

Traceback (most recent call last):
  File "gps_demo.py", line 7, in <module>
    session.query('admosy') 
AttributeError: gps instance has no attribute 'query'
@wolfg1969

This comment has been minimized.

Copy link
Owner Author

wolfg1969 commented Apr 3, 2013

gpsdData.py works!

@avapaulradej

This comment has been minimized.

Copy link

avapaulradej commented May 26, 2015

gpsData.py Line 25 in this line you are using variable 'gpsp' ('P' on the end) which is not defined in the scope.

Instead of "while gpsp.running:"
Shouldn't it be "while self.running:"?

@jilkka

This comment has been minimized.

Copy link

jilkka commented Apr 11, 2016

@wolfg1916, got your gps_demo.py to work, see revisions:
https://gist.github.com/jilkka/1b5b9704ed8fd491e769897a0248e7cc/revisions

@josmargoncal

This comment has been minimized.

Copy link

josmargoncal commented Apr 11, 2016

Hello, and Thank you for the information. I tried the new revision and I have the same error than before with the gps_demo.py.
What am I doing wrong?

gps instance has no attribute 'query'

@NoelBroda

This comment has been minimized.

Copy link

NoelBroda commented Oct 22, 2016

Hi man!
I have this issue in RaspberryPi (Raspbian):

Traceback (most recent call last):
  File "gps_demo.py", line 7, in <module>
    session.query('admosy') 
AttributeError: gps instance has no attribute 'query'
@JakeTun

This comment has been minimized.

Copy link

JakeTun commented Jan 25, 2017

no module name gps

@yohanboniface

This comment has been minimized.

Copy link

yohanboniface commented Feb 5, 2017

@JakeTun sudo apt-get install python-gps

@JakeTun

This comment has been minimized.

Copy link

JakeTun commented Feb 7, 2017

thanks

@snlakshmi08

This comment has been minimized.

Copy link

snlakshmi08 commented Feb 24, 2017

I m not getting the values of latitudes and longitudes and I used gpsdData.py..plz help me out

@gx07

This comment has been minimized.

Copy link

gx07 commented Mar 6, 2017

I have this issue in RaspberryPi (Raspbian):

I did => sudo apt-get install python-gps and executed gpsdData.py script
I am getting the following error. Can someone please help?

Traceback (most recent call last):
File "/home/pi/Desktop/pythonGPSData.py", line 29, in
gpsp = GpsPoller() # create the thread
File "/home/pi/Desktop/pythonGPSData.py", line 19, in init
gpsd = gps(mode=WATCH_ENABLE) #starting the stream of info
NameError: global name 'gps' is not defined

@shafiqhafidz

This comment has been minimized.

Copy link

shafiqhafidz commented Mar 24, 2017

Hi. I do have similar problem on GPSData.py code.
Traceback (most recent call last):
File "/home/pi/Desktop/pythonGPSData.py", line 29, in
gpsp = GpsPoller() # create the thread
File "/home/pi/Desktop/pythonGPSData.py", line 19, in init
gpsd = gps(mode=WATCH_ENABLE)

can u help to troubleshoot this problem sir?

@marabesi

This comment has been minimized.

@rrase

This comment has been minimized.

Copy link

rrase commented Feb 16, 2018

I m not getting the values of latitudes and longitudes and I used gpsdData.py..plz help me out

@rrase

This comment has been minimized.

Copy link

rrase commented Feb 16, 2018

pls somebody help out to get the values of longitude and latitudes

@rtennill

This comment has been minimized.

Copy link

rtennill commented Mar 8, 2018

What version of gpsd does this target? There is no query() in my gps object under Python 2.7 on Ubuntu 16.04 (arm64) .

@Ahmedeish11

This comment has been minimized.

Copy link

Ahmedeish11 commented Jun 19, 2018

11
how i can solve this problem?

@dear-stan

This comment has been minimized.

Copy link

dear-stan commented Jul 15, 2019

Thank you for this. Is there a way to get the speed in km/h instead of m/s?? I've tried taking "gpsd.fix.speed" value and then converting that into km/h. But unfortunately that wasn't fruitful, I tried something like this

speed = gpsd.fix.speed
km_h = ((speed*18)/5)

@ewe-akj

This comment has been minimized.

Copy link

ewe-akj commented Apr 22, 2020

i want gps python code please help me

  1. I want to put the coordinates where I want
  2. I want the word "arrival" to appear when I arrive at the desired coordinates
  3. I want to see the error rate

please help me please

@wolfg1969

This comment has been minimized.

Copy link
Owner Author

wolfg1969 commented May 8, 2020

@ewe-akj Do you wanna a paid support for you requirements?

@wolfg1969

This comment has been minimized.

Copy link
Owner Author

wolfg1969 commented May 9, 2020

What version of gpsd does this target? There is no query() in my gps object under Python 2.7 on Ubuntu 16.04 (arm64) .

Use Python 3 and gpsdData.py.

@wolfg1969

This comment has been minimized.

Copy link
Owner Author

wolfg1969 commented May 9, 2020

Thank you for this. Is there a way to get the speed in km/h instead of m/s?? I've tried taking "gpsd.fix.speed" value and then converting that into km/h. But unfortunately that wasn't fruitful, I tried something like this

speed = gpsd.fix.speed
km_h = ((speed*18)/5)

@dear-stan The formula is correct.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.