Автор Тема: Подключение GPS модуля  (Прочитано 3292 раз)

Оффлайн UB3GAD

Подключение GPS модуля
« : Декабрь 07, 2015, 12:11:02 am »
Получил на днях модуль  GPS UBLOX NEO-6M (GY-GPS6MV2),  за 10$  и решил на базе него и OrangePI PC сделать свой навигатор с шахматами и поэтессами ;)  и четырех ядерным процессором...
Подключение производится как обычно для UART, крест-накрест, вложение pin
По умолчанию uart в script.bin выключен, для того что бы его включить надо найти script.fex под свою модель платы, напимер тут 
И привести часть конфига отвечающего за uart к такому виду

[uart2]
uart_used       = 1
uart_port       = 2
uart_type       = 2
uart_tx         = port:PA00<2><1><default><default>
uart_rx         = port:PA01<2><1><default><default>

[uart3]
uart_used       = 1
uart_port       = 3
uart_type       = 2
uart_tx         = port:PA13<3><1><default><default>
uart_rx         = port:PA14<3><1><default><default>

После чего скомпилировать утилитой fex2bin и скопировать на раздел boot
После перезагрузки проверяем видиться ли наш gps для этого в терминале набираем

sudo cat /dev/ttyS2

если на экране побежал текст значит все сделано правильно

Некоторые програмы не могут работать напрямую с портом для этого придеться поставить дополнительную службу

sudo apt-get install gpsd
gpsd /dev/ttyS2

В качестве навигационной программы рекомендую Семь Дорог
- Поиск по адресу и названиям.
- Выбор оптимального маршрута.
- Приятные ненавязчивые голосовые подсказки.
- Удобный эргономичный интерфейс программы.
- Специальная система управления изображением для сохранения вашего зрения.
- Огромный выбор понятных настроек.
- Улучшенные алгоритмы отрисовки карт и объектов.
- Быстрый поиск.
- Возможность создавать свои карты!
И главное есть офф сборка под linux arm   скачать

Orange Pi PC

Оффлайн nkk

Re: Подключение GPS модуля
« Ответ #1 : Январь 10, 2016, 12:10:16 pm »
Спасибо Вам большое за эту тему - то есть всё встает и работает без дополнительного шаманства?

На сколько, по-Вашему, GPS работает быстрее/точнее чем встроенный в телефон?
Мне надо трек записывать с максимальной точностью и минимальным временем инициализации на старте.
Спалено =(

Оффлайн UB3GAD

Re: Подключение GPS модуля
« Ответ #2 : Январь 10, 2016, 09:43:25 pm »
Да всё встает и работает без дополнительного шаманства, насчет скорости ничего не скажу так как модуль у меня бракованный(проблема с питанием антены) и ловит достаточно посредственно
Orange Pi PC

Оффлайн vash_sa

  • Посвященный
  • ***
  • Сообщений: 166
  • Лайков: 6
  • Карма: +0/-5
  • Orange Pi PC v 1.2
    • Просмотр профиля
Re: Подключение GPS модуля
« Ответ #3 : Февраль 01, 2016, 01:04:08 pm »
UB3GAD, А uart 3 у Вас работает? У меня uart 2 работает отлично, а вот 3 - не хочет. Может ему нужны дополнительные настройки. Проверьте, пожалуйста,  и отпишитесь.

Оффлайн aleckds

Re: Подключение GPS модуля
« Ответ #4 : Февраль 15, 2016, 01:05:36 pm »
Orange PI PC.
У меня почему-то не работает uart 1,2,3. Работает только UART 0, который не на GPIO.
Опрашивал ttyS2 и вешал так же на pin 11,13, (и GND на 9). И ничего...
Может что-то мешает?
Всё сделал как в теме, настроил и script.
Что ещё попробовать?

Оффлайн UB3GAD

Re: Подключение GPS модуля
« Ответ #5 : Февраль 15, 2016, 01:07:25 pm »
В папке  /dev есть файл ttyS2 ?
Orange Pi PC

Оффлайн aleckds

Re: Подключение GPS модуля
« Ответ #6 : Февраль 15, 2016, 03:33:41 pm »
Есть:
ls /dev/ | grep ttyS
ttyS0
ttyS1
ttyS2

dmesg | grep -i tty
[    0.000000] Kernel command line: earlyprintk=ttyS0,115200 loglevel=8 initcall_debug=0 console=ttyS0,115200 console=tty0 init=/init
[    0.000000] console [tty0] enabled, bootconsole disabled
[    0.632236] uart0: ttyS0 at MMIO 0x1c28000 (irq = 32) is a SUNXI
[    0.824515] console [ttyS0] enabled
[    1.227223] uart1: ttyS1 at MMIO 0x1c28400 (irq = 33) is a SUNXI
[    1.415420] uart2: ttyS2 at MMIO 0x1c28800 (irq = 34) is a SUNXI
[    4.575493] Bluetooth: RFCOMM TTY layer initialized
[   14.809688] systemd[1]: Created slice system-getty.slice.
[   14.844496] systemd[1]: Created slice system-serial\x2dgetty.slice.

Исходя из схемы(см. вложение) всё вроде ок.
« Последнее редактирование: Февраль 15, 2016, 05:13:10 pm от aleckds »

Оффлайн nkk

Re: Подключение GPS модуля
« Ответ #7 : Февраль 15, 2016, 05:50:57 pm »
sudo cat /dev/ttyS2

если на экране побежал текст значит все сделано правильно
Разобрался, в том, что бежит.

Описание - https://ru.wikipedia.org/wiki/NMEA_0183
Более подробно - http://aprs.gids.nl/nmea/ - но заметны некоторые несоответствия и разнообразие оформления информации.

Мой модуль, видимо "тащит" только GPS (или РФ забанила нас на Глонас`е) - все строки начинаются с $GP. Так, например, (на PHP) для получения текущей позиции парсим строку начинающуюся с $GPGLL:
<?php
$pos = array();
/* открываем файл */
$fh = fopen('/dev/ttyS2', 'r');
if ($fh) {
  /* читаем из него... */
  while (!feof($fh) && false !== ($gps_res = fgets($fh))) {
    /* ...в поисках валидной и актуальной строки */
    if (preg_match('/^\$GPGLL\,(.*)\*/', $gps_res, $gps_mstr) && ($gps_msg = explode(',', $gps_mstr[1])) && $gps_msg[5] == 'A') {
      $pos['lat'] = deg_dec($gps_msg[0]);
      $pos['lng'] = deg_dec($gps_msg[2], 3);
      break;
      /* нашли, сохранили - выходим */
    }
  }
  /* закрываем за собой файл */
  fclose($fh);
}

/* небольшая функция, для преобразования координат из NMEA в понятные гуглокартам */
function deg_dec($ddmmm, $p = 2) {
  return substr($ddmmm, $p) / 60 + substr($ddmmm, 0, $p);
}

?><!DOCTYPE html>
<html><head>
  <style type="text/css">
    html, body { height: 100%; margin: 0; padding: 0; }
    #map { height: 100%; }
  </style>
  <script type="text/javascript">
    var map, myLatLng = <?=json_encode($pos, JSON_NUMERIC_CHECK | JSON_FORCE_OBJECT)?>;
    function initMap() {
      map = new google.maps.Map(document.getElementById('map'), {
        center: myLatLng,
        zoom: 16});
      new google.maps.Marker({
        position: myLatLng,
        map: map
      });
    }
  </script>
</head><body>
  <div id="map"></div>
  <script async defer src="https://maps.googleapis.com/maps/api/js?callback=initMap&key=******">
  </script>
</body></html>
Вместо ****** подставляем ключ от js-апи гугла, предварительно его создав и открыв доступ к апи с указанием домена.
В результате, скрипт откроет Вам гуглокарту с центром в заданной точке и выведет туда маркер.

Всё это, конечно, хорошо, но хотелось бы установить готовую прогу, которая пишет треки (и я уже нашел, как называется - gpxlogger) - но где ее достать - хз, в принципе,
если тупо RMC-записи в XML складывать, то можно и самому написать. Сейчас я ее складываю в таблицу такой функцией:

$mysql->query('CREATE TABLE IF NOT EXISTS `points` ( `dttm` DATETIME NOT NULL,
  `lat` DOUBLE NOT NULL, `lng` DOUBLE NOT NULL,
  `ns` CHAR(1) NOT NULL, `ew` CHAR(1) NOT NULL,
  `spd` DOUBLE UNSIGNED, `mode` CHAR(1) NOT NULL,
  PRIMARY KEY (`dttm`))
ENGINE = MEMORY');
/* ***************** */
function nkkgps_process_rmc($gps_msg) {
  global $mysql;
  if ($gps_msg[1] == 'A' && $gps_msg[6] > 2) {
    $mysql->insert('points', array('dttm' => '20'.substr($gps_msg[8], 4, 2).'-'.substr($gps_msg[8], 2, 2).'-'.substr($gps_msg[8], 0, 2).' '
      .substr($gps_msg[0], 0, 2).':'.substr($gps_msg[0], 2, 2).':'.substr($gps_msg[0], 4, 2),
      'ilat' => deg_dec($gps_msg[2]), 'lng' => deg_dec($gps_msg[4], 3), 'ns' => $gps_msg[3], 'ew' => $gps_msg[5],
      'spd' => $gps_msg[6], 'mode' => $gps_msg[11]), true);
  }
}
« Последнее редактирование: Февраль 16, 2016, 05:47:13 pm от nkk »
Спалено =(

Оффлайн aleckds

Re: Подключение GPS модуля
« Ответ #8 : Февраль 16, 2016, 07:31:12 am »
Проблема оказалась в прошивке http://orangepi.pp.ua/index.php/topic,176.90.html

Оффлайн nkk

Re: Подключение GPS модуля
« Ответ #9 : Февраль 18, 2016, 10:18:41 am »
При питании от 17 пина (3.3В) - тоже пашет. Что лучше использовать?
Спалено =(

Оффлайн UB3GAD

Re: Подключение GPS модуля
« Ответ #10 : Февраль 18, 2016, 11:02:39 am »
При питании от 17 пина (3.3В) - тоже пашет. Что лучше использовать?


Насколько я помню схему, они равноценны, используй какой удобно.
Orange Pi PC