1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| import serial
import matplotlib.pyplot as plt
def parse_gps_data(gps_data):
# Séparer les champs de la trame GPS en utilisant la virgule comme séparateur
fields = gps_data.split(',')
# Vérifier si la trame est GNGGA (données de position)
if fields[0] == '$GNGGA':
try:
# Extraire la latitude et la longitude
latitude = float(fields[2][:2]) + float(fields[2][2:]) / 60
longitude = float(fields[4][:3]) + float(fields[4][3:]) / 60
# Vérifier la direction de la latitude (N ou S)
if fields[3] == 'S':
latitude = -latitude
# Vérifier la direction de la longitude (E ou W)
if fields[5] == 'W':
longitude = -longitude
return latitude, longitude
except Exception as e:
print("Erreur lors de l'extraction des coordonnées:", e)
return None
# Définition du port série
ser = serial.Serial('COM13', 115200) # Assurez-vous de changer le port selon votre configuration
# Tracer les points GPS en temps réel
plt.figure(figsize=(8, 6))
plt.xlabel('Longitude')
plt.ylabel('Latitude')
plt.title('Trajet GPS en temps réel')
#plt.xlim(43.7,43.9)
#plt.ylim(5.07,5.09)
plt.grid(True)
try:
while True:
# Lire une ligne de données depuis le port série
gps_data = ser.readline().decode(errors='ignore').strip() # Ignorer les erreurs de décodage
# Analyser les données GPS et afficher les coordonnées
coordinates = parse_gps_data(gps_data)
#coordinates = 43.86819841166667, 5.084892288333333
if coordinates:
latitude, longitude = coordinates
print (latitude,longitude)
# Tracer le point GPS en temps réel
plt.plot(longitude, latitude, '.', markersize=3)
plt.draw() # Rafraîchir l'affichage
plt.pause(0.01) # Pause pour rafraîchir l'affichage
except KeyboardInterrupt:
ser.close()
print("Programme arrêté.") |
Partager