# Αποκωδικοποίηση δεδομένων GPS - Εικονικό IoT Υλικό και Raspberry Pi Σε αυτό το μέρος του μαθήματος, θα αποκωδικοποιήσετε τα μηνύματα NMEA που διαβάζονται από τον αισθητήρα GPS μέσω του Raspberry Pi ή της Εικονικής IoT Συσκευής και θα εξάγετε το γεωγραφικό πλάτος και μήκος. ## Αποκωδικοποίηση δεδομένων GPS Αφού διαβαστούν τα ακατέργαστα δεδομένα NMEA από τη σειριακή θύρα, μπορούν να αποκωδικοποιηθούν χρησιμοποιώντας μια βιβλιοθήκη NMEA ανοιχτού κώδικα. ### Εργασία - αποκωδικοποίηση δεδομένων GPS Προγραμματίστε τη συσκευή ώστε να αποκωδικοποιεί τα δεδομένα GPS. 1. Ανοίξτε το έργο της εφαρμογής `gps-sensor` αν δεν είναι ήδη ανοιχτό. 1. Εγκαταστήστε το πακέτο Pip `pynmea2`. Αυτό το πακέτο περιέχει κώδικα για την αποκωδικοποίηση μηνυμάτων NMEA. ```sh pip3 install pynmea2 ``` 1. Προσθέστε τον παρακάτω κώδικα στις εισαγωγές στο αρχείο `app.py` για να εισάγετε τη μονάδα `pynmea2`: ```python import pynmea2 ``` 1. Αντικαταστήστε το περιεχόμενο της συνάρτησης `print_gps_data` με το παρακάτω: ```python msg = pynmea2.parse(line) if msg.sentence_type == 'GGA': lat = pynmea2.dm_to_sd(msg.lat) lon = pynmea2.dm_to_sd(msg.lon) if msg.lat_dir == 'S': lat = lat * -1 if msg.lon_dir == 'W': lon = lon * -1 print(f'{lat},{lon} - from {msg.num_sats} satellites') ``` Αυτός ο κώδικας θα χρησιμοποιήσει τη βιβλιοθήκη `pynmea2` για να αναλύσει τη γραμμή που διαβάζεται από τη σειριακή θύρα UART. Αν ο τύπος πρότασης του μηνύματος είναι `GGA`, τότε πρόκειται για μήνυμα καθορισμού θέσης και επεξεργάζεται. Οι τιμές γεωγραφικού πλάτους και μήκους διαβάζονται από το μήνυμα και μετατρέπονται σε δεκαδικές μοίρες από τη μορφή NMEA `(d)ddmm.mmmm`. Η συνάρτηση `dm_to_sd` πραγματοποιεί αυτή τη μετατροπή. Στη συνέχεια, ελέγχεται η κατεύθυνση του γεωγραφικού πλάτους, και αν το πλάτος είναι νότιο, τότε η τιμή μετατρέπεται σε αρνητικό αριθμό. Το ίδιο ισχύει και για το γεωγραφικό μήκος, αν είναι δυτικό, τότε μετατρέπεται σε αρνητικό αριθμό. Τέλος, οι συντεταγμένες εκτυπώνονται στην κονσόλα, μαζί με τον αριθμό των δορυφόρων που χρησιμοποιήθηκαν για τον εντοπισμό της θέσης. 1. Εκτελέστε τον κώδικα. Αν χρησιμοποιείτε εικονική IoT συσκευή, βεβαιωθείτε ότι η εφαρμογή CounterFit εκτελείται και ότι αποστέλλονται δεδομένα GPS. ```output pi@raspberrypi:~/gps-sensor $ python3 app.py 47.6423109,-122.1390293 - from 3 satellites ``` > 💁 Μπορείτε να βρείτε αυτόν τον κώδικα στον φάκελο [code-gps-decode/virtual-device](../../../../../3-transport/lessons/1-location-tracking/code-gps-decode/virtual-device) ή στον φάκελο [code-gps-decode/pi](../../../../../3-transport/lessons/1-location-tracking/code-gps-decode/pi). 😀 Το πρόγραμμα του αισθητήρα GPS με αποκωδικοποίηση δεδομένων ήταν επιτυχές! --- **Αποποίηση ευθύνης**: Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.