You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/el/3-transport/lessons/1-location-tracking/pi-gps-sensor.md

14 KiB

Ανάγνωση δεδομένων GPS - Raspberry Pi

Σε αυτό το μέρος του μαθήματος, θα προσθέσετε έναν αισθητήρα GPS στο Raspberry Pi σας και θα διαβάσετε τιμές από αυτόν.

Υλικό

Το Raspberry Pi χρειάζεται έναν αισθητήρα GPS.

Ο αισθητήρας που θα χρησιμοποιήσετε είναι ο Grove GPS Air530 sensor. Αυτός ο αισθητήρας μπορεί να συνδεθεί σε πολλαπλά συστήματα GPS για γρήγορη και ακριβή εντοπισμό. Ο αισθητήρας αποτελείται από 2 μέρη - τα βασικά ηλεκτρονικά του αισθητήρα και μια εξωτερική κεραία που συνδέεται με ένα λεπτό καλώδιο για να λαμβάνει τα ραδιοκύματα από τους δορυφόρους.

Πρόκειται για έναν αισθητήρα UART, οπότε στέλνει δεδομένα GPS μέσω UART.

Σύνδεση του αισθητήρα GPS

Ο αισθητήρας Grove GPS μπορεί να συνδεθεί στο Raspberry Pi.

Εργασία - σύνδεση του αισθητήρα GPS

Συνδέστε τον αισθητήρα GPS.

Αισθητήρας Grove GPS

  1. Εισάγετε το ένα άκρο ενός καλωδίου Grove στην υποδοχή του αισθητήρα GPS. Θα μπει μόνο με έναν συγκεκριμένο τρόπο.

  2. Με το Raspberry Pi απενεργοποιημένο, συνδέστε το άλλο άκρο του καλωδίου Grove στην υποδοχή UART που είναι σημειωμένη ως UART στο Grove Base hat που είναι συνδεδεμένο στο Pi. Αυτή η υποδοχή βρίσκεται στη μεσαία σειρά, στην πλευρά κοντά στην υποδοχή της κάρτας SD, στο αντίθετο άκρο από τις θύρες USB και την υποδοχή ethernet.

    Ο αισθητήρας Grove GPS συνδεδεμένος στην υποδοχή UART

  3. Τοποθετήστε τον αισθητήρα GPS έτσι ώστε η συνδεδεμένη κεραία να έχει ορατότητα προς τον ουρανό - ιδανικά δίπλα σε ένα ανοιχτό παράθυρο ή έξω. Είναι πιο εύκολο να λάβετε καθαρότερο σήμα χωρίς εμπόδια μπροστά από την κεραία.

Προγραμματισμός του αισθητήρα GPS

Το Raspberry Pi μπορεί τώρα να προγραμματιστεί για να χρησιμοποιήσει τον συνδεδεμένο αισθητήρα GPS.

Εργασία - προγραμματισμός του αισθητήρα GPS

Προγραμματίστε τη συσκευή.

  1. Ενεργοποιήστε το Pi και περιμένετε να εκκινήσει.

  2. Ο αισθητήρας GPS έχει 2 LED - ένα μπλε LED που αναβοσβήνει όταν μεταδίδονται δεδομένα και ένα πράσινο LED που αναβοσβήνει κάθε δευτερόλεπτο όταν λαμβάνονται δεδομένα από δορυφόρους. Βεβαιωθείτε ότι το μπλε LED αναβοσβήνει όταν ενεργοποιείτε το Pi. Μετά από λίγα λεπτά, το πράσινο LED θα αρχίσει να αναβοσβήνει - αν όχι, ίσως χρειαστεί να επανατοποθετήσετε την κεραία.

  3. Εκκινήστε το VS Code, είτε απευθείας στο Pi είτε συνδεθείτε μέσω της επέκτασης Remote SSH.

    ⚠️ Μπορείτε να ανατρέξετε στις οδηγίες για τη ρύθμιση και την εκκίνηση του VS Code στο μάθημα 1 αν χρειαστεί.

  4. Με τις νεότερες εκδόσεις του Raspberry Pi που υποστηρίζουν Bluetooth, υπάρχει μια σύγκρουση μεταξύ της σειριακής θύρας που χρησιμοποιείται για το Bluetooth και αυτής που χρησιμοποιείται από την υποδοχή Grove UART. Για να διορθώσετε αυτό, κάντε τα εξής:

    1. Από το τερματικό του VS Code, επεξεργαστείτε το αρχείο /boot/config.txt χρησιμοποιώντας το nano, έναν ενσωματωμένο επεξεργαστή κειμένου τερματικού, με την ακόλουθη εντολή:

      sudo nano /boot/config.txt
      

      Αυτό το αρχείο δεν μπορεί να επεξεργαστεί από το VS Code καθώς χρειάζεται να το επεξεργαστείτε με δικαιώματα sudo, δηλαδή αυξημένα δικαιώματα. Το VS Code δεν εκτελείται με αυτά τα δικαιώματα.

    2. Χρησιμοποιήστε τα πλήκτρα του κέρσορα για να μετακινηθείτε στο τέλος του αρχείου και αντιγράψτε τον παρακάτω κώδικα, επικολλώντας τον στο τέλος του αρχείου:

      dtoverlay=pi3-miniuart-bt
      dtoverlay=pi3-disable-bt
      enable_uart=1
      

      Μπορείτε να επικολλήσετε χρησιμοποιώντας τις κανονικές συντομεύσεις πληκτρολογίου για τη συσκευή σας (Ctrl+v στα Windows, Linux ή Raspberry Pi OS, Cmd+v στο macOS).

    3. Αποθηκεύστε αυτό το αρχείο και βγείτε από το nano πατώντας Ctrl+x. Πατήστε y όταν σας ζητηθεί να αποθηκεύσετε τον τροποποιημένο buffer και στη συνέχεια πατήστε enter για να επιβεβαιώσετε ότι θέλετε να αντικαταστήσετε το /boot/config.txt.

      Αν κάνετε κάποιο λάθος, μπορείτε να βγείτε χωρίς να αποθηκεύσετε και να επαναλάβετε αυτά τα βήματα.

    4. Επεξεργαστείτε το αρχείο /boot/cmdline.txt στο nano με την ακόλουθη εντολή:

      sudo nano /boot/cmdline.txt
      
    5. Αυτό το αρχείο περιέχει έναν αριθμό ζευγών κλειδιού/τιμής χωρισμένων με κενά. Αφαιρέστε οποιαδήποτε ζεύγη κλειδιού/τιμής για το κλειδί console. Πιθανότατα θα μοιάζουν κάπως έτσι:

      console=serial0,115200 console=tty1 
      

      Μπορείτε να μετακινηθείτε σε αυτές τις εγγραφές χρησιμοποιώντας τα πλήκτρα του κέρσορα και στη συνέχεια να τις διαγράψετε χρησιμοποιώντας τα κανονικά πλήκτρα del ή backspace.

      Για παράδειγμα, αν το αρχικό σας αρχείο μοιάζει με αυτό:

      console=serial0,115200 console=tty1 root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
      

      Η νέα έκδοση θα είναι:

      root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
      
    6. Ακολουθήστε τα παραπάνω βήματα για να αποθηκεύσετε αυτό το αρχείο και να βγείτε από το nano.

    7. Επανεκκινήστε το Pi σας και στη συνέχεια συνδεθείτε ξανά στο VS Code μόλις το Pi επανεκκινήσει.

  5. Από το τερματικό, δημιουργήστε έναν νέο φάκελο στον αρχικό κατάλογο του χρήστη pi με όνομα gps-sensor. Δημιουργήστε ένα αρχείο σε αυτόν τον φάκελο με όνομα app.py.

  6. Ανοίξτε αυτόν τον φάκελο στο VS Code.

  7. Το μοντέλο GPS στέλνει δεδομένα UART μέσω μιας σειριακής θύρας. Εγκαταστήστε το πακέτο Pip pyserial για να επικοινωνήσετε με τη σειριακή θύρα από τον κώδικα Python σας:

    pip3 install pyserial
    
  8. Προσθέστε τον παρακάτω κώδικα στο αρχείο app.py:

    import time
    import serial
    
    serial = serial.Serial('/dev/ttyAMA0', 9600, timeout=1)
    serial.reset_input_buffer()
    serial.flush()
    
    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)
    

    Αυτός ο κώδικας εισάγει τη μονάδα serial από το πακέτο Pip pyserial. Στη συνέχεια, συνδέεται στη σειριακή θύρα /dev/ttyAMA0 - αυτή είναι η διεύθυνση της σειριακής θύρας που χρησιμοποιεί το Grove Pi Base Hat για την υποδοχή UART. Στη συνέχεια, καθαρίζει οποιαδήποτε υπάρχοντα δεδομένα από αυτή τη σειριακή σύνδεση.

    Στη συνέχεια, ορίζεται μια συνάρτηση με όνομα print_gps_data που εκτυπώνει τη γραμμή που της δίνεται στην κονσόλα.

    Στη συνέχεια, ο κώδικας επαναλαμβάνεται για πάντα, διαβάζοντας όσες γραμμές κειμένου μπορεί από τη σειριακή θύρα σε κάθε επανάληψη. Καλεί τη συνάρτηση print_gps_data για κάθε γραμμή.

    Αφού διαβαστούν όλα τα δεδομένα, η επανάληψη κοιμάται για 1 δευτερόλεπτο και στη συνέχεια προσπαθεί ξανά.

  9. Εκτελέστε αυτόν τον κώδικα. Θα δείτε την ακατέργαστη έξοδο από τον αισθητήρα GPS, κάτι σαν το παρακάτω:

    $GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67
    $GPGSA,A,1,,,,,,,,,,,,,,,*1E
    $BDGSA,A,1,,,,,,,,,,,,,,,*0F
    $GPGSV,1,1,00*79
    $BDGSV,1,1,00*68
    

    Αν λάβετε κάποιο από τα παρακάτω σφάλματα όταν σταματάτε και επανεκκινείτε τον κώδικα, προσθέστε ένα μπλοκ try - except στη while loop σας.

    UnicodeDecodeError: 'utf-8' codec can't decode byte 0x93 in position 0: invalid start byte
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf1 in position 0: invalid continuation byte
    
    while True:
        try:
            line = serial.readline().decode('utf-8')
    
            while len(line) > 0:
                print_gps_data()
                line = serial.readline().decode('utf-8')
    
        # There's a random chance the first byte being read is part way through a character.
        # Read another full line and continue.
    
        except UnicodeDecodeError:
            line = serial.readline().decode('utf-8')
    
    time.sleep(1)
    

💁 Μπορείτε να βρείτε αυτόν τον κώδικα στον φάκελο code-gps/pi.

😀 Το πρόγραμμα του αισθητήρα GPS σας ήταν επιτυχές!


Αποποίηση ευθύνης:
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης Co-op Translator. Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.