From 8baca803adeebbe49a1431a6bead01fc8d5dc62d Mon Sep 17 00:00:00 2001 From: ingressy Date: Sat, 11 Apr 2026 17:48:19 +0000 Subject: [PATCH] =?UTF-8?q?pygps=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pygps | 129 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 pygps diff --git a/pygps b/pygps new file mode 100644 index 0000000..1435bd2 --- /dev/null +++ b/pygps @@ -0,0 +1,129 @@ +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" +