Files
pyGPS/pygps
T
2026-04-11 17:48:19 +00:00

130 lines
3.9 KiB
Plaintext

import serial
class pyGPS:
def __init__(self, port="/dev/ttyACM3", baud=9600):
self.ser = serial.Serial(port=port, baudrate=baud)
def get_raw(self):
return self.ser.readline().decode("utf-8").strip()
def get_time(self):
while True:
line = self.ser.readline().decode("utf-8").strip()
if line.startswith("$GPRMC"):
parts = line.split(",")
status = parts[2]
if status == "A":
time = parts[1]
hours = int(time[0:2])
minutes = int(time[2:4])
seconds = float(time[4:])
sec_int = int(seconds)
return f"{hours:02d}:{minutes:02d}:{sec_int:02d}"
else:
return f"00:00:00"
def get_lat(self):
while True:
line = self.ser.readline().decode("utf-8").strip()
if line.startswith("$GPRMC"):
parts = line.split(",")
status = parts[2]
if status == "A":
lat = parts[3]
lat_dir = parts[4]
degrees = int(lat[:2])
minutes_full = float(lat[2:])
minutes = int(minutes_full)
seconds = (minutes_full-minutes)*60
return f"{degrees}° {minutes:02d}' {seconds:05.2f}\" {lat_dir}"
else:
return "000° 00' 00.00\""
def get_lon(self):
while True:
line = self.ser.readline().decode("utf-8").strip()
if line.startswith("$GPRMC"):
parts = line.split(",")
status = parts[2]
if status == "A":
lon = parts[5]
lon_dir = parts[6]
degrees = int(lon[:3])
minutes_full = float(lon[3:])
minutes = int(minutes_full)
seconds = (minutes_full-minutes)*60
return f"{degrees:03d}° {minutes:02d}' {seconds:05.2f}\" {lon_dir}"
else:
return "000° 00' 00.00\""
def get_speed_kn(self):
while True:
line = self.ser.readline().decode("utf-8").strip()
if line.startswith("$GPRMC"):
parts = line.split(",")
status = parts[2]
if status == "A":
return round(float(parts[7]), 2)
return 0
def get_speed(self):
while True:
line = self.ser.readline().decode("utf-8").strip()
if line.startswith("$GPRMC"):
parts = line.split(",")
status = parts[2]
if status == "A":
return float(parts[7])
return 0
def get_speed_kmh(self):
while True:
return round((float(self.get_speed()) * 1.852),2)
def get_speed_ms(self):
while True:
return round((float(self.get_speed()) * 0.514444),2)
def get_course(self):
while True:
line = self.ser.readline().decode("utf-8").strip()
if line.startswith("$GPRMC"):
parts = line.split(",")
status = parts[2]
if status == "A":
course = parts[8]
if course == "":
course = "---"
return course
else:
return 0
def get_date(self):
while True:
line = self.ser.readline().decode("utf-8").strip()
if line.startswith("$GPRMC"):
parts = line.split(",")
status = parts[2]
if status == "A":
date = parts[9]
return f"{date[0:2]}.{date[2:4]}.{date[4:6]}"
return "00.00.0000"