Подключение GPS приёмника — различия между версиями

Материал из virt2real wiki
Перейти к: навигация, поиск
Строка 66: Строка 66:
 
  stty -F /dev/ttyS0 4800
 
  stty -F /dev/ttyS0 4800
  
 +
или
 +
 +
stty -F /dev/ttyS0 9600
  
 
= Пример изменения конфигурации приёмника =
 
= Пример изменения конфигурации приёмника =

Версия 17:40, 12 августа 2014

На данный момент было проверено подключение двух моделей GPS-приёмников, но принцип у всех GPS/GLONASS приёмников общий, разница лишь в интерфейсе подключения и в специфичных командах. Для реализации базовой функции (определение местоположения) достаточно приведённых ниже инструкций.

Содержание

UART GPS/GLONASS приёмники

Проверенные устройства

Приёмник EM-408

фото EM-408


Этот приёмник подключается к UART Виртурилки. Распиновка разъёма этого приёмника приведена на рисунке.

Распиновка разъёма EM-408


Приёмник EM-408 по умолчанию работает на скорости 4800 кбит/сек.

Хорошее описание и исследование GPS-приёмника EM-408

Описание GPS-приёмника EM-408

Ещё описание GPS-приёмника EM-408

Описание NMEA от SiRF


Приёмник UBLOX NEO-6M (GY-GPS6MV2)

GPS приёмник GY-GPS6MV2



Приёмник UBLOX NEO-6M (GY-GPS6MV2) по умолчанию работает на скорости 9600 кбит/сек.


Подключение

Подключение производится как обычно для UART, крест-накрест.

GPS приёмник Виртурилка
1 Enable/Disable (этот вход может отсутствовать) +3.3V
2 GND CON1 (GND)
3 RX CON2 (UART0_TXD) или CON29 (UART1_TXD)
4 TX CON3 (UART0_RXD) или CON28 (UART1_RXD)
5 Vcc +3.3V


После подключения приёмник будет доступен на порту UART0 (/dev/ttyS0) или UART1 (/dev/ttyS1), в зависимости от того, к каким пинам подключили.


Начальная конфигурация

После первого включения приёмник передаёт данные на какой-то фиксированной скорости, установленной производителем. Обычно это 9600 или 4800 бит/сек. Соответственно, необходимо изменить параметры UART (/dev/ttyS0 для UART0 или /dev/ttyS1 для UART1) Виртурилки.

stty -F /dev/ttyS0 4800

или

stty -F /dev/ttyS0 9600

Пример изменения конфигурации приёмника

Изменение параметров GPS-приёмника производится путём записи управляющей строчки в порт, к которому приёмник подключен. Полное описание команд специфично для разных производителей GPS-приёмников. Для EM-408, например, можно использовать такие команды:

Установка параметров передачи 57600 бит/сек, 8 бит данных, отсутствие контроля чётности, 1 стоп-бит

echo "$PSRF100,1,57600,8,1,0*36" > /dev/ttyS0

Установка параметров передачи 115200 бит/сек, 8 бит данных, отсутствие контроля чётности, 1 стоп-бит

echo "$PSRF100,1,115200,8,1,0*05" > /dev/ttyS0

После смены параметров передачи приёмника необходимо сменить параметры UART Виртурилки на аналогичные. Делается это командой stty:

Изменить скорость порта /dev/ttyS0 на 115200 бит/сек.

stty -F /dev/ttyS0 115200


После изменения параметров GPS настройки сохранятся до выключения питания плюс несколько минут (пока не разрядится внутренний супер-конденсатор).



USB GPS/GLONASS приёмники

USB-приёмник GlobalSat BU-353 GLONASS

фото GlobalSat BU-353


Для подключения этого приёмника к Виртурилке требуется microUSB OTG переходник. Просто вставьте USB разъём приёмника в USB гнездо переходника.

Приёмник видится в системе как обычный COM-порт, реализованый на контроллере Prolific pl2303. Его поддержка по-умолчанию включена в ядро, так что загрузка модулей не требуется. После подключения приёмника в консоли появятся примерно такие сообщения

usb 1-1: New USB device found, idVendor=067b, idProduct=2303
usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 1-1: Product: USB-Serial Controller
usb 1-1: Manufacturer: Prolific Technology Inc.
usb 1-1: usb_probe_device
usb 1-1: configuration #1 chosen from 1 choice
usb 1-1: adding 1-1:1.0 (config #1, interface 0)
pl2303 1-1:1.0: usb_probe_interface
pl2303 1-1:1.0: usb_probe_interface - got id
pl2303 1-1:1.0: pl2303 converter detected
usb 1-1: pl2303 converter now attached to ttyUSB0
hub 1-0:1.0: state 7 ports 1 chg 0000 evt 0002
hub 1-0:1.0: port 1 enable change, status 00000103

Строчка "usb 1-1: pl2303 converter now attached to ttyUSB0" означает что приёмник доступен в виде устройства /dev/ttyUSB0.

Для чтения NMEA-информаци с приёмника достаточно выполнить команду

# cat /dev/ttyUSB0

И увидим строчки NMEA

$GPGGA,220228.083,,,,,0,0,,,M,,M,,*4B
$GLGSV,1,1,01,68,,,23*6B
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPVTG,112.05,T,,M,0.00,N,0.00,K,N*35
$GPZDA,220228.083,21,08,2013,,*5E
$GPGLL,,,,,220228.083,V,N*79
$GPRMC,220228.083,V,,,,,0.00,112.05,210813,,,N*40



Парсинг строк NMEA

Для чтения выдаваемой GPS-приёмником информации в виде NMEA-строк можно использовать такой код для NodeJS:

  1.  var serialport = require('serialport');
  2.  var nmea = require('nmea');
  3.  var EventEmitter = require('events').EventEmitter;
  4.  
  5.  var port = new serialport.SerialPort('/dev/ttyUSB0', {
  6.                 baudrate: 115200,
  7.                 parser: serialport.parsers.readline('\r\n')});
  8.  
  9.  
  10.  var gps = new EventEmitter();
  11.  
  12.  port.on('data', function(line) {
  13.     var data = nmea.parse(line);
  14.     if (data) {
  15.         gps.emit(data.type, data);
  16.     }
  17.  });
  18.  
  19.  
  20.  gps.on('fix', function(data) {
  21.     console.log(data);
  22.     console.log("lat: " + nmea_to_kml(data.lat) + " lng: " + nmea_to_kml(data.lon));
  23.  }); 
  24.  
  25.  
  26.  function nmea_to_kml(x){
  27. 	var a = Math.floor(x/100);
  28. 	var b = x - a*100;
  29. 	var c = Math.floor((b/60)*100000)/100000;
  30. 	return a + c;
  31.  
  32.  }


Строчка 21 после фиксации координат начнёт выдавать нечто типа такого

{ type: 'fix',
 timestamp: '222732.000',
 lat: '5512.2351',
 latPole: 'N',
 lon: '03112.3641',
 lonPole: 'E',
 fixType: 'fix',
 numSat: 6,
 horDilution: 1.45,
 alt: 249.9,
 altUnit: 'M',
 geoidalSep: 14.6,
 geoidalSepUnit: 'M',
 differentialAge: 0,
 differentialRefStn: ,
 talker_id: 'GP' }

Но для использования, например, в гуглокартах, координаты надо преобразовать. Для этого служит функция nmea_to_kml(). Строчка 22 выведет уже преобразованные координаты

lat: 55.20391 lng: 31.20606