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/he/3-transport/lessons/1-location-tracking/pi-gps-sensor.md

9.8 KiB

קריאת נתוני GPS - Raspberry Pi

בחלק זה של השיעור, תוסיף חיישן GPS ל-Raspberry Pi שלך ותקריא ממנו ערכים.

חומרה

ה-Raspberry Pi זקוק לחיישן GPS.

החיישן שבו תשתמש הוא חיישן Grove GPS Air530. חיישן זה יכול להתחבר למערכות GPS מרובות כדי לספק מיקום מהיר ומדויק. החיישן מורכב משני חלקים - האלקטרוניקה המרכזית של החיישן ואנטנה חיצונית המחוברת באמצעות כבל דק לקליטת גלי רדיו מהלוויינים.

זהו חיישן UART, ולכן הוא שולח נתוני GPS דרך UART.

חיבור חיישן ה-GPS

ניתן לחבר את חיישן ה-GPS ל-Raspberry Pi.

משימה - חיבור חיישן ה-GPS

חבר את חיישן ה-GPS.

חיישן Grove GPS

  1. הכנס קצה אחד של כבל Grove לשקע בחיישן ה-GPS. הכבל ייכנס רק בכיוון אחד.

  2. כאשר ה-Raspberry Pi כבוי, חבר את הקצה השני של כבל Grove לשקע UART המסומן UART על כובע הבסיס של Grove המחובר ל-Pi. שקע זה נמצא בשורה האמצעית, בצד הקרוב לחריץ כרטיס ה-SD, בצד השני מהשקעים של ה-USB והאת'רנט.

    חיישן Grove GPS מחובר לשקע UART

  3. מקם את חיישן ה-GPS כך שהאנטנה המחוברת תהיה עם ראות לשמיים - רצוי ליד חלון פתוח או בחוץ. קל יותר לקבל אות ברור כאשר אין מכשולים בדרך של האנטנה.

תכנות חיישן ה-GPS

כעת ניתן לתכנת את ה-Raspberry Pi לשימוש בחיישן ה-GPS המחובר.

משימה - תכנות חיישן ה-GPS

תכנת את המכשיר.

  1. הפעל את ה-Pi והמתן עד שיסיים את תהליך האתחול.

  2. לחיישן ה-GPS יש שני נורות LED - נורה כחולה שמבזיקה כאשר נתונים מועברים, ונורה ירוקה שמבזיקה כל שנייה כאשר מתקבלים נתונים מלוויינים. ודא שהנורה הכחולה מבזיקה כאשר אתה מפעיל את ה-Pi. לאחר מספר דקות הנורה הירוקה תתחיל להבהב - אם לא, ייתכן שתצטרך למקם מחדש את האנטנה.

  3. הפעל את VS Code, או ישירות על ה-Pi, או באמצעות הרחבת Remote SSH.

    ⚠️ תוכל לעיין בהוראות להגדרת והפעלת VS Code בשיעור 1 אם יש צורך.

  4. בגרסאות החדשות יותר של Raspberry Pi שתומכות ב-Bluetooth, ישנו קונפליקט בין יציאת הסריאל המשמשת ל-Bluetooth לבין זו המשמשת ליציאת UART של Grove. כדי לפתור זאת, בצע את הפעולות הבאות:

    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 כאשר תתבקש לשמור את השינויים, ואז לחץ 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 עבור יציאת UART שלו. לאחר מכן הוא מנקה כל נתונים קיימים מחיבור הסריאל הזה.

    לאחר מכן מוגדרת פונקציה בשם print_gps_data שמדפיסה את השורה שהועברה אליה לקונסול.

    לאחר מכן הקוד מבצע לולאה אינסופית, קורא כמה שורות טקסט שהוא יכול מיציאת הסריאל בכל לולאה. הוא קורא לפונקציה print_gps_data עבור כל שורה.

    לאחר שכל הנתונים נקראו, הלולאה ישנה למשך שנייה אחת, ואז תנסה שוב.

  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 ללולאה שלך.

    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. למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה.