NMEA 0183 Protokolü Hakkında Teknik Rehber

NMEA 0183, denizcilik ve navigasyon sistemlerinde yaygın olarak kullanılan bir iletişim protokolüdür. Bu yazıda NMEA 0183’ün yapısını, çalışma mantığını, mesaj tiplerini ve modern uygulamalarını teknik detaylarla ele alacağız.


🔹 NMEA 0183 Nedir?

NMEA 0183, National Marine Electronics Association tarafından geliştirilen, elektronik navigasyon cihazlarının birbirleriyle seri iletişim kurmasını sağlayan bir standart protokoldür. Başlıca kullanım alanları şunlardır:

  • GPS alıcıları
  • Otomatik pilot sistemleri
  • Derinlik ölçerler
  • Radar ve AIS sistemleri
  • Rüzgar sensörleri ve çevresel sensörler

Protokol, cihazlar arasında ASCII tabanlı, RS-422 veya RS-232 üzerinden veri iletimi sağlar.


🛠️ Teknik Özellikler

1. Fiziksel Katman

  • Baud Hızı: Genellikle 4800 bps, AIS gibi uygulamalarda 38400 bps’ye kadar çıkar.
  • Veri Formatı: 1 başlangıç biti, 8 veri biti, 1 dur bit, parity yoktur.
  • Elektriksel Arayüz:
    • RS-422: Diferansiyel sinyal, uzun mesafelerde güvenilirlik sağlar.
    • RS-232: Kısa mesafelerde kullanılır, genellikle tek cihaz bağlantılarında tercih edilir.

2. Veri Çerçevesi Yapısı

NMEA 0183 mesajları cümle (sentence) olarak adlandırılır ve ASCII karakterlerle iletilir.
Bir tipik NMEA cümlesi şöyle görünür:

$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47

📑 NMEA 0183 Mesaj Yapısı

Bir NMEA cümlesi şu bileşenlerden oluşur:

AlanAçıklama
$Başlangıç karakteri
Talker IDVeriyi gönderen cihazın tanımı (örn: GP=GPS)
Sentence IDMesaj tipini belirler (örn: GGA, RMC, GSV)
Data FieldsVirgülle ayrılmış veri alanları
*Checksum başlangıcı
ChecksumXOR tabanlı doğrulama değeri
CR/LFSatır sonu karakterleri

🧩 Yaygın NMEA 0183 Mesaj Tipleri

1. GGA (Global Positioning Fix Data)

  • Konum, yükseklik ve uydu bilgilerini içerir.
  • Örnek: $GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47

2. RMC (Recommended Minimum Specific GPS/Transit Data)

  • Temel navigasyon bilgilerini verir: konum, hız, tarih, saat.
  • Örnek: $GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A

3. GSV (Satellites in View)

  • Görülebilen uydular hakkında bilgi sağlar.

4. VTG (Track Made Good and Ground Speed)

  • Cihazın hızı ve yönünü belirtir.

🔄 NMEA 0183’te Checksum Hesaplama

Checksum, veri bütünlüğünü sağlamak için XOR tabanlı olarak hesaplanır:

  1. $ ve * arasındaki tüm karakterler alınır.
  2. XOR işlemi uygulanır.
  3. Sonuç hexadecimal olarak iletilir.

Örnek:

$GPGLL,4916.45,N,12311.12,W,225444,A

Bu cümlenin checksum değeri şu şekilde hesaplanır:
GPGLL,4916.45,N,12311.12,W,225444,A → XOR sonucu = 31
Sonuç: *31

⚡ NMEA 0183 vs. NMEA 2000

ÖzellikNMEA 0183NMEA 2000
Veri FormatıASCIIBinary (CAN Bus)
Baud Hızı4800 – 38400 bps250 kbps
TopolojiNoktadan noktayaÇoklu cihaz ağı
Maks. Mesaj82 karakter8 byte veri bloğu
KarmaşıklıkBasitDaha gelişmiş

🛠️ Uygulama Alanları

  • GPS Navigasyon Sistemleri: Konum, hız, zaman senkronizasyonu
  • Otomatik Pilotlar: Rota verilerinin aktarımı
  • AIS Sistemleri: Gemi trafiği yönetimi
  • Radar Entegrasyonu: Hedef konumlandırma
  • Meteorolojik Sensörler: Rüzgar, sıcaklık, basınç verileri

🔧 NMEA 0183 Parsingi İçin Örnek Python Kodu

import serial

def read_nmea():
    with serial.Serial('/dev/ttyUSB0', 4800, timeout=1) as ser:
        while True:
            line = ser.readline().decode('ascii', errors='replace').strip()
            if line.startswith('$'):
                print(f"NMEA Cümlesi: {line}")

read_nmea()

Bu kod, NMEA 0183 cihazından gelen verileri okur ve konsola yazdırır.


📌 Sonuç

NMEA 0183, denizcilik ve navigasyon sektöründe uzun yıllardır kullanılan, basit ama etkili bir haberleşme protokolüdür. Günümüzde yerini yavaş yavaş NMEA 2000 standardına bıraksa da, birçok sistemde hala aktif olarak kullanılmaktadır. NMEA mesajlarının doğru parse edilmesi, güvenilir navigasyon verileri için kritik öneme sahiptir.


❓ Bu Yazı Hangi Soruları Cevaplıyor?

  • NMEA 0183 protokolü nedir ve nasıl çalışır?
  • NMEA 0183 cümle yapısı nasıldır?
  • GGA, RMC, GSV gibi mesaj tipleri ne anlama gelir?
  • Checksum nasıl hesaplanır?
  • NMEA 0183 ile NMEA 2000 arasındaki farklar nelerdir?
  • Python ile NMEA 0183 verileri nasıl okunur?