import serial import Adafruit_BBIO.UART as UART from time import sleep UART.setup("UART1") ser=serial.Serial('/dev/ttyO1',9600) class GPS: def __init__(self): #This sets up variables for useful commands. #This set is used to set the rate the GPS reports UPDATE_10_sec= "$PMTK220,10000*2F\r\n" #Update Every 10 Seconds UPDATE_5_sec= "$PMTK220,5000*1B\r\n" #Update Every 5 Seconds UPDATE_1_sec= "$PMTK220,1000*1F\r\n" #Update Every One Second UPDATE_200_msec= "$PMTK220,200*2C\r\n" #Update Every 200 Milliseconds #This set is used to set the rate the GPS takes measurements MEAS_10_sec = "$PMTK300,10000,0,0,0,0*2C\r\n" #Measure every 10 seconds MEAS_5_sec = "$PMTK300,5000,0,0,0,0*18\r\n" #Measure every 5 seconds MEAS_1_sec = "$PMTK300,1000,0,0,0,0*1C\r\n" #Measure once a second MEAS_200_msec= "$PMTK300,200,0,0,0,0*2F\r\n" #Meaure 5 times a second #Set the Baud Rate of GPS BAUD_57600 = "$PMTK251,57600*2C\r\n" #Set Baud Rate at 57600 BAUD_9600 ="$PMTK251,9600*17\r\n" #Set 9600 Baud Rate #Commands for which NMEA Sentences are sent ser.write(BAUD_57600) sleep(1) ser.baudrate=57600 GPRMC_ONLY= "$PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29\r\n" #Send only the GPRMC Sentence GPRMC_GPGGA="$PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28\r\n"#Send GPRMC AND GPGGA Sentences SEND_ALL ="$PMTK314,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0*28\r\n" #Send All Sentences SEND_NOTHING="$PMTK314,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28\r\n" #Send Nothing ser.write(UPDATE_1_sec) sleep(1) ser.write(MEAS_1_sec) sleep(1) ser.write(GPRMC_GPGGA) sleep(1) ser.flushInput() ser.flushInput() print "GPS Initialized" def read(self): ser.flushInput() ser.flushInput() while ser.inWaiting()==0: pass self.NMEA1=ser.readline() while ser.inWaiting()==0: pass self.NMEA2=ser.readline() NMEA1_array=self.NMEA1.split(',') NMEA2_array=self.NMEA2.split(',') if NMEA1_array[0]=='$GPRMC': self.timeUTC=NMEA1_array[1][:-8]+':'+NMEA1_array[1][-8:-6]+':'+NMEA1_array[1][-6:-4] self.latDeg=NMEA1_array[3][:-7] self.latMin=NMEA1_array[3][-7:] self.latHem=NMEA1_array[4] self.lonDeg=NMEA1_array[5][:-7] self.lonMin=NMEA1_array[5][-7:] self.lonHem=NMEA1_array[6] self.knots=NMEA1_array[7] if NMEA1_array[0]=='$GPGGA': self.fix=NMEA1_array[6] self.altitude=NMEA1_array[9] self.sats=NMEA1_array[7] if NMEA2_array[0]=='$GPRMC': self.timeUTC=NMEA2_array[1][:-8]+':'+NMEA1_array[1][-8:-6]+':'+NMEA1_array[1][-6:-4] self.latDeg=NMEA2_array[3][:-7] self.latMin=NMEA2_array[3][-7:] self.latHem=NMEA2_array[4] self.lonDeg=NMEA2_array[5][:-7] self.lonMin=NMEA2_array[5][-7:] self.lonHem=NMEA2_array[6] self.knots=NMEA2_array[7] if NMEA2_array[0]=='$GPGGA': self.fix=NMEA2_array[6] self.altitude=NMEA2_array[9] self.sats=NMEA2_array[7] myGPS=GPS() GPSdata=open('/root/GPS_data/GPS.txt', 'w') GPSdata.close() while(1): myGPS.read() if myGPS.fix!=0: try: latDec=float(myGPS.latDeg)+float(myGPS.latMin)/60. lonDec=float(myGPS.lonDeg)+float(myGPS.lonMin)/60. if myGPS.lonHem=='W': lonDec=(-1)*lonDec if myGPS.latHem=='S': latDec=(-1)*latDec alt=myGPS.altitude GPSdata=open('/root/GPS_data/GPS.txt', 'a') myString=str(lonDec)+','+str(latDec)+','+alt+' ' GPSdata.write(myString) GPSdata.close() except: pass