Hexor
Posts: 4
Joined: Wed Mar 20, 2019 8:39 am

Python + gpsd validité trames reçues ?

Wed Mar 20, 2019 8:46 am

Bonjour,

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."

jelopo
Posts: 1492
Joined: Wed Oct 17, 2012 7:53 pm

Re: Python + gpsd validité trames reçues ?

Thu Mar 21, 2019 6:51 am

Bonjour,

Effectivement il semble que le Thread est créé si le module est présent, mais il n'a pas de vérification après donc le thread reste actif sans connexion.

Tenter de fermer le thread toutes les x mesures et de le relancer. Il faut du coup se documenter sur les commandes de thread, ça dépasse mes compétences...

Bon courage.

A+

Return to “Français”