====== GPS/GLONASS-приёмник v2 с выносной антенной (Troyka-модуль): инструкция по подключению и примеры использования ======
{{ :products:troyka-gps-glonass-extended-receiver-v2:troyka-gps-glonass-extended-receiver-v2.1.jpg?nolink |}}
[[amp>product/troyka-gps-glonass-extended-receiver-v2?utm_source=man&utm_campaign=gps&utm_medium=wiki|Модуль GPS/GLONASS v2 с внешней антенной]] принимает сигналы спутников глобального позиционирования — GPS, GLONASS и Galileo — и рассчитывает свои географические координаты, скорость перемещения, высоту над уровнем моря и точное локальное время.
Данные передаются на управляющую электронику в текстовом формате NMEA по интерфейсу UART.
===== Видеообзор ======
{{youtube>pL71dUsRyS4?large}}
===== Принцип работы систем спутниковой навигации =====
Спутники непрерывно передают навигационные сигналы на дециметровых волнах. В сигнал входят метки точного времени и координаты самого спутника.
Навигатор, по задержке прохождения сигнала со спутника рассчитывает точное расстояние до него. Затем повторяет эту операцию для остальных известных спутников. Эти данные сводятся вместе — так получается точное значение координат приёмника.{{ :продукты:troyka-gps-glonass:troyka-gps-glonass_search.gif |}}
Для работы навигаторов нужно открытое небо с минимум четырьмя спутниками в прямой видимости. Чтобы
система работала по всей планете в каждой орбитальной группировке приходится держать более двух десятков
спутников.{{ :продукты:troyka-gps-glonass:troyka-gps-glonass-satellites.jpg |}}
===== Подключение и настройка =====
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 |}}
==== Модуль NL3333 ====
NL3333 – навигационный приемник [[http://naviaglonass.ru/|НАВИА]], выполненный в оригинальном форм-факторе 8.7×9.5 мм на базе чипсета [[http://mediatek-club.ru/mediatek-mt3333|MediaTek MT3333]].
Приемник использует весь спектр GNSS систем: GPS, GLONASS и Galileo. NL3333 отличается высокой чувствительностью, малым энергопотреблением и быстрым временем первой фиксации (TTFF). Связь с модулем осуществляется через UART, данные выводятся по протоколу NMEA.
==== Контакты подключения трёхпроводных шлейфов ====
//1 группа//
* Земля (G) — соедините с землёй микроконтроллера
* Питание (V) — соедините с питанием микроконтроллера
* Сигнальный (TX) — подключите к пину ''RX'' микроконтроллера
//2 группа//
* Сигнальный (P) — подключите к сигнальному пину микроконтроллера
* Сигнальный (RX) — подключите к пину ''TX'' микроконтроллера
==== GPS/GLONASS антенна ====
Пассивная антенна на керамической подложке необходима для приёма сигнала навигационным приемником GPS/GLONASS.
==== Преобразователь логических уровней =====
Необходим для сопряжения устройств с разными напряжениями логических уровней.
В нашем случае это может быть управляющее устройство Arduino с 5 вольтовой логикой и GPS/GLONASS модуль с 3,3 вольтовой логикой.
==== Светодиодная индикация ====
^ Имя светодиода ^ Назначение ^
| RX и TX |Мигают при обмене данными между GPS/GLONASS модулем и управляющим устройством.|
| P |Индикатор приёма спутниковых сигналов. Мигает если GPS-модуль «нашёл себя»|
===== Обновление прошивки GPS-модуля =====
По умолчанию в GPS-модуле ''NL3333'' установлена стабильная прошивка. Периодически выходят новые версии прошивки — с улучшениями и новыми функциями. Для обновления прошивки вам понадобится одна из плат:
* [[amp>product/usb-serial-converter?utm_source=man&utm_campaign=gps&utm_medium=wiki|USB-Serial адаптер]]
* [[amp>product/arduino-uno?utm_source=man&utm_campaign=gps&utm_medium=wiki|Arduino Uno]]
* [[amp>product/arduino-mega-2560?utm_source=man&utm_campaign=gps&utm_medium=wiki|Arduino Mega 2560]]
- В зависимости от выбранной платы, соберите следующую схему:
- USB-Serial адаптер {{ :продукты:troyka-gps-glonass:troyka-gps-glonass_usb-to-serial.png |}}
- Arduino Uno {{ :продукты:troyka-gps-glonass:troyka-gps-glonass_uno.png |}}
- Arduino Mega 2560 {{ :продукты:troyka-gps-glonass:troyka-gps-glonass_mega.png |}}
- Скачайте и распакуйте необходимый софт и файлы прошивки модуля:
- {{:продукты:troyka-gps-glonass:mt3339_flashtool_v122_for_customer.zip|Flash Tool}} — программа для обновления прошивки;
- {{:продукты:troyka-gps-glonass:mtk_allinone_da_nl3333.zip|прошивка загрузчика}} для чипсета NL3333;
- {{:продукты:troyka-gps-glonass:nl3333_5.zip|файл прошивки}} для чипсета NL3333
- Запустите программу Flash Tool.{{ :продукты:troyka-gps-glonass:troyka-gps-glonass_firmware_update1.png |}}
- Нажмите на кнопку ''Download Agent'' и выберите файл прошивки загрузчика для чипсета NL3333.{{ :продукты:troyka-gps-glonass:troyka-gps-glonass_firmware_update2x.png |}} После чего увидите путь к файлу загрузчика для чипсета NL3333.{{ :продукты:troyka-gps-glonass:troyka-gps-glonass_firmware_update3x.png |}}
- Нажмите на кнопку ''ROM'' и выберите файл прошивки для чипсета NL3333.{{ :продукты:troyka-gps-glonass:troyka-gps-glonass_firmware_update4x.png |}} В результате вы увидите путь к файлу прошивки для модуля NL3333.{{ :продукты:troyka-gps-glonass:troyka-gps-glonass_firmware_update5x.png |}}
- Выберите номер COM-порта платы программатора. Узнать номер COM-порта вашей платы можно в диспетчере устройств.{{ :продукты:troyka-gps-glonass:troyka-gps-glonass_firmware_update6x.png |}}
- Выберите скорость обновление прошивки модуля ''115200''.{{ :продукты:troyka-gps-glonass:troyka-gps-glonass_firmware_update7x.png |}}
- Установите текущую скорость модуля ''115200''.{{ :продукты:troyka-gps-glonass:troyka-gps-glonass_firmware_update8x.png |}}
- Настройки закончены. Нажмите на кнопку ''Connect''. Перед вами откроется окно состояния прошивки модуля.{{ :продукты:troyka-gps-glonass:troyka-gps-glonass_firmware_update9x.png |}}
- Нажмите кнопку ''Download''. В прогресс баре вы увидите процесс прошивки GPS-модуля.{{ :продукты:troyka-gps-glonass:troyka-gps-glonass_firmware_update10x.png |}}
- После окончания прошивки в окне состояния появится зелёный кружок.{{ :продукты:troyka-gps-glonass:troyka-gps-glonass_firmware_update11x.png |}} Это значит всё получилось и можно [[продукты:troyka-gps-glonass#примеры_работы|продолжать работу с модулем.]]
===== Принципиальная и монтажная схемы =====
{{:продукты: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 G7
* Навигационные системы: GPS, GLONASS, BDS
* Рабочие частоты:
* GPS L1: 1575,42 МГц
* GLONASS L1: 1602,5625 МГц
* BDS L1: 1561,098 МГц
* Протоколы передачи данных: NMEA
* Скорость передачи данных по умолчанию: 9600 бод
* Размеры антенны: 40×40 мм
* Длина кабеля: 3 м
* Поляризация: RHCP (правая круговая поляризация)
* Погрешность позиционирования: менее 3 м
* Горячий старт: 1 с
* Холодный старт: 28 с
* Рабочее напряжение: 3,3–5 В
* Потребляемый ток: до 25 мА
* Габариты: 25,4×25,4 мм
===== Ресурсы =====
* [[amp>product/troyka-gps-glonass-extended-receiver-v2?utm_source=man&utm_campaign=gps&utm_medium=wiki|Приёмник GPS/GLONASS v2 с внешней антенной (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}}.