# Ανάγνωση δεδομένων GPS - Εικονικό IoT Υλικό Σε αυτό το μέρος του μαθήματος, θα προσθέσετε έναν αισθητήρα GPS στη συσκευή IoT σας και θα διαβάσετε δεδομένα από αυτόν. ## Εικονικό Υλικό Η εικονική συσκευή IoT θα χρησιμοποιήσει έναν προσομοιωμένο αισθητήρα GPS που είναι προσβάσιμος μέσω UART μέσω μιας σειριακής θύρας. Ένας φυσικός αισθητήρας GPS διαθέτει κεραία για να λαμβάνει ραδιοκύματα από δορυφόρους GPS και να μετατρέπει τα σήματα GPS σε δεδομένα GPS. Η εικονική έκδοση προσομοιώνει αυτή τη λειτουργία επιτρέποντάς σας είτε να ορίσετε γεωγραφικό πλάτος και μήκος, να στείλετε ακατέργαστες προτάσεις NMEA, είτε να ανεβάσετε ένα αρχείο GPX με πολλαπλές τοποθεσίες που μπορούν να επιστραφούν διαδοχικά. > 🎓 Οι προτάσεις NMEA θα καλυφθούν αργότερα σε αυτό το μάθημα. ### Προσθήκη του αισθητήρα στο CounterFit Για να χρησιμοποιήσετε έναν εικονικό αισθητήρα GPS, πρέπει να τον προσθέσετε στην εφαρμογή CounterFit. #### Εργασία - προσθήκη του αισθητήρα στο CounterFit Προσθέστε τον αισθητήρα GPS στην εφαρμογή CounterFit. 1. Δημιουργήστε μια νέα εφαρμογή Python στον υπολογιστή σας σε έναν φάκελο που ονομάζεται `gps-sensor` με ένα μόνο αρχείο που ονομάζεται `app.py` και ένα εικονικό περιβάλλον Python, και προσθέστε τα πακέτα pip του CounterFit. > ⚠️ Μπορείτε να ανατρέξετε [στις οδηγίες για τη δημιουργία και ρύθμιση ενός έργου Python CounterFit στο μάθημα 1, αν χρειαστεί](../../../1-getting-started/lessons/1-introduction-to-iot/virtual-device.md). 1. Εγκαταστήστε ένα επιπλέον πακέτο Pip για να εγκαταστήσετε ένα CounterFit shim που μπορεί να επικοινωνεί με αισθητήρες που βασίζονται σε UART μέσω σειριακής σύνδεσης. Βεβαιωθείτε ότι το εγκαθιστάτε από ένα τερματικό με ενεργοποιημένο το εικονικό περιβάλλον. ```sh pip install counterfit-shims-serial ``` 1. Βεβαιωθείτε ότι η εφαρμογή ιστού CounterFit εκτελείται. 1. Δημιουργήστε έναν αισθητήρα GPS: 1. Στο πλαίσιο *Create sensor* στον πίνακα *Sensors*, ανοίξτε το αναπτυσσόμενο μενού *Sensor type* και επιλέξτε *UART GPS*. 1. Αφήστε τη *Θύρα* ρυθμισμένη σε */dev/ttyAMA0*. 1. Επιλέξτε το κουμπί **Add** για να δημιουργήσετε τον αισθητήρα GPS στη θύρα `/dev/ttyAMA0`. ![Οι ρυθμίσεις του αισθητήρα GPS](../../../../../translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.el.png) Ο αισθητήρας GPS θα δημιουργηθεί και θα εμφανιστεί στη λίστα αισθητήρων. ![Ο αισθητήρας GPS δημιουργήθηκε](../../../../../translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.el.png) ## Προγραμματισμός του αισθητήρα GPS Η εικονική συσκευή IoT μπορεί τώρα να προγραμματιστεί για να χρησιμοποιεί τον εικονικό αισθητήρα GPS. ### Εργασία - προγραμματισμός του αισθητήρα GPS Προγραμματίστε την εφαρμογή του αισθητήρα GPS. 1. Βεβαιωθείτε ότι η εφαρμογή `gps-sensor` είναι ανοιχτή στο VS Code. 1. Ανοίξτε το αρχείο `app.py`. 1. Προσθέστε τον παρακάτω κώδικα στην κορυφή του `app.py` για να συνδέσετε την εφαρμογή στο CounterFit: ```python from counterfit_connection import CounterFitConnection CounterFitConnection.init('127.0.0.1', 5000) ``` 1. Προσθέστε τον παρακάτω κώδικα κάτω από αυτό για να εισαγάγετε κάποιες απαραίτητες βιβλιοθήκες, συμπεριλαμβανομένης της βιβλιοθήκης για τη σειριακή θύρα του CounterFit: ```python import time import counterfit_shims_serial serial = counterfit_shims_serial.Serial('/dev/ttyAMA0') ``` Αυτός ο κώδικας εισάγει τη μονάδα `serial` από το πακέτο Pip `counterfit_shims_serial`. Στη συνέχεια, συνδέεται στη σειριακή θύρα `/dev/ttyAMA0` - αυτή είναι η διεύθυνση της σειριακής θύρας που χρησιμοποιεί ο εικονικός αισθητήρας GPS για τη θύρα UART. 1. Προσθέστε τον παρακάτω κώδικα κάτω από αυτό για να διαβάσετε από τη σειριακή θύρα και να εκτυπώσετε τις τιμές στην κονσόλα: ```python def print_gps_data(line): print(line.rstrip()) while True: line = serial.readline().decode('utf-8') while len(line) > 0: print_gps_data(line) line = serial.readline().decode('utf-8') time.sleep(1) ``` Ορίζεται μια συνάρτηση που ονομάζεται `print_gps_data`, η οποία εκτυπώνει τη γραμμή που της δίνεται στην κονσόλα. Στη συνέχεια, ο κώδικας εκτελεί έναν ατέρμονο βρόχο, διαβάζοντας όσες γραμμές κειμένου μπορεί από τη σειριακή θύρα σε κάθε επανάληψη. Καλεί τη συνάρτηση `print_gps_data` για κάθε γραμμή. Αφού διαβαστούν όλα τα δεδομένα, ο βρόχος κάνει παύση για 1 δευτερόλεπτο και στη συνέχεια προσπαθεί ξανά. 1. Εκτελέστε αυτόν τον κώδικα, διασφαλίζοντας ότι χρησιμοποιείτε διαφορετικό τερματικό από αυτό στο οποίο εκτελείται η εφαρμογή CounterFit, ώστε η εφαρμογή CounterFit να παραμείνει σε λειτουργία. 1. Από την εφαρμογή CounterFit, αλλάξτε την τιμή του αισθητήρα GPS. Μπορείτε να το κάνετε με έναν από τους παρακάτω τρόπους: * Ορίστε την **Πηγή** σε `Lat/Lon` και ορίστε ένα συγκεκριμένο γεωγραφικό πλάτος, μήκος και αριθμό δορυφόρων που χρησιμοποιούνται για τη λήψη της θέσης GPS. Αυτή η τιμή θα σταλεί μόνο μία φορά, οπότε επιλέξτε το πλαίσιο **Repeat** για να επαναλαμβάνονται τα δεδομένα κάθε δευτερόλεπτο. ![Ο αισθητήρας GPS με επιλεγμένο lat lon](../../../../../translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.el.png) * Ορίστε την **Πηγή** σε `NMEA` και προσθέστε κάποιες προτάσεις NMEA στο πλαίσιο κειμένου. Όλες αυτές οι τιμές θα σταλούν, με καθυστέρηση 1 δευτερολέπτου πριν από κάθε νέα πρόταση GGA (θέση). ![Ο αισθητήρας GPS με προτάσεις NMEA](../../../../../translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.el.png) Μπορείτε να χρησιμοποιήσετε ένα εργαλείο όπως το [nmeagen.org](https://www.nmeagen.org) για να δημιουργήσετε αυτές τις προτάσεις σχεδιάζοντας σε έναν χάρτη. Αυτές οι τιμές θα σταλούν μόνο μία φορά, οπότε επιλέξτε το πλαίσιο **Repeat** για να επαναλαμβάνονται ένα δευτερόλεπτο μετά την αποστολή όλων. * Ορίστε την **Πηγή** σε GPX αρχείο και ανεβάστε ένα αρχείο GPX με τοποθεσίες διαδρομής. Μπορείτε να κατεβάσετε αρχεία GPX από διάφορους δημοφιλείς ιστότοπους χαρτογράφησης και πεζοπορίας, όπως το [AllTrails](https://www.alltrails.com/). Αυτά τα αρχεία περιέχουν πολλαπλές τοποθεσίες GPS ως διαδρομή, και ο αισθητήρας GPS θα επιστρέφει κάθε νέα τοποθεσία σε διαστήματα του 1 δευτερολέπτου. ![Ο αισθητήρας GPS με αρχείο GPX](../../../../../translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.el.png) Αυτές οι τιμές θα σταλούν μόνο μία φορά, οπότε επιλέξτε το πλαίσιο **Repeat** για να επαναλαμβάνονται ένα δευτερόλεπτο μετά την αποστολή όλων. Αφού ρυθμίσετε τις παραμέτρους GPS, επιλέξτε το κουμπί **Set** για να αποθηκεύσετε αυτές τις τιμές στον αισθητήρα. 1. Θα δείτε την ακατέργαστη έξοδο από τον αισθητήρα GPS, κάτι σαν το παρακάτω: ```output $GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67 $GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67 ``` > 💁 Μπορείτε να βρείτε αυτόν τον κώδικα στον φάκελο [code-gps/virtual-device](../../../../../3-transport/lessons/1-location-tracking/code-gps/virtual-device). 😀 Το πρόγραμμα του αισθητήρα GPS σας ήταν επιτυχές! --- **Αποποίηση ευθύνης**: Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.