Parking Finder
The Parking Finder system is a smart parking solution designed to help drivers efficiently locate available
Loading...
Searching...
No Matches
gps.py
Go to the documentation of this file.
1
4
5
6import serial
7import time
8import pynmea2
9import threading
10
11class GPS:
12 def __init__(self):
13 self.ser = serial.Serial(
14 port='/dev/ttyTHS1', # Adjust this for your specific setup
15 baudrate=9600,
16 parity=serial.PARITY_NONE,
17 stopbits=serial.STOPBITS_ONE,
18 bytesize=serial.EIGHTBITS,
19 timeout=1 # Timeout in seconds
20 )
21
22 #self.rate = rate_hz # rate_hz=5 in init header
23 self.running = True
24
25 self.latitude = 0
26 self.longitude = 0
27 self.altitude = 0 #sometimes returns None
28
29 # new data flag
30 self.new_data = False
31
32 # start background thread
33 self.thread = threading.Thread(target=self.update_loop, daemon=True)
34 self.thread.start()
35
36 def __str__(self):
37 def _fmt(v):
38 return f"{v:.3f}" if isinstance(v, (int, float)) else "N/A"
39
40 return (
41 f"Latitude: {_fmt(self.latitude)}\n"
42 f"Longitude: {_fmt(self.longitude)}\n"
43 f"Altitude: {_fmt(self.altitude)}\n"
44 )
45
46 def update_loop(self):
47 print("Serial port opened. Waiting for data...")
48 #period = 1 / self.rate
49 try:
50 while self.running:
51 if self.ser.in_waiting > 0:
52 # Read data from the serial port
53 # ser.readline() reads until a newline character is encountered
54 # ser.read(num_bytes) reads a specified number of bytes
55 data = self.ser.readline().decode().strip() # Decode and remove whitespace
56 # 'utf-8'
57 if data:
58 if data.find('GGA') > 0:
59 try:
60 msg = pynmea2.parse(data)
61 '''
62 print(msg.timestamp, 'Lat:', round(msg.latitude, 6), 'Lon:', round(msg.longitude, 6),
63 'Alt:', msg.altitude, 'Sats:', msg.num_sats)
64 '''
65 # print(f"Received: {data}")
66
67 self.latitude = msg.latitude
68 self.longitude = msg.longitude
69 self.altitude = msg.altitude
70 self.new_data = True
71
72 except Exception as e:
73 print(e)
74
75 else:
76 print("No data recieved")
77 #time.sleep(period) # Small delay to prevent busy-waiting
78
79 except Exception as e:
80 print(f"An error occurred: {e}")
81
82 def get_lat(self):
83 return self.latitude
84
85 def get_long(self):
86 return self.longitude
87
88 def get_altitude(self):
89 return self.altitude
90
91 def stop(self):
92 self.running = False
93 self.ser.close()
94 self.thread.join()
95
96 def get_data(self):
97 self.new_data = False
98 return self.latitude, self.longitude
99
Definition gps.py:11
int longitude
Definition gps.py:26
thread
Definition gps.py:33
ser
Definition gps.py:13
bool running
Definition gps.py:23
int latitude
Definition gps.py:25
bool new_data
Definition gps.py:30
int altitude
Definition gps.py:27
update_loop(self)
Definition gps.py:46