NMEA 0183 (от «National Marine Electronics Association») — стандарт определяющий текстовый протокол связи навигационного оборудования. Стал особенно популярен в связи с распространением GPS-приёмников, использующих этот стандарт для передачи данных по шине UART.
Сообщения NMEA передаваемые GPS-модулем могут состоять из одной или нескольких строк.
Состав строк:
- Каждая строка начинается символом '$'.
- Далее следуют два символа источника данных и три символа идентификатора строки.
- После идентификатора следуют данные состоящие из параметров, разделённые запятыми.
- Завершают строку символ '*', два символа контрольной суммы и символы "\r\n".
Источник данных:
Источник данных представлен двумя символами которые следуют за символом '$'.
- GP - информация получена от спутников GPS (США).
- GL - информация получена от спутников Глонасс (Россия).
- GA - информация получена от спутников Galileo (Европа).
- BD - информация получена от спутников Beidou (Китай).
- GQ - информация получена от спутников QZSS (Япония).
- GN - информация получена от спутников разных навигационных систем.
Идентификатор строки:
Идентификатор строки представлен тремя символами следующими за источником данных.
- GGA - Данные о последнем зафиксированном местоположении.
- GLL - Географические координаты.
- GSA - Информация об активных спутниках (участвующих в позиционировании).
- GSV - Информация о всех наблюдаемых спутниках.
- RMC - Рекомендуемый минимум навигационных данных.
- VTG - Скорость и курс относительно земли.
- ZDA - Дата и время.
- DHV - Информация о скорости движения GNSS приемника.
- GST - Статистика ошибок позиционирования.
- TXT - Текстовое сообщение.
Данные:
Данные состоят из параметров, разделённых запятыми. Тип и состав параметров зависит от идентификатора строки. Ниже рассмотрены параметры строк с разными идентификаторами.
Контрольная сумма:
Контрольная сумма представлена двумя символами следующими за символом '*'.
Контрольная сумма представляет из себя шестнадцатиричное представление результата операции XOR с байтами всех символов строки расположенных между '$' и '*', не включительно.
Состав сообщений:
Сообщения состоят из одной и более строк. Количество строк и их состав зависят от настроек GPS модуля.
При пользовании библиотекой iarduino_GPS_ATGM336, состав сообщений можно настроить функцией composition(), указав ей идентификаторы тех строк, которые требуется включить в состав сообщения отправляемого Trema GPS модулем ATGM336H.
Пример сообщений NMEA 0183:
Пример сообщения NMEA 0183 версии 4.1:
$GNGGA,102030.000,5546.95900,N,03740.69200,E,1,08,2.0,142.0,M,0.0,M,,* $GNGLL,5546.95900,N,03740.69200,E,102030.000,A,A* $GNGSA,A,3,10,16,18,20,26,27,,,,,,,4.8,2.0,4.3,1* $GNGSA,A,3,19, , , , , ,,,,,,,4.8,2.0,4.3,4* $GNGSA,A,3,82, , , , , ,,,,,,,4.8,2.0,4.3,2* $GPGSV,3,1,12,07,08,343,,08,07,304,,10,28,195,42,13,20,054,,0* $GPGSV,3,2,12,15,27,087,,16,47,262,39,18,66,082,23,20,58,174,23,0* $GPGSV,3,3,12,21,75,089,23,26,33,222,31,27,38,298,40,29,15,127,,0* $BDGSV,1,1,01,19,29,174,28,0* $GLGSV,3,1,09,74,08,001,34,66,55,096,,82,69,318,21,73,25,326,,0* $GLGSV,3,2,09,80,20,258,,65,18,025,,83,21,292,,81,51,092,,0* $GLGSV,3,3,09,67,26,161,,0* $GNRMC,102030.000,A,5546.95900,N,03740.69200,E,0.12,49.75,200220,,,A,V* $GNVTG,49.75,T,,M,0.12,N,0.22,K,A* $GNZDA,102030.000,20,02,2020,00,00* $GPTXT,01,01,01,ANTENNA OK* $GNDHV,102030.000,0.03,0.000,0.000,0.000,0.00,,,,,M* $GNGST,102030.000,6.9,,,,5.6,9.2,10.1* $GPTXT,01,01,02,MS=7,7,061A8200,33,0,00000000,20,2,00028000*
Отличия сообщений версий 2.0 и 4.0 от 4.1 рассмотрены в описаниях параметров строк.
GGA:
Строка с идентификатором GGA содержит данные о последнем местоположении.
Пример строки GGA:
$GNGGA,102030.000,5546.95900,N,03740.69200,E,1,08,2.7,142.0,M,0.0,M,,*FF/r/n ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^^^ 1 2 3 4 5 6 7 8 9 0 1 234
Назначение параметров строки GGA:
- 1 - Время UTC в формате "ЧЧММСС.ССС". В примере "102030.000" = 10ч., 20м., 30.000 сек.
- 2 - Широта в формате "ГГММ.МММММ". В примере "5546.95900" = 55°46.959' = 55.78265°.
- 3 - Направление широты: 'N'-север / 'S'-юг. В примере 'N' - север.
- 4 - Долгота в формате "ГГГММ.МММММ". В примере "03740.69200" = 37°40.692' = 37.6782°.
- 5 - Направление долготы: 'E'-восток / 'W'-запад. В примере 'E' - восток.
- 6 - Способ вычисления координат. В примере '1' - автономно.
- '0' - недоступно.
- '1' - автономно.
- '2' - дифференциально.
- '3' - PPS.
- '4' - фиксированный RTK.
- '5' - не фиксированный RTK.
- '6' - экстраполяция.
- '7' - фиксированные координаты.
- '8' - режим симуляции.
- 7 - Количество активных спутников, от "00" до "12". В примере "08".
- 8 - Горизонтальный геометрический фактор ухудшения точности (HDOP). В примере "2.7".
- 9,10 - Высота над уровнем моря (geoid), единицы измерения высоты. В примере "142.0,M".
- 11,12 - Разница между эллипсоидом земли и уровнем моря (geoid), единицы измерения.
- 13 - Количество секунд прошедших с получения последней DGPS поправки (SC104).
- 14 - ID базовой станции предоставляющей DGPS поправки (если включено DGPS).
Примечание: В примере GPS-модуль не отправил значение параметров 13 и 14.
GLL:
Строка с идентификатором GLL содержит географические координаты.
Пример строки GLL:
$GNGLL,5546.95900,N,03740.69200,E,102030.000,A*FF/r/n - версия 2.2 $GNGLL,5546.95900,N,03740.69200,E,102030.000,A,A*FF/r/n - версия 4.0 и 4.1 ^ ^ ^ ^ ^ ^ ^ 1 2 3 4 5 6 7
Назначение параметров строки GLL:
- 1 - Широта в формате "ГГММ.МММММ". В примере "5546.95900" = 55°46.959' = 55.78265°.
- 2 - Направление широты: 'N'-север / 'S'-юг. В примере 'N'-север.
- 3 - Долгота в формате "ГГГММ.МММММ". В примере "03740.69200" = 37°40.692' = 37.6782°.
- 4 - Направление долготы: 'E'-восток / 'W'-запад. В примере 'E'-восток.
- 5 - Время UTC в формате "ЧЧММСС.ССС". В примере "102030.000" = 10ч., 20м., 30.000 сек.
- 6 - Достоверность полученных координат. В примере 'A' - данные достоверны.
- 'A' - данные достоверны.
- 'V' - ошибочные данные.
- 7 - Способ вычисления координат. В примере 'A' - автономный.
- 'A' - автономный.
- 'D' - дифференциальный.
- 'E' - аппроксимация.
- 'M' - фиксированные данные.
- 'N' - недостоверные данные.
Примечание: В сообщениях NMEA 0183 версии 2.2 строка содержит только 6 параметров.
GSA:
Строка с идентификатором GSA содержит информацию об активных спутниках.
Пример строки GSA:
$GPGSA,A,3,10,16,18,20,26,27,,,,,,,4.8,2.0,4.3*FF/r/n - версия 2.2 и 4.0 $GNGSA,A,3,10,16,18,20,26,27,,,,,,,4.8,2.0,4.3,1*FF/r/n - версия 4.1 ^ ^ ^ ^ ^ ^ ^ ^ ^^^^^^ ^ ^ ^ ^ 1 2 3 4 5 6 7 8 901234 5 6 7 8
Назначение параметров строки GSA:
- 1 - Режим выбора формата 2D/3D: 'A'-автоматический / 'M'-ручной. В примере 'A' - автоматич.
- 2 - Режим выбранного формата '1'-нет решения / '2'-2D / '3'-3D. В примере '3' - 3D.
- 3-14 - ID активного спутника. В примере указаны ID 6 спутников: "10", "16", "18", "20", "26", "27".
- 15 - Пространственный геометрический фактор ухудшения точности (PDOP). В примере "4.8".
- 16 - Горизонтальный геометрический фактор ухудшения точности (HDOP). В примере "2.0".
- 17 - Вертикальный геометрический фактор ухудшения точности (VDOP). В примере "4.3".
- 18 - Номер навигационной системы (1-GPS, 2-Glonass, 3-Galileo, 4-Beidu). В примере '1'.
Примечание: В одном сообщении NMEA 0183 отправляется сразу несколько строк GSA, по одной для каждой спутниковой навигационной системы используемой модулем.
В сообщениях NMEA 0183 версии 2.2 и 4.0 строка содержит только 17 параметров, а источник данных (два первых символа после '$') указывает на конкретную спутниковую навигационную систему "GP", "GL", "GA", "BD", или "GQ", в отличии от версии 4.1, где источник данных для любой строки GSA указан как "GN", а спутниковая навигационная система определена в 18 параметре.
GSV:
Строка с идентификатором GSV содержит информацию о всех наблюдаемых спутниках.
Пример строки GSV:
Пример строки в которой присутствует информация о 4 спутниках (максимальное количество):
$GLGSV,3,1,09,74,09,089,06,66,55,095,,82,70,320,18,73,26,325,23*FF/r/n - версия 2.2 и 4.0 $GLGSV,3,1,09,74,09,089,06,66,55,095,,82,70,320,18,73,26,325,23,0*FF/r/n - версия 4.1 ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ 1 2 3 4 5 6 7 4 5 6 7 4 5 6 7 4 5 6 7 8
Пример строки в которой присутствует информация только о 2 спутниках:
$GLGSV,3,3,09,67,26,161,23,82,70,320,18*FF/r/n - версия 2.2 и 4.0 $GLGSV,3,3,09,67,26,161,23,82,70,320,18,0*FF/r/n - версия 4.1 ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ 1 2 3 4 5 6 7 4 5 6 7 8
Назначение параметров строки GSV:
- 1 - Количество выводимых сообщений GSV для данной навигационной системы. В примере '3'.
- 2 - Номер сообщения GSV для данной навигационной системы. В 1 примере '1', во втором '3'.
- 3 - Количество наблюдаемых спутников указанной навигационной системы. В примере "09".
- 4,5,6,7 - Данные о спутнике. В одной строке может быть от 0 до 4 блоков данных.
Каждый блок данных состоит из 4 параметров: - ID спутника (от 1 до 255). ID не может быть равен '0'.
- Угол возвышения спутника относительно модуля, в градусах ("00"-горизонт / "90"-зенит).
- Азимут положения спутника относительно модуля, в градусах ("000" - "360").
- Уровень сигнала SNR (отношение сигнал/шум) в дБ ("00" - "99"),
- 8 - Дополнительный параметр, присутствует в версии 4.1 и выше, значение всегда равно '0'.
Примечание: В одном сообщении NMEA 0183 отправляется сразу несколько строк GSA, от одной до нескольких строк для каждой спутниковой навигационной системы используемой модулем.
Источник данных (два первых символа после '$') указывает на спутниковую навигационную систему "GP", "GL", "GA", "BD", или "GQ", к которой относятся данные о спутниках в строке. Для каждой навигационной системы в одном сообщении может быть указано несколько строк, их количество указано в первом параметре строки, а номер строки указан во втором параметре.
В сообщениях NMEA 0183 версии 4.1 добавлен один последний дополнительный параметр, значение которого всегда равно 0.
RMC:
Строка с идентификатором RMC содержит рекомендуемый минимум навигационных данных.
Пример строки RMC:
$GNRMC,102030.000,A,5546.95900,N,03740.69200,E,0.12,49.75,200220,,*FF/r/n - версия 2.2 $GNRMC,102030.000,A,5546.95900,N,03740.69200,E,0.12,49.75,200220,,,A*FF/r/n - версия 4.0 $GNRMC,102030.000,A,5546.95900,N,03740.69200,E,0.12,49.75,200220,,,A,V*FF/r/n - версия 4.1 ^ ^ ^ ^ ^ ^ ^ ^ ^ ^^ ^ ^ 1 2 3 4 5 6 7 8 9 01 2 3
Назначение параметров строки RMC:
- 1 - Время UTC в формате "ЧЧММСС.ССС". В примере "102030.000" = 10ч., 20м., 30.000 сек.
- 2 - Достоверность полученных координат. В примере 'A' - данные достоверны.
- 'A' - данные достоверны.
- 'V' - ошибочные данные.
- 3 - Широта в формате "ГГММ.МММММ". В примере "5546.95900" = 55°46.959' = 55.78265°.
- 4 - Направление широты: 'N'-север / 'S'-юг. В примере 'N'-север.
- 5 - Долгота в формате "ГГГММ.МММММ". В примере "03740.69200" = 37°40.692' = 37.6782°.
- 6 - Направление долготы: 'E'-восток / 'W'-запад. В примере 'E'-восток.
- 7 - Скорость в узлах. В примере "0.12" = 0.222 км/ч.
- 8 - Курс на истинный полюс в градусах. В примере "49.75" = 49.75°.
- 9 - Дата в формате "ДДММГГ". В примере "200220" = 20.02.20г.
- 10 - Магнитное склонение в градусах. Отсутствует в примере.
- 11 - Направление магнитного склонения: 'E'-вычесть / 'W'-прибавить. Отсутствует в примере.
- 12 - Способ вычисления координат (отсутствует в версии 2.2). В примере 'A' - автономный.
- 'A' - автономный.
- 'D' - дифференциальный.
- 'E' - аппроксимация.
- 'M' - фиксированные данные.
- 'N' - недостоверные данные.
- 13 - Статус навигации (отсутствует в версиях 2.2 и 4.0). В примере 'V'.
Примечание: В сообщениях NMEA 0183 версии 2.2 строка содержит только 11 параметров, а в версии 4.0 - 12 параметров.
VTG:
Строка с идентификатором VTG содержит скорость и курс относительно земли.
Пример строки VTG:
$GNVTG,49.75,T,,M,0.12,N,0.22,K*FF/r/n - версия 2.2 $GNVTG,49.75,T,,M,0.12,N,0.22,K,A*FF/r/n - версия 4.0 и 4.1 ^ ^^ ^ ^ ^ ^ ^ ^ 1 23 4 5 6 7 8 9
Назначение параметров строки VTG:
- 1 - Курс на истинный полюс в градусах. В примере "49.75" = 49.75°.
- 2 - Флаг достоверности курса: 'T'-True / 'F'-False. В примере 'T'-True.
- 3 - Магнитное склонение в градусах. Отсутствует в примере.
- 4 - 'M'-Магнитный.
- 5,6 - Скорость, единицы измерения скорости. В примере "0.12,N" = 0.12 узлов.
- 7,8 - Скорость, единицы измерения скорости. В примере "0.12,K" = 0.22 км/ч.
- 9 - Способ вычисления скорости и курса (отсутствует в верс. 2.2). В примере 'A' - автономный.
- 'A' - автономный.
- 'D' - дифференциальный.
- 'E' - аппроксимация.
- 'M' - фиксированные данные.
- 'N' - недостоверные данные.
Примечание: В сообщениях NMEA 0183 версии 2.2 строка содержит только 8 параметров.
ZDA:
Строка с идентификатором ZDA содержит дату и время.
Пример строки ZDA:
$GNZDA,102030.000,20,02,2020,00,00*FF/r/n ^ ^ ^ ^ ^ ^ 1 2 3 4 5 6
Назначение параметров строки ZDA:
- 1 - Время UTC в формате "ЧЧММСС.ССС". В примере "102030.000" = 10ч., 20м., 30.000 сек.
- 2 - День в формате "ДД". В примере "20" = 20 день месяца.
- 3 - Месяц в формате "ММ". В примере "02" = февраль.
- 4 - Год в формате "ГГГГ". В примере "2020" = 2020 год.
- 5 - Часовой пояс - часы в формате "ЧЧ". В примере "00" - без сдвига часов от UTC.
- 6 - Часовой пояс - минуты в формате "ММ". В примере "00" - без сдвига минут от UTC.
DHV:
Строка с идентификатором DHV содержит информацию о скорости движения приемника.
Пример строки DHV:
$GNDHV,102030.000,0.03,-0.179,0.105,0.071,0.04,,,,,M*FF/r/n ^ ^ ^ ^ ^ ^ ^^^^ ^ 1 2 3 4 5 6 7890 1
Назначение параметров строки DHV:
- 1 - Время UTC в формате "ЧЧММСС.ССС". В примере "102030.000" = 10ч., 20м., 30.000 сек.
- 2 - Скорость 3D в м/с. В примере "0.08".
- 3 - Скорость ECEF-X в м/с. В примере "-0.179".
- 4 - Скорость ECEF-Y в м/с. В примере "0.105".
- 5 - Скорость ECEF-Z в м/с. В примере "0.071".
- 6 - Скорость в м/с. В примере "0.04".
GST:
Строка с идентификатором GST содержит статистику ошибок позиционирования.
Пример строки GST:
$GNGST,102030.000,6.9,,,,5.6,9.2,10.1*FF/r/n ^ ^ ^^^ ^ ^ ^ 1 2 345 6 7 8
Назначение параметров строки GST:
- 1 - Время UTC в формате "ЧЧММСС.ССС". В примере "102030.000" = 10ч., 20м., 30.000 сек.
- 2 - Среднее квадратическое значение (RMS) стандартной девиации диапазонов в метрах.
- 3 - Ошибка элипса полуоси semi-major в метрах. Отсутствует в примере.
- 4 - Ошибка элипса полуоси semi-minor в метрах. Отсутствует в примере.
- 5 - Ошибка ориентации элипса полуоси semi-major в градусах. Отсутствует в примере.
- 6 - Ошибка широты в метрах. В примере "5.6" = ошибка широты до 5.6 м.
- 7 - Ошибка долготы в метрах. В примере "9.2" = ошибка долготы до 9.2 м.
- 8 - Ошибка высоты в метрах. В примере "10.1" = ошибка высоты до 10.1 м.
TXT:
Строка с идентификатором TXT содержит текстовое сообщение.
Пример строки TXT:
$GPTXT,01,01,01,ANTENNA OK*FF/r/n ^ ^ ^ ^ 1 2 3 4
Назначение параметров строки TXT:
- 1 - Количество строк с текстом данного текстового сообщения. В примере "01" = 1 строка.
- 2 - Номер строки с текстом данного текстового сообщения. В примере "01" = 1 строка.
- 3 - Идентификатор типа сообщения. В примере "01" - Предупреждение.
- "00" - ошибка.
- "01" - предупреждение.
- "02" - уведомление.
- "07" - пользовательское.
- 4 - Текстовое сообщение. В примере "ANTENNA OK".
Примечание: Текстовое сообщение может содержать пробелы и запятые.
Ссылки:
- Trema GPS-модуль ATGM336H.
- Wiki - Работа с GPS модулем.
- Wiki - Парсер протокола NMEA.
- Библиотека iarduino_GPS_ATGM336 для настройки GPS-модуля.
- Библиотека iatduino_GPS_NMEA для чтения сообщений NMEA 0183.
- Wiki - Установка библиотек в Arduino IDE.
Обсуждение