Je suis en train de jouer avec un RPI3B et un module GPS de chez Adafruit (PA6H), j'arrive à le faire marcher grçace à ce tuto : http://www.danmandle.com/blog/getting-g ... th-python/
Par contre je viens de m'apercevoir d'un fonctionnement que je n'avais pas prévue : sans faire exprès un câble du module GPS s'est débranché (GPS relié au rasp via un câble USB SERIE), cependant le script continuait d'envoyer des infos de latitude et longitude. Elles étaient identiques d'un envoi à un autre, mais ne reflétait pas la réalité puisque le GPS était en fait débranché.
Je pensais que le thread "envoyait" une info à chaque fois que le GPS en envoyait une nouvelle. Là j'ai plutôt l'impression qu'en fait il renvoie la dernière data, jusqu'à ce que le GPS envoi une nouvelle trame.
Quelqu'un pourrait m'éclairer sur le fonctionnement du thread dans le script d'exemple svp ? et comment palier le petit soucis que je viens de relever ?
Je fais fonctionner le GPS à 10Hz, j'ai donc modifié la tempo en fin de boucle à 0.1 seconde, mais je ne sais pas si c'est la solution la plus judicieuse...
Code: Select all
#! /usr/bin/python
# Written by Dan Mandle http://dan.mandle.me September 2012
# License: GPL 2.0
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 '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."