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"