4.0 KiB
פענוח נתוני GPS - חומרה וירטואלית לאינטרנט של הדברים ו-Raspberry Pi
בחלק זה של השיעור, תפענחו את הודעות NMEA שנקראות מחיישן ה-GPS על ידי ה-Raspberry Pi או מכשיר IoT וירטואלי, ותפיקו את קווי הרוחב והאורך.
פענוח נתוני GPS
לאחר קריאת נתוני NMEA הגולמיים מהפורט הסדרתי, ניתן לפענח אותם באמצעות ספריית NMEA בקוד פתוח.
משימה - פענוח נתוני GPS
תכנתו את המכשיר לפענח את נתוני ה-GPS.
-
פתחו את פרויקט האפליקציה
gps-sensor
אם הוא עדיין לא פתוח. -
התקינו את חבילת Pip בשם
pynmea2
. חבילה זו מכילה קוד לפענוח הודעות NMEA.pip3 install pynmea2
-
הוסיפו את הקוד הבא לייבואים בקובץ
app.py
כדי לייבא את המודולpynmea2
:import pynmea2
-
החליפו את תוכן הפונקציה
print_gps_data
בקוד הבא: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
מבצעת את ההמרה הזו.לאחר מכן נבדקת כיווניות קו הרוחב, ואם קו הרוחב הוא דרומי, הערך מומר למספר שלילי. אותו הדבר לגבי קו האורך, אם הוא מערבי, הוא מומר למספר שלילי.
לבסוף, הקואורדינטות מודפסות לקונסולה, יחד עם מספר הלוויינים ששימשו למציאת המיקום.
-
הריצו את הקוד. אם אתם משתמשים במכשיר IoT וירטואלי, ודאו שאפליקציית CounterFit פועלת ונתוני ה-GPS נשלחים.
pi@raspberrypi:~/gps-sensor $ python3 app.py 47.6423109,-122.1390293 - from 3 satellites
💁 תוכלו למצוא את הקוד הזה בתיקיית code-gps-decode/virtual-device, או בתיקיית code-gps-decode/pi.
😀 תוכנית חיישן ה-GPS שלכם עם פענוח נתונים הצליחה!
כתב ויתור:
מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית Co-op Translator. למרות שאנו שואפים לדיוק, יש להיות מודעים לכך שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה.