شاید تا به حال از ماژول های موقعیت GPS یا GNSS استفاده کرده باشید. ماژول هایی از برند هایی مانند سیمکام، کویکتل و یا یوبلاکس. خروجی این ماژول ها برای بررسی و استفاده از اطلاعات ارسالی از سمت ماهواره ها به یک شکل است. بدیهی است چنانچه هر ماژول یک استاندارد برای خود داشته باشد، رمز گشایی و استخراج اطلاعات برای هر کدام از آنها متفاوت است و نیاز به برنامه نویسی برای هر کدام دارد. پس برای رفع این در هم ریختگی یک استاندادر مشخص تعریف شد.
موسسه NMEA که اختصار یافته “National Marine Electronics Association” میباشد، حتی قبل از اختراع GPS نیز وجود داشت. امروزه NMEA یک فرمت داده استاندارد است که توسط تمام تولید کننده های GPS پشتیبانی میشود. هدف NMEA توانا ساختن کاربر برای تلفیق و مچ کردن سخت افزار و نرم افزار است. با استفاده از این استاندارد کار تولید و طراحی و برنامه نویسی برای دریافت و به نمایش گذاشتن اطلاعات آن، ساده شده است. طوری که برای استخراج اطلاعات از یک الگوریتم و روشی مشابه هم میتوان در انواع گیرنده ها استفاده کرد.
چیزی که باعث کمی سر درگمی خواهد شد، وجود چندین پیغام در این استاندارد میباشد. همانطور که انواع گیرنده GPS با قابلیت های متفاوت وجود دارد، انواع پیغام های NMEA با قابلیت و مفهوم متفاوت نیز وجود دارد. در ادامه به تشریح آن خواهیم پرداخت. پس با ما همراه باشید.
ساختار پیغام NMEA
هر دیتا یا پیام NMEA در ابتدا با یک کاراکتر “$” شروع خواهد شد. پس دانستن همین موضوع کمکی شایانی در خواندن اطلاعات خواهد کرد. هر فیلد از پیام های NMEA نیز با یک کاما از یکدیگر جدا میشود.
Bearing using Great Circle route | BWC | 1 |
Datum being used | DTM | 2 |
Fix information | GGA | 3 |
at/Lon data | GLL | 4 |
GPS Range Residuals | GRS | 5 |
Overall Satellite data | GSA | 6 |
GPS Pseudorange Noise Statistics | GST | 7 |
Detailed Satellite data | GSV | 8 |
send control for a beacon receiver | MSK | 9 |
Beacon receiver status information | MSS | 10 |
recommended Loran data | RMA | 11 |
recommended minimum data for GPS | RMC | 12 |
recommended minimum data for GPS | RMC | 13 |
route message | RTE | 14 |
Transit Fix Data | TRF | 15 |
Multiple Data ID | STN | 16 |
dual Ground/Water Speed | VBW | 17 |
Vector track an Speed over the Ground | VTG | 18 |
Waypoint closure velocity (Velocity Made Good) | WCV | 19 |
Waypoint Location information | WPL | 20 |
cross track error | XTC | 21 |
measured cross track error | XTE | 22 |
Zulu (UTC) time and time to go (to destination) | ZTG | 23 |
Date and Time | ZDA | 24 |
هر ماژول گیرنده از یک سری از قالب های ذکر شده در بالا پشنیبانی میکند. مثلا در استفاده از دستورات AT در ماژول SIM808 برای قسمت GPS، میتوان از قالب های ردیف 3، 4، 6، 8، 13، 18 و 24 استفاده کرد. و در زمان استفاده از دستورات AT مربوط به GNSS میتوان از قالب های ردیف 3، 6، 8 و 13 استفاده نمود.
مثالی از قالب GGA:
$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,…,…,*47
اطلاعات و مفاهیم پیغام بالا در زیر بصورت جز به جز اشاره شده است.
- تمام پیام های NMEA با کاراکتر $ شروع میشوند.
- GP بیانگر این است که این داده مربوط به GPS است. “GL مربوط به GLONASS و GN مربوط به سامانه GNSS است.”
- پس از آن، فرمت قالب قرار می گیرد. به طور مثال در اینجا GGA قرار گرفته است.
- عدد 133019 زمان UTC از چپ به راست به شکل ساعت، دقیقه و ثانیه است. در این مثال برابر با 13:30:19 است.
- عدد 4807.038 عرض جغرافیایی به فرمت DDMM.MMM است. تعداد ارقام اعشار متغیر است.
- حرف N بیانگر نیم کرۀ شمالی است.
- عدد 01131.000 طول جغرافیایی به فرمت DDMM.MMM است. تعداد ارقام اعشار متغیر است.
- حرف E بیانگر نیم کرۀ شرقی است.
- عدد 1 بیانگر شاخص کیفیت و انواع آن بصورت زیر است:
A) Invalid = 0
B) GPS fix (SPS) = 1
C) DGPS fix = 2
D) PPS fix = 3
E) Real Time Kinematic = 4
F) Float RTK = 5
G) Estimated (Dead reckoning) (2.3 feature) = 6
H) Manual input mode = 7
I) Simulation mode = 8
- عدد 08 بیانگر تعداد ماهواره های به کار گرفته شده در بدست آوردن این مختصات است.
- عدد 0.9 ضریب تعدیل دقت مسطحاتی HDOP است.
- عدد 545.4 و حرف M بیانگر ارتفاع بالاتر از سطح دریا بر حسب متر است.
- عدد 46.9 و حرف M ارتفاع (بر حسب متر) بر مبنی شکل واقعی کرۀ زمین است (ژئوئید یا بیضوی)
- فیلد خالی: در صورتی که موجود باشد، محتوی این فیلد سن ماهواره است.
- فیلد خالی: در صورتی که موجود باشد، محتوی این فیلد آیدی ماهواره است.
- عدد و کاراکتر 47* بیانگر Checksum داده بین علامت “$” و “*” است.
علاوه بر پیغام های NMEA که شامل مختصات GPS میباشند، چندین پیام NMEA دیگر اطلاعات بیشتری را در کنار مختصات GPS ارائه می دهد که در زیر به برخی از آن ها اشاره شده است.
GPGSA$ اطلاعات جزئی ردیابی ماهواره (به عنوان مثال شماره ماهواره) و اطلاعات جزئی مربوط به ضرایب تعدیل دقت GPS DOP. (پیغام GNGSA$ برای گیرنده های GNSS میباشد.)
GPVTG$ اطلاعات سرعت و آفست های ردیابی ماهواره.
GPGSV$ اطلاعات جزئی ماهواه های GPS مانند ارتفاع هر ماهواره ای که ردیابی می شود. (پیغام GNGSV$ برای گیرنده های GNSS میباشد.)
GPGST$ دقت مسطحاتی و ارتفاعی تخمینی. (GNGST$ مخصوص گیرنده های GNSS میباشد.)
نکاتی مربوط به NMEA
1- در بعضی از کاربرد ها مانند کاربرد های میکروکنترلی، تنها موارد ردیف 4، 5، 6، 7، 8 و 16 از فرمت GGA از داده های خروجی ماژول موقعیت یاب نیاز میباشد.
2- در برخی از ماژول های موقعیت یابی علاوه بر خروجی دیتا بر مبنای استاندارد NMEA، قابلیت ارسال در یک قالب پیش فرض ماژول نیز میباشد. مثلا با ارسال دستور AT+CGPSINF=0 در ماژول SIM808، اطلاعات در قالب پیش فرضِ ماژول، توسط درگاه UART برای کاربر ارسال خواهند شد.
3- در پاره ای از موارد استفاده از اطلاعات GGA نیاز های پروژه را پاسخگو خواهد بود و از آنها میتوان استفاده کرد. در صورت نیاز به سایر اطلاعات مانند سرعت ماهواره، شماره ماهواره ها و… نیازمند استفاده از سایر قالب هاهی NMEA میباشد.
در برخی از ماژول های موقعیت یابی که GNSS را پشتیبانی میکنند، هم میتوان از GPS به تنهایی استفاده کرد و هم از GNSS. در مواردی که دقت حائز اهمیت باشد از سیستم موقعیت یابی GNSS استفاده خواهد شد. برای این کار باید از دستورات AT مربوط به آن استفاده نمود.
در ماژول هایی که از GNSS پشتیبانی میکنند، اگر از دستورات AT مربوط به GPS استفاده شود، طول و عرض جغرافیایی در فرمت DMM و در صورت استفاده از دستورات AT بخش GNSS، طول و عرض جغرافیایی با فرمت DD خواهد بود. در صورتی که بخواهیم طول و عرض جغرافیایی را مستقیما روی گوگل مپ نمایش دهیم، باید از یکی از فرمت های DMS و DD استفاده شود (برای طول و عرض جغرافیایی 3 فرمت استاندارد DD ،DMS و DMM وجود دارد.). که فرمت DD نیازمند کد نویسی کمتری خواهد بود.
برخی از قابلیت های ماژول های موقعیت یاب GNSS را میتوان با استفاده دستورات AT Command تغییر داد. مانند تغییر Update Rate، Baud Rate و Sentence Selection. این امر دارای مزایایی مانند کاهش توان مصرفی خواهد بود.
مثال:
$ PMTK 314 ,0,1,1,0,0,0,0,0,0,0,0,0,0,0 * 34
قسمت اول = یک بایت = کارکتر $
قسمت دوم = چهار بایت = عبارت PMTK
قسمت سوم = سه بایت = عددی بین 000 تا 999 = شناسه ای که به دیکودر، نحوۀ کد گذاری را اطلاع خواهد داد.
قسمت چهارم = تعداد بایت متغیر = دیتا ارسالی که حاوی یک فرمان اجرایی است در این قسمت قرار خواهد گرفت.
قسمت پنجم = یک بایت = کاراکتر “*” نشانگر پایان داده است.
قسمت ششم = دو بایت = در این قسمت Check Sum بین عبارات “$” و “*” قرار دارد.
قسمت هفتم = دو بایت = کاراکتر های CR و LF (همان /r و /n) که بیانگر پایان پیام است.
مثال: با ارسال دستور زیر میتوان زمان آپدیت دیتا GNSS را تنظیم کرد. در این مثال 2000ms تنظیم شده است.
AT+CGNSCMD = 0 , “$ PMTK 220 ,3000 * 1D”
در مثال بالا عدد صفر نماینگر این است که فرمت داده ارسالی بصورت NMEA میباشد. در صورتی که بخواهیم فرمت داده ارسالی بصورت پیش فرض باشد به جای آن از عدد 1 استفاده خواهد شد.
AT+CGNSCMD = 1 , “2420504d544b20323230202c33303030202a20314420”
در این مطلب سعی شد بصورت اجمالی و خلاصه به موضوع پرداخته شود. چنانچه در این خصوص سوال یا نظر و یا اطلاعات بیشتری دارید، آن را از قسمت کامنت ها با ما در میان بگذارید تا در اسرع وقت پاسخ داده بشه و از تجربیات و اطلاعات شما هم استفاده شود. امیدوارم که از این مطلب راضی بوده باشید و از اون استفاده کنید.
سلام مهندس
میخواستم بدونم دستور AT COMMAND ای هست که بشه با اون بعضی از اطلاعات NMEA نمایش داده نشن مثلا من الان دارم اطلاعات مربوط به GNGGA،GPGSA،GLGSA،GPGSV،GLGSV،GNRMC،GNVTG دریافت میکنم اگر بخوام فقط اطلاعات مریوط به GNRMC , GPGSA ,GNGGA نمایش داده شوند و بقیه اطلاعات نمایش داده نشوند چکار باید بکنم؟ ماژول مورد استفاده من sim868 هست.
سلام و وقت بخیر؛
در باره مورد اول که فرمودید باید به فایل AT Command مربوط به ماژول مورد استفاده خودتون مراجعه کنید و اون رو بررسی کنید.
در خصوص مورد دوم، بله شما میتونید نسبت به دیتا های NMEA دریافتی تفاوت قائل بشید. به این صورت که بعد از دریافت دیتا از ماژول، بررسی کنید ابتدای هر کدوم رو و مثلا اگر برابر GNGGA بود کار خاصی رو انجام بدید و… . در واقع داخل خود برنامه میتونید مشخص کنید از بین دیتا های دریافتی کدوم موارد رو در نظر بگیرید و کدوم موارد رو در نظر نگیرید.