====== Приёмник GPS/GLONASS/BDS v3 с внешней антенной (Troyka-модуль): инструкция по подключению и примеры использования ====== {{ :products:troyka-gps-glonass-extended-receiver-v2:troyka-gps-glonass-extended-receiver-v2.1.jpg?nolink |}} [[amp>product/troyka-gps-glonass-extended-receiver?utm_source=man&utm_campaign=gps&utm_medium=wiki|Модуль GPS/GLONASS v3 с внешней антенной]] принимает сигналы спутников глобального позиционирования — GPS, GLONASS, BeiDou и Galileo — и рассчитывает свои географические координаты, скорость перемещения, высоту над уровнем моря и точное локальное время. Данные передаются на управляющую электронику в текстовом формате NMEA по интерфейсу UART. ===== Принцип работы систем спутниковой навигации ===== Спутники непрерывно передают навигационные сигналы на дециметровых волнах. В сигнал входят метки точного времени и координаты самого спутника. Навигатор по задержке прохождения сигнала со спутника рассчитывает точное расстояние до него. Затем повторяет эту операцию для остальных известных спутников. Эти данные сводятся вместе — так получается точное значение координат приёмника.{{ :продукты:troyka-gps-glonass:troyka-gps-glonass_search.gif |}} Для работы навигаторов нужно открытое небо с минимум четырьмя спутниками в прямой видимости. Чтобы система работала по всей планете, в каждой орбитальной группировке приходится держать более двух десятков спутников.{{ :продукты:troyka-gps-glonass:troyka-gps-glonass-satellites.jpg |}} GPS-модуль общается с управляющей платой с помощью NMEA-сообщений (от «National Marine Electronics Association») — это стандарт передачи данных оборудования навигации, связи и других информационных сетей. [[articles:gps:nmea|Подробное описание про NMEA-сообщения]]. ===== Подключение и настройка ===== GPS/GLONASS-модуль общается с управляющей платой по протоколу [[видеоуроки:6-serial-и-processing|UART]]. В зависимости от управляющей платформы выберите вариант подключения GPS-модуля. ==== HardwareSerial ==== На управляющей плате [[amp>product/iskra-js?utm_source=man&utm_campaign=troyka-gps-glonass&utm_medium=wiki | Iskra JS]] и Arduino платах с микроконтроллером ''ATmega32U4 / ATSAMD21G18'', данные по USB и общение через пины ''0'' и ''1'' осуществляется через два раздельных ''UART''. Это даёт возможность подключить GPS-модуль к аппаратному ''UART'' на пинах ''0'' и ''1''. Список поддерживаемых плат: * [[amp>product/iskra-js?utm_source=man&utm_campaign=troyka-gps-glonass&utm_medium=wiki | Iskra JS]] * [[amp>product/iskra-neo?utm_source=man&utm_campaign=troyka-gps-glonass&utm_medium=wiki | Iskra Neo]] * [[amp>product/arduino-leonardo?utm_source=man&utm_campaign=troyka-gps-glonass&utm_medium=wiki | Arduino Leonardo]] * [[amp>product/arduino-leonardo-eth?utm_source=man&utm_campaign=troyka-gps-glonass&utm_medium=wiki | Arduino Leonardo ETH]] * [[amp>product/arduino-leonardo-eth-poe?utm_source=man&utm_campaign=troyka-gps-glonass&utm_medium=wiki | Arduino Leonardo ETH PoE]] * [[amp>product/arduino-yun?utm_source=man&utm_campaign=troyka-gps-glonass&utm_medium=wiki | Arduino Yún]] * [[amp>product/arduino-tian?utm_source=man&utm_campaign=troyka-gps-glonass&utm_medium=wiki | Arduino Tian]] При подключении удобно использовать [[amp>product/arduino-troyka-shield?utm_source=man&utm_campaign=troyka-gps-glonass&utm_medium=wiki|Troyka Shield]]. {{ :продукты:troyka-gps-glonass:troyka-gps-glonass_scheme_troykashield.png?nolink |}} С [[amp>product/arduino-troyka-slot-shield?utm_source=man&utm_campaign=troyka-gps-glonass&utm_medium=wiki|Troyka Slot Shield]] можно обойтись без лишних проводов. {{ :продукты:troyka-gps-glonass:troyka-gps-connect-example-slot-hardware-serial.png?nolink |}} ==== SoftwareSerial ==== Некоторые платы Arduino, например, [[amp>product/arduino-uno?utm_source=man&utm_campaign=troyka-gps-glonass&utm_medium=wiki|Uno]], прошиваются через пины ''0'' и ''1''. Это означает невозможность использовать одновременно прошивку/отладку по USB и общение с GPS-модулем. Решение проблемы — программный ''UART''. Подключите пины ''TX'' и ''RX'' GPS-модуля к другим контактам управляющей платы и используйте библиотеку [[https://www.arduino.cc/en/Reference/SoftwareSerial|SoftwareSerial]]. Для примера подключим управляющие пины GPS-модуля ''TX'' и ''RX'' — на ''4'' и ''5'' контакты управляющей платы. При подключении удобно использовать [[amp>product/arduino-troyka-shield?utm_source=man&utm_campaign=troyka-gps-glonass&utm_medium=wiki|Troyka Shield]]. {{ :продукты:troyka-gps-glonass:troyka-gps-glonass_scheme_troykashield_soft.png |}} С [[amp>product/arduino-troyka-slot-shield?utm_source=man&utm_campaign=troyka-gps-glonass&utm_medium=wiki|Troyka Slot Shield]] можно обойтись без лишних проводов. {{ :продукты:troyka-gps-glonass:troyka-gps-connect-example-slot-software-serial.png?nolink |}} ==== HardwareSerial Mega==== На платах форм-фактора [[amp>product/arduino-mega-2560?utm_source=man&utm_campaign=troyka-gps-glonass&utm_medium=wiki | Arduino Mega 2560]] аппаратный UART, который отвечает за передачу данных через пины ''1'' и ''0'', отвечает также за передачу по USB. Это означает невозможность использовать одновременно ''UART'' для коммуникации с GPS-модулем и отладки по USB. Но на платах такого форм-фактора есть ещё дополнительно 3 аппаратных UART: * **Serial1:** пины ''19(RX1)'' и ''18(TX1)''; * **Serial2:** пины ''17(RX2)'' и ''16(TX2)''; * **Serial3:** пины ''15(RX3)'' и ''14(TX3)''. Список поддерживаемых плат: * [[amp>product/arduino-mega-2560?utm_source=man&utm_campaign=troyka-gps-glonass&utm_medium=wiki | Arduino Mega 2560]] * [[amp>product/arduino-adk?utm_source=man&utm_campaign=troyka-gps-glonass&utm_medium=wiki | Arduino ADK]] * [[amp>product/arduino-due?utm_source=man&utm_campaign=troyka-gps-glonass&utm_medium=wiki | Arduino Due]] Подключим GPS-модуль к объекту ''Serial1'' на пины ''18'' и ''19'' на примере платы [[amp>product/arduino-mega-2560?utm_source=man&utm_campaign=troyka-gps-glonass&utm_medium=wiki | Arduino Mega 2560]]{{ :продукты:troyka-gps-glonass:troyka-gps-glonass_scheme_mega.png |}} ===== Примеры работы ===== Рассмотрим примеры работы GPS-модуля в зависимости от управляющей платформы. ==== Пример для Arduino HardwareSerial ==== В качестве примера выведем в Serial данные с GPS-модуля. Распарсим строки в отдельные переменные и сохраним их. Для этого скачайте и установите библиотеку [[https://github.com/amperka/TroykaGPS| TroykaGPS]] // библиотека для работы с GPS устройством #include // serial-порт к которому подключён GPS-модуль #define GPS_SERIAL Serial1 // создаём объект класса GPS и передаём в него объект Serial1 GPS gps(GPS_SERIAL); // задаём размер массива для времени, даты, широты и долготы #define MAX_SIZE_MASS 16 // массив для хранения текущего времени char strTime[MAX_SIZE_MASS]; // массив для хранения текущей даты char strDate[MAX_SIZE_MASS]; // массив для хранения широты в градусах, минутах и секундах char latitudeBase60[MAX_SIZE_MASS]; // массив для хранения долготы в градусах, минутах и секундах char longitudeBase60[MAX_SIZE_MASS]; void setup() { // открываем последовательный порт для мониторинга действий в программе // и передаём скорость 9600 бод Serial.begin(9600); // ждём, пока не откроется монитор последовательного порта // для того, чтобы отследить все события в программе while (!Serial) { } Serial.print("Serial init OK\r\n"); // открываем Serial-соединение с GPS-модулем на скорости 115200 бод GPS_SERIAL.begin(115200); // печатаем строку Serial.println("GPS init is OK on speed 115200"); // изменяем скорость обещение GPS-модуля с управляющей платой на 9600 бод // используем NMEA-команду «$PMTK251,9600*17\r\n» GPS_SERIAL.write("$PMTK251,9600*17\r\n"); // закрываем Serial-соединение с GPS-модулем GPS_SERIAL.end(); // открываем Serial-соединение с GPS-модулем на скорости 9600 бод GPS_SERIAL.begin(9600); // печатаем строку Serial.print("GPS init is OK on speed 9600"); } void loop() { // если пришли данные с GPS-модуля if (gps.available()) { // считываем данные и парсим gps.readParsing(); // проверяем состояние GPS-модуля switch (gps.getState()) { // всё OK case GPS_OK: Serial.println("GPS is OK"); // выводим координаты широты и долготы // 1. в градусах, минутах и секундах // 2. градусах в виде десятичной дроби Serial.println("GPS Coordinates: "); gps.getLatitudeBase60(latitudeBase60, MAX_SIZE_MASS); gps.getLongitudeBase60(longitudeBase60, MAX_SIZE_MASS); Serial.print("Latitude\t"); Serial.print(latitudeBase60); Serial.print("\t\t"); Serial.println(gps.getLatitudeBase10(), 6); Serial.print("Longitude\t"); Serial.print(longitudeBase60); Serial.print("\t\t"); Serial.println(gps.getLongitudeBase10(), 6); // выводим количество видимых спутников Serial.print("Sat: "); Serial.println(gps.getSat()); // выводим текущую скорость Serial.print("Speed: "); Serial.println(gps.getSpeedKm()); // выводим высоту над уровнем моря Serial.print("Altitude: "); Serial.println(gps.getAltitude()); // выводим текущее время Serial.print("Time: "); gps.getTime(strTime, MAX_SIZE_MASS); gps.getDate(strDate, MAX_SIZE_MASS); Serial.write(strTime); Serial.println(); // выводим текущую дату Serial.print("Date: "); Serial.write(strDate); Serial.println("\r\n"); // каждую переменную дату и времени можно выводить отдельно /* Serial.print(gps.getHour()); Serial.print(gps.getMinute()); Serial.print(gps.getSecond()); Serial.print(gps.getDay()); Serial.print(gps.getMonth()); Serial.print(gps.getYear()); */ break; // ошибка данных case GPS_ERROR_DATA: Serial.println("GPS error data"); break; // нет соединения со спутниками case GPS_ERROR_SAT: Serial.println("GPS is not connected to satellites!!!"); break; } } } ==== Пример для Arduino SoftwareSerial ==== В отличии от аппаратного ''UART'' (HardwareSerial), за работу программного ''UART'' (SoftwareSerial) отвечает микроконтроллер, который назначает другие пины в режим работы ''RX'' и ''TX'', соответственно и данные которые приходят от модуля GPS обрабатывает сам микроконтроллер во время программы. По умолчанию скорость общения GPS-модуля равна ''115200'', что значительно выше чем позволяет библиотека [[https://www.arduino.cc/en/Reference/SoftwareSerial|SoftwareSerial]]. В итоге часть информации которая приходит с GPS-модуля будет утеряна. Решение понизить скорость общения GPS-модуля с управляющей платой. Из [[http://naviaglonass.ru/wp-content/uploads/Opisanie-komand-NL3333_KL3333-i-SL3333E-v1_0.pdf|описание команд управления]] GPS-модулем найдём NMEA-команду понижение скорости до ''9600''бод.$PMTK251,9600*17Данную команду придётся выполнять при каждом новом включении GPS-модуля. В качестве примера выведем в Serial данные с GPS-модуля. Распарсим строки в отдельные переменные и сохраним их. Для этого скачайте и установите библиотеку [[https://github.com/amperka/TroykaGPS| TroykaGPS]] // библиотека для работы с GPS устройством #include // библиотека для работы программного Serial #include // создаём объект для работы с программным Serial // и передаём ему пины TX и RX SoftwareSerial mySerial(4, 5); // serial-порт к которому подключён GPS-модуль #define GPS_SERIAL mySerial // создаём объект класса GPS и передаём в него объект GPS_SERIAL GPS gps(GPS_SERIAL); // задаём размер массива для времени, даты, широты и долготы #define MAX_SIZE_MASS 16 // массив для хранения текущего времени char strTime[MAX_SIZE_MASS]; // массив для хранения текущей даты char strDate[MAX_SIZE_MASS]; // массив для хранения широты в градусах, минутах и секундах char latitudeBase60[MAX_SIZE_MASS]; // массив для хранения долготы в градусах, минутах и секундах char longitudeBase60[MAX_SIZE_MASS]; void setup() { // открываем последовательный порт для мониторинга действий в программе // и передаём скорость 9600 бод Serial.begin(9600); // ждём, пока не откроется монитор последовательного порта // для того, чтобы отследить все события в программе while (!Serial) { } Serial.print("Serial init OK\r\n"); // открываем Serial-соединение с GPS-модулем на скорости 115200 бод GPS_SERIAL.begin(115200); // печатаем строку Serial.println("GPS init is OK on speed 115200"); // изменяем скорость обещение GPS-модуля с управляющей платой на 9600 бод // используем NMEA-команду «$PMTK251,9600*17\r\n» GPS_SERIAL.write("$PMTK251,9600*17\r\n"); // закрываем Serial-соединение с GPS-модулем GPS_SERIAL.end(); // открываем Serial-соединение с GPS-модулем на скорости 9600 бод GPS_SERIAL.begin(9600); // печатаем строку Serial.print("GPS init is OK on speed 9600"); } void loop() { // если пришли данные с gps-модуля if (gps.available()) { // считываем данные и парсим gps.readParsing(); // проверяем состояние GPS-модуля switch(gps.getState()) { // всё OK case GPS_OK: Serial.println("GPS is OK"); // выводим координаты широты и долготы // 1. в градусах, минутах и секундах // 2. градусах в виде десятичной дроби Serial.println("GPS Coordinates: "); gps.getLatitudeBase60(latitudeBase60, MAX_SIZE_MASS); gps.getLongitudeBase60(longitudeBase60, MAX_SIZE_MASS); Serial.print("Latitude\t"); Serial.print(latitudeBase60); Serial.print("\t\t"); Serial.println(gps.getLatitudeBase10(), 6); Serial.print("Longitude\t"); Serial.print(longitudeBase60); Serial.print("\t\t"); Serial.println(gps.getLongitudeBase10(), 6); // выводим количество видимых спутников Serial.print("Sat: "); Serial.println(gps.getSat()); // выводим текущую скорость Serial.print("Speed: "); Serial.println(gps.getSpeedKm()); // выводим высоту над уровнем моря Serial.print("Altitude: "); Serial.println(gps.getAltitude()); // выводим текущее время Serial.print("Time: "); gps.getTime(strTime, MAX_SIZE_MASS); gps.getDate(strDate, MAX_SIZE_MASS); Serial.write(strTime); Serial.println(); // выводим текущую дату Serial.print("Date: "); Serial.write(strDate); Serial.println("\r\n"); // каждую переменную дату и времени можно выводить отдельно /* Serial.print(gps.getHour()); Serial.print(gps.getMinute()); Serial.print(gps.getSecond()); Serial.print(gps.getDay()); Serial.print(gps.getMonth()); Serial.print(gps.getYear()); */ break; // ошибка данных case GPS_ERROR_DATA: Serial.println("GPS error data"); break; // нет соединение со спутниками case GPS_ERROR_SAT: Serial.println("GPS no connect to satellites!!!"); break; } } } ==== Пример кода для Iskra JS ==== Выведем данные о координатах, высоте над уровнем моря, количестве видимых спутников и точном времени в консоль Web IDE. Serial3.setup(115200, {rx: P0, tx: P1}); var gps = require("GPS").connect(Serial3, function(data) { console.log(data); }); Каждую секунду в консоль будет выводится информация от модуля. { "time":"16:35:29", "lat":53.068403,"lon":-4.076282,"fix":1,"satellites":7,"altitude":1085.0 } ===== Формат сообщений NMEA ===== GPS-модуль общается с управляющей платой с помощью NMEA-сообщений (от «National Marine Electronics Association») — это стандарт передачи данных оборудования навигации, связи и других информационных сетей. {{ :продукты:troyka-gps-glonass:troyka-gps-glonass-satellites2.png |}} NMEA — это так же простой и понятный формат, который позволяет не только обеспечить обмен данными между GPS приемниками и навигационными программами, но и дает пользователям некоторое представление о принципах работы спутниковой навигационной аппаратуры. ==== Исходящие сообщения NMEA ==== Данные с GPS-модуля передаются на управляющую электронику в текстовом формате NMEA, состоят из последовательного набора данных, разделенных запятыми. Каждое NMEA сообщение начинается с ''$'', заканчивается ''\n'' (перевод строки) и не может быть длиннее 80 символов. === Список сообщений === * AAM – Прибытие в путевую точку * ALM – Данные альманаха * АPA – Данные автопилота «А» * APB – Данные автопилота «В» * BOD – Азимут на пункт назначения * DTM – Используемый датум * GGA – Информация о фиксированном решении * GLL – Данные широты и долготы * GSA – Общая информация о спутниках * GSV – Детальная информация о спутниках * MSK – Передача управлению базовому приемнику * MSS – Статус базового приемника * RMA – Рекомендованный набор данных системы «Loran» * RMB – Рекомендованный набор навигационных GPS данных * RMC – Рекомендованный минимальный набор GPS данных * RTE – Маршрутная информация VTG – Вектор движения и скорости * WCV – Данные скорости вблизи путевой точки * WPL – Данные путевой точки * XTC – Ошибка отклонения от трека * XTE – Измеренная ошибка отклонения от трека * ZTG – UTC время и оставшееся время до прибытия в точку назначения * ZDA – Дата и время. Некоторые из NMEA сообщений могут содержать одинаковые поля данных, либо полностью содержать данные других, меньших по размеру, NMEA сообщений. === Содержание NMEA сообщений === == GGA - информация о фиксированном решении == Самое популярное и наиболее используемое NMEA сообщение с информацией о текущем фиксированном решении – горизонтальные координаты, значение высоты, количество используемых спутников и тип решения. $GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47 * GGA – NMEA Заговолок * 123519 –UTC время 12:35:19 * 4807.038, N – Широта, 48 градусов 7.038 минуты северной широты * 01131.000, Е – Долгота, 11 градусов 31.000 минуты восточной долготы * 1 – тип решение, StandAlone решение * 0 – нет решения, * 1 – StandAlone, * 2 – DGPS, * 3 – PPS, * 4 – фиксированный RTK, * 5 – не фиксированный RTK, * 6 – использование данных инерциальных систем, * 7 – ручной режим, * 8 – режим симуляции * 08 – количество используемых спутников * 0.9 – геометрический фактор, HDOP * 545.4, М – высота над уровнем моря в метрах * 46.9, М – высота геоида над эллипсоидом WGS 84 * [пустое поле] – время прошедшее с момента получения последней DGPS поправки. Заполняется при активизации DGPS режима * [пустое поле] – идентификационный номер базовой станции. Заполняется при активизации DGPS режима. == RMC — рекомендованный минимальный набор GPS данных == Это NMEA сообщение содержит весь наборы, так называемых «PVT» данных. «PVT» — общепринятое сокращение от «position, velocity, time» (позиция, скорость, время). $GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A * RMC – NMEA заголовок * 123419 – UTC время, 12:34:59 * А – статус (А- активный, V- игнорировать) * 4807.038,N – Широта, 48 градусов 07.038 минут северной широты * 01131.000,Е – Долгота, 11 градусов 31.000 минута восточной долготы * 022.4 – Скорость, в узлах * 084.4 – Направление движения, в градусах * 230394 – Дата, 23 марта 1994 года * 003.1,W – Магнитные вариации ==== Входящие сообщения NMEA ==== По умолчанию в GPS-модуле установлены дефолтные настройки. Например частота отдачи данных на принимающее устройство или скорость общение с управляющей платой. При желании можно модуль настроить под себя. Управление работой GPS-модуля осуществляется при помощи [[http://naviaglonass.ru/wp-content/uploads/Opisanie-komand-NL3333_KL3333-i-SL3333E-v1_0.pdf|специальных NMEA – подобных команд.]] GPS-модуль не сохраняет настройки в своей памяти. После сброса питания, модуль вернётся в своё первоначальное состояние. Пример команды установки скорости общения ''9600 бод''. $PMTK251,9600*17\r\n Каждое входное NMEA-сообщение должно начинаться с символа ''$'' и заканчивается символами ''\r\n'': * ''$'' — служебный символ; * ''PMTK'' — идентификатор; * ''251'' — тип команды (в данном случае команда смена скорости); * ''9600'' — данные (в данном случае установка 9600); * ''*'' — символ окончания данных; * ''17'' — контрольная сумма; * ''\r'' — возврат каретки ''''; * ''\n'' — начало строки ''''. Контрольная сумма — восьмибитная (исключающая ИЛИ) всех символов сообщения, включая пробелы, расположенных между разделителями ''$'' и ''*''. Для нахождения контрольной суммы используйте [[http://nmeachecksum.eqth.net/|NMEA Checksum Calculator]]. ==== Пример работы для HardwareSerial ==== По умолчания GPS-модуль отдаёт данные раз в секунду. В качестве примера выведем сырые данные в формате NMEA-сообщений и и увеличим отдачу данных до 10 раз в секунду. - Прошейте плату Arduino скетчем проброса данных с ''USB'' на аппаратный ''UART''. // serial-порт к которому подключён GPS-модуль #define GPS_SERIAL Serial1 void setup() { // открываем последовательный порт для мониторинга действий в программе // и передаём скорость 115200 бод Serial.begin(115200); while (!Serial) { } Serial.print("\r\nSerial init OK\r\n"); // открываем Serial-соединение с GPS-модулем // и передаём скорсть 115200 бод GPS_SERIAL.begin(115200); } void loop() { // если приходят данные из GPS-модуля - отправим их в порт компьютера if (GPS_SERIAL.available()) { Serial.write(GPS_SERIAL.read()); } // если приходят данные из компьютера - отправим их в GPS-модуль if (Serial.available()) { GPS_SERIAL.write(Serial.read()); } } - Откройте монитор Serial-порта, нажав на иконку лупы.{{ :продукты:troyka-gps-glonass:troyka-gps-glonass_hard1x.png |}} - Установите скорость обмена данными на ''115200'' бод и установите дополнительные параметры ''NL''— новой строки и ''CR'' — возврат каретки. В итоге каждую секунду вы будете получать данные в формате ''NMEA-сообщений''.{{ :продукты:troyka-gps-glonass:troyka-gps-glonass_hard2x.png |}} - Из [[http://naviaglonass.ru/wp-content/uploads/Opisanie-komand-NL3333_KL3333-i-SL3333E-v1_0.pdf|документации на NMEA-команды]] находим команду:$PMTK220,variable* - ''variable'' — значение от 100 до 10000 в миллисекундах, нашем случае это 100. - ''CS'' — контрольная сумма; - ''CR'' — возврат каретки ''\r''; - ''LF'' — новая строка ''\n''. - Перейдите на сайт [[http://nmeachecksum.eqth.net/|NMEA Checksum Calculator]].{{ :продукты:troyka-gps-glonass:troyka-gps-glonass_hard3.png |}} - Введите команду ''PMTK220,100'' в поле ввода ''Command'' и нажмите кнопку ''Enter''. В окне ''With checksum'' вы получите команду вместе с контрольной суммой.{{ :продукты:troyka-gps-glonass:troyka-gps-glonass_hard4x.png |}} - В окне ввода информации введите вместе с контрольной суммой NMEA-команду смены скорости отдачи данных до десяти раз в секунду и нажмите кнопку ''Отправить''$PMTK220,100*2F{{ :продукты:troyka-gps-glonass:troyka-gps-glonass_hard5x.png |}} Если всё прошло правильно, теперь данные с GPS-модуля будут приходить до десяти раз в секунду. ==== Пример работы для SoftwareSerial ==== В качестве примера выведем сырые данные в формате NMEA-сообщений с GPS-модуля. - Прошейте плату Arduino скетчем проброса данных с ''USB'' на программный ''UART''. // библиотека для работы программного Serial #include // создаём объект для работы с программным Serial // и передаём ему пины TX и RX SoftwareSerial mySerial(4, 5); // serial-порт к которому подключён GPS-модуль #define GPS_SERIAL mySerial void setup() { // открываем последовательный порт для мониторинга действий в программе // и передаём скорость 9600 бод Serial.begin(9600); // ждём, пока не откроется монитор последовательного порта // для того, чтобы отследить все события в программе while (!Serial) { } Serial.print("Serial init OK\r\n"); // открываем Serial-соединение с GPS-модулем на скорости 115200 бод GPS_SERIAL.begin(115200); // печатаем строку Serial.println("GPS init is OK on speed 115200"); // изменяем скорость обещение GPS-модуля с управляющей платой на 9600 бод // используем NMEA-команду «$PMTK251,9600*17\r\n» GPS_SERIAL.write("$PMTK251,9600*17\r\n"); // закрываем Serial-соединение с GPS-модулем GPS_SERIAL.end(); // открываем Serial-соединение с GPS-модулем на скорости 9600 бод GPS_SERIAL.begin(9600); // печатаем строку Serial.print("GPS init is OK on speed 9600"); } void loop() { // если приходят данные из GPS-модуля - отправим их в порт компьютера if (GPS_SERIAL.available()) { Serial.write(GPS_SERIAL.read()); } // если приходят данные из компьютера - отправим их в GPS-модульl if (Serial.available()) { GPS_SERIAL.write(Serial.read()); } } - Откройте монитор Serial-порта, нажав на иконку лупы.{{ :продукты:troyka-gps-glonass:troyka-gps-glonass_soft1x.png |}} - Установите скорость обмена данными на ''9600'' бод и установите дополнительные параметры ''NL''— новой строки и ''CR'' — возврат каретки. В итоге вы должны увидеть данные в полном формате ''NMEA-сообщений''.{{ :продукты:troyka-gps-glonass:troyka-gps-glonass_soft2x.png |}} - Из [[http://naviaglonass.ru/wp-content/uploads/Opisanie-komand-NL3333_KL3333-i-SL3333E-v1_0.pdf|документации на NMEA-команды]] находим команду:$PMTK220,variable* - ''variable'' — значение от 100 до 10000 в миллисекундах, нашем случае это 100. - ''CS'' — контрольная сумма; - ''CR'' — возврат каретки ''\r''; - ''LF'' — новая строка ''\n''. - Перейдите на сайт [[http://nmeachecksum.eqth.net/|NMEA Checksum Calculator]].{{ :продукты:troyka-gps-glonass:troyka-gps-glonass_soft3.png |}} - Введите команду ''PMTK220,100'' в поле ввода ''Command'' и нажмите кнопку ''Enter''. В окне ''With checksum'' вы получите команду вместе с контрольной суммой.{{ :продукты:troyka-gps-glonass:troyka-gps-glonass_soft4x.png |}} - В окне ввода информации введите вместе с контрольной суммой NMEA-команду смены скорости отдачи данных до десяти раз в секунду и нажмите кнопку ''Отправить''$PMTK220,100*2F{{ :продукты:troyka-gps-glonass:troyka-gps-glonass_soft5x.png |}} Если всё прошло правильно, теперь данные с GPS-модуля будут приходить до десяти раз в секунду. ===== Элементы платы ===== {{ :продукты:troyka-gps-glonass:troyka-gps-glonass_annotation.png |}} ==== Модуль Neoway G7A-B1 ==== Чипсет Neoway использует весь спектр спутниковых систем: GPS, GLONASS, BeiDou и Galileo. Neoway G7A-B1 отличается высокой чувствительностью, малым энергопотреблением и быстрым временем первой фиксации (TTFF). Связь с модулем осуществляется через UART, данные выводятся по протоколу NMEA. ==== Контакты подключения трёхпроводных шлейфов ==== На модуле выведены две группы Troyka-контактов. === Нижняя группа === * Сигнальный (TX) — цифровой выход GPS-модуля. Подключите к пину RX микроконтроллера. * Питание (V) — соедините с рабочим напряжением микроконтроллера. * Земля (G) — соедините с землёй микроконтроллера. === Верхняя группа === * Сигнальный (RX) — цифровой вход GPS-модуля. Подключите к пину TX микроконтроллера. * Сигнальный (P) — пин синхронизации GPS-модуля. Подключите к цифровому пину микроконтроллера. ==== Антенна ==== Внешняя активная антенна с трёхметровым кабелем необходима для приёма сигнала от навигационных спутников. ==== Преобразователь логических уровней ===== Необходим для сопряжения устройств с разными напряжениями логических уровней. В нашем случае это может быть управляющее устройство Arduino с 5 вольтовой логикой и GPS/GLONASS модуль с 3,3 вольтовой логикой. ==== Светодиодная индикация ==== ^ Имя светодиода ^ Назначение ^ | RX и TX |Мигают при обмене данными между GPS/GLONASS модулем и управляющим устройством.| | P |Пин синхронизации GPS-модуля. Подключите к цифровому пину микроконтроллера.| ===== Обновление прошивки ===== Периодически выходят новые версии прошивки для GPS-приёмников с улучшениями и новыми функциями. [[articles:gps:firmware-update|Подробное описание обновление прошивки GPS-модулей]]. ===== Принципиальная и монтажная схемы ===== {{:продукты:troyka-gps-glonass:troyka-gps-glonass_schematic.png?direct&490 |}} {{:продукты:troyka-gps-glonass:troyka-gps-glonass_layout_top.png?direct&150 |}} {{:продукты:troyka-gps-glonass:troyka-gps-glonass_layout_bottom.png?direct&150 |}} ===== Характеристики ===== * Чипсет: Neoway G7A-B1 * Навигационные системы: GPS, GLONASS, BeiDou * Рабочие частоты: * GPS L1: 1575,42 МГц * GLONASS L1: 1602,5625 МГц * BDS L1: 1561,098 МГц * Протоколы передачи данных: NMEA * Скорость передачи данных по умолчанию: 9600 бод * Размеры антенны: 40×40 мм * Длина кабеля: 3 м * Поляризация: RHCP (правая круговая поляризация) * Погрешность позиционирования: менее 3 м * Горячий старт: 1 с * Холодный старт: 32 с * Рабочее напряжение: 3,3–5 В * Потребляемый ток: до 30 мА * Габариты: 25,4×25,4 мм ===== Ресурсы ===== * [[amp>product/troyka-gps-glonass-extended-receiver?utm_source=man&utm_campaign=gps&utm_medium=wiki|Приёмник GPS/GLONASS v3 с внешней антенной (Troyka-модуль)]] в магазине * [[https://github.com/amperka/hardware-drawings/blob/master/troyka-gps-glonass.svg|Векторное изображение GPS/GLONASS]] * [[https://github.com/amperka/TroykaGPS|Библиотека для Arduino]] * [[https://www.espruino.com/GPS|Описание библиотеки для Iskra JS]] * [[articles:gps:nmea|Подробное описание про NMEA-сообщения]]. * [[articles:gps:firmware-update|Обновление прошивки GPS-модуля]]. * {{ :products:troyka-gps-glonass-v2:g7a_commands_manual_v1_0.pdf |G7A_Commands_Manual_V1_0}}. * {{ :products:troyka-gps-glonass-v2:nmea0183.pdf |Протокол NMEA 0183}}.