Рубрики
Проекты на Raspberry Pi

Подключение GPS модуля к Raspberry Pi

Отслеживание местоположения каких либо людей или объектов в настоящее время стало достаточно обыденной задачей благодаря таким системам как GPS и Глонасс. Современные GPS модули сравнительно дешево стоят и умещаются на ладони человека, благодаря чему любой радиолюбитель может их без особого труда применить в своих проектах.

В данной статье мы рассмотрим подключение GPS модуля к плате Raspberry Pi. Мы будем принимать данные широты и долготы от GPS модуля по последовательному каналу связи и отображать их на экране ЖК дисплея 16×2.

Также на нашем сайте вы можете посмотреть другие проекты, в которых был использован GPS модуль:

Необходимые компоненты

  1. Плата Raspberry Pi (купить на AliExpress).
  2. GPS модуль Neo 6m v2 (купить на AliExpress).
  3. ЖК дисплей 16×2 (купить на AliExpress).
  4. Потенциометр 10 кОм для регулировки контрастности ЖК дисплея (купить на AliExpress).
  5. Макетная плата.
  6. Соединительные провода.

Принципы работы GPS модуля

GPS (Global Positioning System) представляет собой систему глобального позиционирования, с помощью которой можно определить широту и долготу любой точки на Земле, а также точное время в этой точке (UTC time — Universal Time Coordinated). GPS модуль будет основным устройством в нашем проекте. Данный модуль принимает координаты от спутников каждую секунду. Вместе с координатами осуществляется прием времени и даты.

GPS передает данные, идентифицирующие местоположение, в реальном времени. Но вместе с этими данными он передает и очень много других данных в формате NMEA – смотрите приведенный ниже рисунок. NMEA содержит несколько строк (предложений) – нам из всей этой совокупности данных будет нужна всего лишь одна строка. Эта строка начинается с $GPGGA и содержит координаты, время и другую полезную информацию. Эти данные относятся к фиксированным данным глобального позиционирования (Global Positioning System Fix Data).

Мы можем извлечь нужные нам данные из строки $GPGGA при помощи подсчета запятых в строке. К примеру, если вы нашли строку $GPGGA и сохранили ее в массиве, то широта может быть найдена в нем после двух запятых, а долгота – после четырех запятых. После извлечения значения широты и долготы можно поместить в другие массивы.

Приведем пример $GPGGA строки с расшифровкой:

$GPGGA,104534.000,7791.0381,N,06727.4434,E,1,08,0.9,510.4,M,43.9,M,,*47

$GPGGA,HHMMSS.SSS,latitude,N,longitude,E,FQ,NOS,HDP,altitude,M,height,M,,checksum data

В следующей таблице представлен перевод (описание) этих данных GPS.

Идентификатор Описание
$GPGGA Фиксированные данные системы глобального позиционирования
HHMMSS.SSS Время в формате: час минута секунда и миллисекунда
Latitude Широта (координата)
N Направление: N=North (север), S=South (юг)
Longitude Долгота (координата)
E Направление: E= East (восток), W=West (запад)
FQ Данные фиксированного качества (Fix Quality Data)
NOS Номер использованного спутника
HPD Фактор снижения точности при определении положения в горизонтальной плоскости (Horizontal Dilution of Precision)
Altitude Высота над уровнем моря
M Meter (метр)
Height Height (высота)
Checksum Данные контрольной суммы

Теперь перейдем к подготовке платы к подключению GPS модуля.

Подготовка Raspberry Pi к подключению GPS модуля

Будем надеяться, что перед прочтением данной статьи вы уже знаете основы работы с Raspberry Pi, у вас установлена операционная система на нее, вы знаете IP адрес платы и она у вас подключена к интернету.

Мы будем подключать GPS модуль к плате Raspberry Pi по последовательному порту связи (UART). Плата Raspberry Pi имеет два встроенных порта UART — PL011 и мини UART. Способы использования этих двух портов немного отличаются друг от друга. К примеру, в Raspberry Pi 3 (именно эту модель мы использовали в проекте, хотя можно применить и другие модели), модуль Bluetooth подключен к PLO11 UART, в то время как mini UART используется в качестве выхода консоли linux. В этом проекте мы будем использовать порт PLO11, поэтому мы должны деактивировать Bluetooth модуль на этом порту используя overlay (оверлей), доступный в Raspberry Pi OS.

Для подготовки Raspberry Pi к подключению GPS модуля выполните следующую последовательность шагов.

Шаг 1. Установка обновлений для Raspberry Pi.

Установите последние обновления для Raspberry Pi с помощью следующих команд:

После этого перезагрузите систему:

Шаг 2. Установка UART в Raspberry Pi.

Здесь нам первое, что необходимо сделать, это отредактировать файл /boot/config.txt. Для этого выполните следующую команду:

В самый конец этого файла добавьте следующие строки:

Нажмите ctrl+x чтобы выйти из режима редактирования файла и затем y и enter чтобы сохранить изменения в файле.

Приведенная команда force_turbo позволяет UART использовать максимальную частоту ядра, в нашем случае мы ее установили равной 250. Это необходимо для обеспечения целостности и полноты данных, получаемых по последовательному порту. Необходимо отметить, что команда force_turbo=1 снимает гарантию с вашей платы Raspberry Pi, однако, тем не менее, это безопасная команда.

Команда dtoverlay=pi3-disable-bt отсоединяет Bluetooth от порта ttyAMA0, что позволяет задействовать полную мощность UART доступную через ttyAMAO вместо использования mini UART ttyS0.

Убедитесь в том, что в работе вашей платы Raspberry Pi отсутствуют ошибки, которые могут приводить к ее перезагрузке.

Далее на этом шаге для настройки UART необходимо отредактировать файл boot/cmdline.txt. Перед его редактированием сделайте его копию и сохраните ее в надежном месте чтобы иметь возможность «откатить» сделанные изменения если что то пойдет не так. Отредактировать этот файл можно с помощью следующей команды:

Замените его содержимое на следующее:

Сохраните после этого файл. После этого необходимо перезагрузить систему чтобы изменения вступили в силу.

Шаг 3. Отключение службы последовательной передачи данных Getty

На этом шаге необходимо отключить службу getty, следующая команда предотвратит ее запуск после перезагрузки системы:

Следующая команда задействует эту службу снова если у вас в этом будет необходимость:

Перезагрузите систему.

Шаг 4. Активация ttyAMAO.

Ранее мы деактивировали ttyS0, теперь необходимо активировать ttyAMAO.

Шаг 5. Установка Minicom и pynmea2.

Нам необходима будет служба Minicom чтобы подключаться к GPS модулю и принимать от него данные. Также с помощью данного инструмента можно проверить хорошо ли работает GPS модуль или нет. Альтернативой minicom является программное обеспечение GPSD (daemon).

Чтобы максимально упростить прием данных от GPS модуля мы будем использовать библиотеку pynmea2. Его можно установить с помощью следующей команды:

Документацию к данной библиотеке можно найти по следующей ссылке – https://github.com/Knio/pynmea2.

Шаг 6. Установка библиотеки для работы с ЖК дисплеем.

В данном проекте мы будем использовать библиотеку AdaFruit, которая изначально была разработана для дисплеев производства компании AdaFruit, но также работает и с дисплеями на драйвере HD44780. Если ваш дисплей работает на данном драйвере, то у вас не должно возникнуть проблем с этой библиотекой.

Мы будем клонировать эту библиотеку и затем непосредственно ее устанавливать. Чтобы клонировать эту библиотеку введите следующую команду:

Смените каталог на тот, в который вы клонировали библиотеку, и затем установите ее:

После установки библиотеки перезагрузите систему.

Схема проекта

Схема подключения GPS модуля к плате Raspberry Pi представлена на следующем рисунке.

Тестирование GPS модуля

Перед тем как запускать на выполнение основную программу нашего проекта (приведена в конце статьи) желательно протестировать соединение с GPS модулем. Мы будем использовать для этой цели minicom. Выполните следующую команду:

9600 в данной команде обозначает бодовую скорость, с которой мы будем взаимодействовать с GPS модулем.

Также тестирование работы GPS модуля можно выполнить с помощью следующей команды:

После выполнения этой команды вы можете увидеть в окне предложения NMEA, которые были описаны ранее.

Если тест соединения с GPS модулем прошел успешно, можно приступать к тестированию работы всего проекта. GPS модулю обычно необходимо чтобы в его поле зрения было от 3 до 4 спутников чтобы он работал уверенно.

Исходный код программы на Python

Видео, демонстрирующее работу проекта

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *