def gpsLoop(inParams): #log path savePath, printLive = inParams #setup gps device #wait for gps attach? gps = GPS() gps.openPhidget() gps.waitForAttach(10000) print "GPS attached" #set up logging: gpsLog = open(savePath+'/Gps.log','w') #change handler def gpsChangeHandler1(e): gps_time = gps.getTime().toString() gps_date = gps.getDate().toString() gps_lat = gps.getLatitude() gps_lon = gps.getLongitude() gps_alt = gps.getAltitude() gps_heading = gps.getHeading() gps_vel = gps.getVelocity() time1 = str(datetime.datetime.now()) dataElems = [time1, gps_time, gps_date, gps_lat, gps_lon,gps_alt,gps_heading,gps_vel] dataElems = [str(x) for x in dataElems] return ','.join(dataElems)+'\n', (gps_lat, gps_lon, gps_alt) #(','.join(dataElems)+'\n') #gpsLog.flush() #gps.setOnPositionChangeHandler(gpsChangeHandler1) data, xyzPos = gpsChangeHandler1(1) gpsLog.write("sysTime, gpsTime, gpsDate, Lat, Lon, Alt, Heading, Velocity\n") gpsLog.write(data) logCounter = 0 while True: logCounter = logCounter+1 #tune sleep timer to image capture rate... time.sleep(0.18) data, xyzPos = gpsChangeHandler1(1) gpsLog.write(data) if logCounter%10==0: gpsLog.flush()
def gpsLoop(inParams): #log path savePath, printLive = inParams #setup gps device #wait for gps attach? gps = GPS() gps.openPhidget() gps.waitForAttach(10000) print "GPS attached" #set up logging: gpsLog = open(savePath+'/Gps.log','w') #change handler def gpsChangeHandler1(e): gps_time = gps.getTime().toString() gps_lat = gps.getLatitude() gps_lon = gps.getLongitude() gps_alt = gps.getAltitude() gps_heading = gps.getHeading() gps_vel = gps.getVelocity() time1 = str(datetime.datetime.now()) dataElems = [time1, gps_time, gps_lat, gps_lon,gps_alt,gps_heading,gps_vel] dataElems = [str(x) for x in dataElems] return ','.join(dataElems)+'\n', (gps_lat, gps_lon, gps_alt) #(','.join(dataElems)+'\n') #gpsLog.flush() #gps.setOnPositionChangeHandler(gpsChangeHandler1) data, xyzPos = gpsChangeHandler1(1) gpsLog.write(data) while True: time.sleep(0.1) newData, newXyz = gpsChangeHandler1(1) if xyzPos == newXyz: pass else: #log new data print "position changed", newXyz xyzPos = newXyz gpsLog.write(newData) gpsLog.flush()
#gps.enableLogging(PhidgetLogLevel.PHIDGET_LOG_VERBOSE, "phidgetlog.log") gps.setOnAttachHandler(GPSAttached) gps.setOnDetachHandler(GPSDetached) gps.setOnErrorhandler(GPSError) gps.setOnPositionChangeHandler(GPSPositionChanged) gps.setOnPositionFixStatusChangeHandler(GPSPositionFixStatusChanged) except PhidgetException as e: print("Phidget Exception %i: %s" % (e.code, e.details)) print("Exiting....") exit(1) print("Opening phidget object....") try: gps.openPhidget() except PhidgetException as e: print("Phidget Exception %i: %s" % (e.code, e.details)) print("Exiting....") exit(1) print("Waiting for attach....") try: gps.waitForAttach(10000) except PhidgetException as e: print("Phidget Exception %i: %s" % (e.code, e.details)) try: gps.closePhidget() except PhidgetException as e: print("Phidget Exception %i: %s" % (e.code, e.details))
try: gps.closePhidget() except PhidgetException as e: print("Phidget Exception %i: %s" % (e.code, e.details)) print("Exiting....") exit(1) print("Done.") exit(0) atexit.register(clean_up) gps = None try: gps = GPS() gps.openPhidget() gps.waitForAttach(10000) except PhidgetException as e: print("Phidget Exception %i: %s" % (e.code, e.details)) exit(1) print("Date,Time,Lat,Long,Altitude,Velocity,Heading") while True: try: print("{0},{1},{2},{3},{4},{5},{6}".format( gps.getDate().toString(), gps.getTime().toString(), gps.getLatitude(), gps.getLongitude(), gps.getAltitude(),
def AttachGPS(databasepath, serialNumber): def onAttachHandler(event): logString = "GPS Attached " + str(event.device.getSerialNum()) #print(logString) DisplayAttachedDeviceInfo(event.device) def onDetachHandler(event): logString = "GPS Detached " + str(event.device.getSerialNum()) #print(logString) DisplayDetachedDeviceInfo(event.device) event.device.closePhidget() def onErrorHandler(event): logString = "GPS Error " + str(event.device.getSerialNum()) + ", Error: " + event.description print(logString) DisplayErrorDeviceInfo(event.device) def onServerConnectHandler(event): logString = "GPS Server Connect " + str(event.device.getSerialNum()) #print(logString) def onServerDisconnectHandler(event): logString = "GPS Server Disconnect " + str(event.device.getSerialNum()) #print(logString) def positionChangeHandler(event): logString = "GPS Position Changed" #print(logString) try: conn = sqlite3.connect(databasepath) conn.execute("INSERT INTO GPS_POSITIONCHANGE VALUES(NULL, DateTime('now'), ?, ?, ?)", (event.device.getSerialNum(), event.index, event.position)) conn.commit() conn.close() except sqlite3.Error as e: print "An error occurred:", e.args[0] def positionFixStatusChangeHandler(event): logString = "GPS Position Fix Status Changed" #print(logString) try: conn = sqlite3.connect(databasepath) conn.execute("INSERT INTO GPS_POSITIONFIXSTATUSCHANGE VALUES(NULL, DateTime('now'), ?, ?, ?)", (event.device.getSerialNum(), event.index, event.position)) conn.commit() conn.close() except sqlite3.Error as e: print "An error occurred:", e.args[0] try: p = GPS() p.setOnAttachHandler(onAttachHandler) p.setOnDetachHandler(onDetachHandler) p.setOnErrorhandler(onErrorHandler) p.setOnServerConnectHandler(onServerConnectHandler) p.setOnServerDisconnectHandler(onServerDisconnectHandler) p.setOnPositionChangeHandler(positionChangeHandler) p.setOnPositionFixStatusChangeHandler(positionFixStatusChangeHandler) p.openPhidget(serialNumber) except PhidgetException as e: print("Phidget Exception %i: %s" % (e.code, e.details)) print("Exiting...") exit(1)
def AttachGPS(databasepath, serialNumber): def onAttachHandler(event): logString = "GPS Attached " + str(event.device.getSerialNum()) #print(logString) DisplayAttachedDeviceInfo(event.device) def onDetachHandler(event): logString = "GPS Detached " + str(event.device.getSerialNum()) #print(logString) DisplayDetachedDeviceInfo(event.device) event.device.closePhidget() def onErrorHandler(event): logString = "GPS Error " + str( event.device.getSerialNum()) + ", Error: " + event.description print(logString) DisplayErrorDeviceInfo(event.device) def onServerConnectHandler(event): logString = "GPS Server Connect " + str(event.device.getSerialNum()) #print(logString) def onServerDisconnectHandler(event): logString = "GPS Server Disconnect " + str(event.device.getSerialNum()) #print(logString) def positionChangeHandler(event): logString = "GPS Position Changed" #print(logString) try: conn = sqlite3.connect(databasepath) conn.execute( "INSERT INTO GPS_POSITIONCHANGE VALUES(NULL, DateTime('now'), ?, ?, ?)", (event.device.getSerialNum(), event.index, event.position)) conn.commit() conn.close() except sqlite3.Error as e: print "An error occurred:", e.args[0] def positionFixStatusChangeHandler(event): logString = "GPS Position Fix Status Changed" #print(logString) try: conn = sqlite3.connect(databasepath) conn.execute( "INSERT INTO GPS_POSITIONFIXSTATUSCHANGE VALUES(NULL, DateTime('now'), ?, ?, ?)", (event.device.getSerialNum(), event.index, event.position)) conn.commit() conn.close() except sqlite3.Error as e: print "An error occurred:", e.args[0] try: p = GPS() p.setOnAttachHandler(onAttachHandler) p.setOnDetachHandler(onDetachHandler) p.setOnErrorhandler(onErrorHandler) p.setOnServerConnectHandler(onServerConnectHandler) p.setOnServerDisconnectHandler(onServerDisconnectHandler) p.setOnPositionChangeHandler(positionChangeHandler) p.setOnPositionFixStatusChangeHandler(positionFixStatusChangeHandler) p.openPhidget(serialNumber) except PhidgetException as e: print("Phidget Exception %i: %s" % (e.code, e.details)) print("Exiting...") exit(1)
class GPSPhidgets(GPSDevice): """ This class implements the GPS facade for the Phidgets GPS. """ phidget = None # Holds reference to Phidget device, populated from activate def get_current_latitude(self): try: self.latitude = self.phidget.getLatitude() except PhidgetException as e: print("Phidget Exception %i: %s" % (e.code, e.details)) return self.latitude def get_current_longitude(self): try: self.longitude = self.phidget.getLongitude() except PhidgetException as e: print("Phidget Exception %i: %s" % (e.code, e.details)) return self.longitude def get_current_velocity(self): """Returns the current GPS-derived speed in miles per hour""" try: self.velocity = self.phidget.getVelocity() except PhidgetException as e: print("Phidget Exception %i: %s" % (e.code, e.details)) return self.velocity def get_current_altitude(self): """Returns the current altitude in decimal feet""" try: self.altitude = self.phidget.getAltitude() except PhidgetException as e: print("Phidget Exception %i: %s" % (e.code, e.details)) return self.altitude def get_current_heading(self): """Returns the current GPS-derived heading in degrees""" try: self.heading = self.phidget.getHeading() except PhidgetException as e: print("Phidget Exception %i: %s" % (e.code, e.details)) return self.heading def get_time(self): """Returns a datetime.time object with the current time from the GPS""" try: phidget_time = self.phidget.getTime() self.time = datetime.time(phidget_time.tm_hour, phidget_time.tm_min, phidget_time.tm_sec, phidget_time.tm_ms) except PhidgetException as e: print("Phidget Exception %i: %s" % (e.code, e.details)) return self.time def get_date(self): """Returns a datetime.date object with the current date from the GPS""" try: phidget_date = self.phidget.getDate() self.date = datetime.date(phidget_date.tm_year, phidget_date.tm_mon, phidget_date.tm_mday) except PhidgetException as e: print("Phidget Exception %i: %s" % (e.code, e.details)) return self.date def get_datetime(self): """Returns a datetime.datetime object with the current date and time from the GPS""" try: self.date_time = datetime.datetime.combine(self.get_date(), self.get_time()) except PhidgetException as e: print("Phidget Exception %i: %s" % (e.code, e.details)) return self.date_time def is_ready(self): """Returns True if the GPS is ready to return data (on, booted, sat lock, etc.)""" fix_status = self.phidget.getPositionFixStatus() if not fix_status: self.ready = False return self.ready def activate(self): """Phidget GPS Must be attached via USB cable and powered before calling, sets is_ready() to True when done""" try: self.phidget = GPS() self.phidget.openPhidget() except RuntimeError as e: print("Runtime Exception: %s" % e.details) try: self.phidget.waitForAttach(10000) except PhidgetException as e: print("Phidget Exception %i: %s" % (e.code, e.details)) try: self.phidget.closePhidget() except PhidgetException as e: print("Phidget Exception %i: %s" % (e.code, e.details)) self.ready = True def deactivate(self): """Tells the GPS to shut down, sets is_ready() to False when done""" self.phidget.closePhidget() self.ready = False