Quantcast
Channel: Raspberry Pi Forums
Viewing all articles
Browse latest Browse all 8082

Automation, sensing and robotics • Re: GPS Stationary Algorithm

$
0
0
I tried a cheap USB gps on my pi and I get good results, have you got a reception problem ?

Code:

Location: 34.619266 N 1.0541566 W Time: 13:03:22 Date: 25/10/24 Speed: 0.00 Fix: 1Location: 34.619266 N 1.0541566 W Time: 13:03:23 Date: 25/10/24 Speed: 0.00 Fix: 1Location: 34.619266 N 1.0541566 W Time: 13:03:24 Date: 25/10/24 Speed: 0.00 Fix: 1Location: 34.619266 N 1.0541566 W Time: 13:03:25 Date: 25/10/24 Speed: 0.00 Fix: 1Location: 34.619266 N 1.0541566 W Time: 13:03:26 Date: 25/10/24 Speed: 0.00 Fix: 1Location: 34.619266 N 1.0541566 W Time: 13:03:27 Date: 25/10/24 Speed: 0.00 Fix: 1Location: 34.619266 N 1.0541566 W Time: 13:03:28 Date: 25/10/24 Speed: 0.00 Fix: 1Location: 34.619266 N 1.0541566 W Time: 13:03:29 Date: 25/10/24 Speed: 0.00 Fix: 1Location: 34.619266 N 1.0541566 W Time: 13:03:30 Date: 25/10/24 Speed: 0.00 Fix: 1Location: 34.619266 N 1.0541566 W Time: 13:03:31 Date: 25/10/24 Speed: 0.00 Fix: 1Location: 34.619266 N 1.0541566 W Time: 13:03:32 Date: 25/10/24 Speed: 0.00 Fix: 1Location: 34.619266 N 1.0541566 W Time: 13:03:33 Date: 25/10/24 Speed: 0.00 Fix: 1Location: 34.619266 N 1.0541566 W Time: 13:03:34 Date: 25/10/24 Speed: 0.00 Fix: 1Location: 34.619266 N 1.0541566 W Time: 13:03:35 Date: 25/10/24 Speed: 0.00 Fix: 1Location: 34.619266 N 1.0541566 W Time: 13:03:36 Date: 25/10/24 Speed: 0.00 Fix: 1Location: 34.619266 N 1.0541566 W Time: 13:03:37 Date: 25/10/24 Speed: 0.00 Fix: 1Location: 34.619266 N 1.0541566 W Time: 13:03:38 Date: 25/10/24 Speed: 0.00 Fix: 1Location: 34.619266 N 1.0541566 W Time: 13:03:39 Date: 25/10/24 Speed: 0.00 Fix: 1Location: 34.619266 N 1.0541566 W Time: 13:03:40 Date: 25/10/24 Speed: 0.00 Fix: 1Location: 34.619266 N 1.0541566 W Time: 13:03:41 Date: 25/10/24 Speed: 0.00 Fix: 1Location: 34.619266 N 1.0541566 W Time: 13:03:42 Date: 25/10/24 Speed: 0.00 Fix: 1Location: 34.619266 N 1.0541566 W Time: 13:03:43 Date: 25/10/24 Speed: 0.00 Fix: 1Location: 34.619266 N 1.0541566 W Time: 13:03:44 Date: 25/10/24 Speed: 0.00 Fix: 1Location: 34.619266 N 1.0541566 W Time: 13:03:45 Date: 25/10/24 Speed: 0.00 Fix: 1Location: 34.619266 N 1.0541566 W Time: 13:03:46 Date: 25/10/24 Speed: 0.00 Fix: 1

Code:

#!/usr/bin/python3import serialimport os, sysimport timeimport datetimeimport reimport shutilfrom decimal import *getcontext().prec = 8gps_period = 1 # time ,in seconds, between logged gps data# log datalog = 1 # set log = 1 to log data# set variablesgpsfound = 2fix = 0start = time.time()gps_data = ""gps_text = ""gps_date = ""gps_time = ""gps2 = ["?"] * 12if os.path.exists('/dev/ttyUSB0') == True:    gpsfound = 0    ser = serial.Serial('/dev/ttyUSB0',4800,timeout = 10)elif os.path.exists('/dev/ttyUSB1') == True:    gpsfound = 1    ser = serial.Serial('/dev/ttyUSB1',4800,timeout = 10)while True:    # read gps data    if gpsfound < 2:        try:            gps_data = ser.readline()            #print (gps_data)            if sys.version_info[0] == 3:                gps_data = gps_data.decode("utf-8","ignore")        except OSError:            try:                fix = 0                gps_text = ""                if os.path.exists('/dev/ttyUSB0') == True:                    gpsfound = 0                    ser = serial.Serial('/dev/ttyUSB0',4800,timeout = 10)                elif os.path.exists('/dev/ttyUSB1') == True:                    gpsfound = 1                    ser = serial.Serial('/dev/ttyUSB1',4800,timeout = 10)            except OSError:               pass    else:        try:            fix = 0            gps_text = ""            if os.path.exists('/dev/ttyUSB0') == True:                gpsfound = 0                ser = serial.Serial('/dev/ttyUSB0',4800,timeout = 10)            elif os.path.exists('/dev/ttyUSB1') == True:                gpsfound = 1                ser = serial.Serial('/dev/ttyUSB1',4800,timeout = 10)        except OSError:               pass        # check checksum    if gps_data[0:1] == "$":        gps_data = gps_data.rstrip('\n')        cksum = gps_data[len(gps_data) - 3:]        chksumdata = re.sub("(\n|\r\n)","", gps_data[gps_data.find("$")+1:gps_data.find("*")])        csum = 0        for c in chksumdata:            csum ^= ord(c)        if hex(csum) == hex(int(cksum, 16)):            # check for GPGGA sentences            if gps_data[1:6] == "GPGGA":                fix = 0                gps_data2 = gps_data                gps1 = gps_data.split(',',12)                if len(gps_data) > 68 and (gps1[3] == "N" or gps1[3] == "S"):                    fix = int(gps1[6])                    if fix > 0:                        lat1 = int(gps1[2][0:2])                        lat2 = float(gps1[2])  - (lat1*100)                        lat = lat1 + lat2/60                         lon1 = int(gps1[4][0:3])                        lon2 = float(gps1[4])  - (lon1*100)                        lon = lon1 + lon2/60                        gps_time = gps1[1][0:6]                        gps_text = "Location: "+str(lat)[0:9]+" "+gps1[3]+" "+str(lon)[0:9]+" "+gps1[5]+" Time: "+gps_time[0:2]+":"+gps_time[2:4]+":"+gps_time[4:6]+" Date: "+gps_date[4:6]+"/"+ gps_date[2:4]+"/"+ gps_date[0:2] + " Speed: " + str(gps2[7]) +  " Fix: " + str(fix)                        print(gps_text)                        # log data if enabled                        if log == 1 :                            with open("log.txt", "a") as file:                                file.write(gps_text + "\n")                        time.sleep(0.1)            if fix > 0 and gps_text != "":                if gps_data[1:6] == "GPRMC":                    gps2 = gps_data.split(',',12)                    gps_date = gps2[9]

Statistics: Posted by gordon77 — Fri Oct 24, 2025 1:07 pm



Viewing all articles
Browse latest Browse all 8082

Trending Articles