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: 1Code:
#!/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