The only thing left is an interface to the GPS library to bundle up it's use. The constructor takes a UART object and creates a GPS object with it. It also initializes instance variable in which to cache the GPS location data.
def __init__(self, uart): self._gps = adafruit_gps.GPS(uart, debug=False) self._latitude = 0 self._longitude = 0
Once an instance has been created, it is initialized using the begin
method which configures the GPS object.
def begin(self): self._gps.send_command(b'PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0') self._gps.send_command(b'PMTK220,1000')
A big part of using GPS is getting a fix. I.e. locking onto signals from the satellites in view/range. No data can be fetched until that is done. The get_fix
method takes care of waiting for a fix to be acquired. Once it has, True
is returned. If an exception is raised, False
is returned.
def get_fix(self): try: logger.debug('Calling gps update') self._gps.update() logger.debug('Back from gps update') while not self._gps.has_fix: # Try again if we don't have a fix yet. logger.debug('Waiting for fix...') time.sleep(0.1) self._gps.update() return True except UnicodeError: return False
The read
method pulls data from the GPS and caches it. Corresponding properties return the cached data.
def read(self): logger.debug('Reading GPS') self._latitude = self._gps.latitude self._longitude = self._gps.longitude @property def latitude(self): return self._latitude @property def longitude(self): return self._longitude
Notice that there's no attempt to re-establish a fix since we're only reading from the GPS once, when the system starts up.
Page last edited March 08, 2024
Text editor powered by tinymce.