GPS-трекер на ESP32 с визуализацией данных на карте


Этот GPS-трекер на базе ESP32 должен стать увлекательным проектом, особенно для новичков, интересующихся электроникой и разработкой программного обеспечения (ПО). Он пробуждает детское любопытство к отслеживанию всего, что нас окружает. Хотя его аппаратная настройка относительно проста, настоящая его сложность кроется в программном обеспечении. Но это больше не проблема благодаря появлению API GeoLinker.

Сервис Circuit Digest Cloud запустил простой в использовании бесплатный API GeoLinker. Этот API позволяет вам составлять графики и маршрутизировать данные о местоположении, отправляемые с вашего устройства на сервер, что упрощает визуализацию и отслеживание местоположения.

GPS-трекер на ESP32 с визуализацией данных на карте

В этой статье мы рассмотрим создание GPS-трекера на базе GPS-модуля Neo-6M и платы ESP32, подробно расскажем о настройке оборудования и использовании GeoLinker в качестве программного компонента.

Также на нашем сайте вы можете посмотреть другие проекты GPS-трекеров:

Требуемые компоненты

Для этого проекта требуется лишь минимальное количество компонентов. Однако перед использованием важно проверить работоспособность каждого компонента. Как всегда, выбор компонентов зависит от вашего бюджета и креативности, без ограничений на адаптацию. Ниже представлены компоненты, которые мы использовали для сборки GPS-трекера на базе ESP32.

  1. Плата разработки ESP32 (купить на AliExpress).
  2. GPS модуль NEO-6M (купить на AliExpress).
  3. Светодиоды - 2 шт. (купить на AliExpress).
  4. Резистор 1 кОм - 2
  5. Макетная плата.
  6. Соединительные провода — по мере необходимости.

Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158

Нет никаких особых причин выбрать GPS-модуль Neo-6M, кроме его экономичности. Если вы используете Neo-6M, как и я, и ваш GPS-модуль не работает, ознакомьтесь со статьёй по ссылке, чтобы узнать, как устранить неполадки. Вы также можете использовать любой другой GPS-модуль для ESP32 для завершения этого проекта. 

Как работает GPS-трекер ESP32?

В этом проекте мы создадим простой GPS-трекер, сочетающий GPS-модуль для ESP32 с подключением к облаку, что упростит реализацию как на аппаратном, так и на программном уровне. В качестве аппаратной части мы будем использовать известную плату разработки ESP32 вместе с GPS-модулем Neo-6M. В качестве программного обеспечения мы будем использовать API GeoLinker, разработанный Circuit Digest Cloud.

Принцип работы GPS-трекера на ESP32

Мы будем получать GPS-данные с GPS-модуля Neo-6M с помощью ESP32 и отправлять их в API для построения карт и маршрутизации с помощью простого HTTP-запроса. Каждая точка данных будет добавлена ​​в базу данных. Войдя в свою учётную запись на Circuit Digest Cloud, вы сможете просматривать данные построения карт в режиме реального времени и отслеживать маршрут.

Дополнительная функция, реализованная в этом проекте, — это онлайн- и офлайн-обработка данных. В частности, при отсутствии интернета данные сохраняются в локальной переменной. После восстановления соединения сначала на сервер отправляются сохранённые данные, а затем — вновь полученные. Это весьма интересная и полезная функция, особенно в регионах с нестабильным интернет-соединением.  

Настройка GeoLinker для GPS-трекера

Как и большинство облачных API CircuitDigest, GeoLinker также требует API-ключа для авторизации. Чтобы получить бесплатный API-ключ, выполните следующие действия.

Если вы новичок в CircuitDigest Cloud, вам необходимо зарегистрировать новую учетную запись, выполнив следующие шаги.

Регистрация новой учетной записи в Circuit Digest Cloud

Создание аккаунта в GeoLinker

Шаг 1: Посетите домашнюю страницу Circuit Digest Cloud. Нажмите кнопку "Login" («Войти») в правом верхнем углу, чтобы перейти на страницу входа.

Шаг 2: Если у вас уже есть учётная запись, войдите в систему, используя свои текущие данные. Если нет, перейдите на страницу регистрации, чтобы создать учётную запись, заполнив необходимые данные. Для этого нажмите "Register Now" («Зарегистрироваться»).

Шаг 3: После регистрации используйте свой адрес электронной почты и пароль для входа на страницу входа.

Следующий шаг — генерация ключа API.

Генерация ключа API

Генерация ключа API на GeoLinker

Шаг 4: После входа в систему нажмите "My Account" («Моя учетная запись») в правом верхнем углу.

Шаг 5: Вы будете перенаправлены на страницу, где сможете сгенерировать ключ API. Введите текст капчи в соответствующее поле и нажмите кнопку "Generate API Key" («Сгенерировать ключ API)» .

Шаг 6: Если капча верна, вы увидите таблицу с вашим API-ключом , сроком его действия и количеством использований. Нажмите на значок копирования рядом с API-ключом, и ваш ключ мгновенно скопируется в буфер обмена.

В настоящее время существует ограничение на количество использований одного ключа для SMS и API ANPR, а также на 10 000 точек данных для GPS-отслеживания. По достижении этого лимита вы можете сгенерировать другой ключ, который обеспечит ещё 100 использований.

Это ограничение использования введено для предотвращения перегрузки сервера.

Теперь мы готовы перейти к аппаратному обеспечению.

Схема GPS-трекера на ESP32

Принципиальная схема достаточно проста в понимании, так как содержит всего несколько соединений. Полная схема для сборки GPS-трекера на базе ESP32 представлена ​​ниже.

ESP32 питается через USB-порт, а GPS-модуль получает стабильное напряжение 3,3 В от ESP32. Связь между двумя модулями осуществляется через UART, где контакт TX (передача) GPS-модуля подключается к контакту RX (IO16) ESP32, а контакт RX (приём) GPS — к контакту TX (IO17) ESP32. Если вам нужна дополнительная информация, ознакомьтесь с нашей статьей о том, как использовать GPS-модуль NEO-6M с ESP32

Схема GPS-трекера на ESP32

Собранная на макетной плате конструкция проекта показана на следующем рисунке.

Собранная на макетной плате конструкция проекта

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

Объяснение кода программы

Полный код программы приведен в конце статьи, здесь же мы кратко расмотрим его основные аспекты.

Благодаря официальной библиотеке Arduino GeoLinker, программирование стало проще благодаря функциям, присутствующим в ней. Итак, приступим к объяснению.

1. Подключение библиотеки

Назначение: основная библиотека для GPS-отслеживания и подключения к облаку.

Функциональность:

  • Выполняет анализ данных GPS (протокол NMEA)
  • Управляет сетевым взаимодействием (Wi-Fi/GSM)
  • Обеспечивает интеграцию облачных сервисов
  • Обеспечивает автономное хранение данных
  • Управляет автоматическим переподключением

Ссылка на репозиторий: https://github.com/Circuit-Digest/GeoLinker

2. Конфигурация GPS

Связь с модулем GPS устанавливается через аппаратный последовательный интерфейс с использованием HardwareSerial gpsSerial(1), который создает экземпляр класса для работы с последовательгым портом с использованием UART1.

Физические соединения определяются следующим образом: GPIO16 выполняет функцию контакта RX для приема данных от модуля GPS, а GPIO17 функционирует как контакт TX для отправки данных на модуль GPS.

Связь осуществляется со стандартной скоростью 9600 бод, что является типичной скоростью для модулей NMEA GPS. Аппаратный последовательный порт был выбран специально, а не программный, поскольку он обеспечивает гораздо более надёжную связь для непрерывной потоковой передачи данных GPS, гарантируя отсутствие потери критически важных данных о местоположении во время передачи.

3. Конфигурация Wi-Fi

Сетевое подключение устанавливается с помощью двух простых переменных конфигурации: SSID и пароль . Эти строковые константы следует заменить на ваши реальные учётные данные сети Wi-Fi, чтобы GPS-трекер мог подключиться к Интернету.

4. Переменные конфигурации GeoLinker

API-аутентификация

Объяснение: API-ключ, который аутентифицирует ваше устройство с помощью облачного сервиса GeoLinker.

Идентификатор устройства: уникальный идентификатор, позволяющий отличить этот трекер от других.

Настройки передачи данных

  • updateInterval: как часто данные GPS отправляются в облако (5 секунд);

  • enableOfflineStorage: логический флаг для автономной буферизации данных;

  • offlineBufferLimit: максимальное количество сохраняемых записей в автономном режиме (управление памятью). При достижении лимита старые данные будут заменены новыми. Другими словами, в памяти будут сохранены самые последние (например, 20) данные.

Управление подключением

Автоматическое переподключение: автоматически пытается повторно подключиться к сети Wi-Fi в случае отключения.
Смещение часового пояса: корректирует временные метки в соответствии с местным временем (пример: IST = UTC+5:30).

Экземпляр класса GeoLinker

Основные операции отслеживания выполняются через единый геообъект GeoLinker, который служит основным интерфейсом для всех функций GPS-отслеживания, обработки данных и облачной связи.

5. Объяснение функции setup()

Инициализация последовательной связи

  1. Отладочный последовательный порт: 115200 бод для быстрого отладочного вывода.

  2. Задержка: обеспечивает стабилизацию последовательного порта.

  3. Последовательный порт GPS: настраивает пользовательские контакты в формате 8N1 (8 бит данных, без контроля четности, 1 стоповый бит).

Последовательность конфигурации GeoLinker

  1. Инициализация: связывает последовательный интерфейс GPS с GeoLinker.

  2. Аутентификация: настраивает доступ к облачному сервису.

  3. Идентификация устройства: устанавливает уникальное отслеживание устройства.

  4. Время: контролирует частоту отправки данных.

  5. Отладка: устанавливает уровень вывода информации.

Расширенные настройки

  • Автономное хранилище: сохраняет данные, когда сеть недоступна.

  • Автоматическое переподключение: автоматическая обработка разрывов соединения.

  • Ограничение буфера: предотвращает переполнение памяти на небольших микроконтроллерах.

  • Часовой пояс: обеспечивает точность местных временных меток.

Сетевое подключение

  1. setNetworkMode: выбирает Wi-Fi вместо GSM/сотовой связи.

  2. setWiFiCredentials: предоставляет информацию о доступе к сети.

  3. Подключение: попытки первоначального подключения к WiFi и сообщения в случае сбоев подключения.

6. Объяснение функции loop()

Основной цикл обработки

Сердцем системы GPS-слежения является функция geo.loop(), которая выполняет комплексный цикл обработки на каждой итерации. Эта функция непрерывно считывает предложения NMEA из GPS-модуля, анализируя необработанные данные для извлечения координат, информации о временных метках и показателей качества спутникового сигнала.

Система проверяет качество GPS-координат для обеспечения точности определения местоположения перед передачей данных. Сетевое подключение постоянно отслеживается для поддержания надёжной связи с облачным сервисом.

При наличии подключения данные о местоположении передаются в облачный сервис в режиме реального времени. При сбоях в сети система автономного управления сохраняет данные локально для последующей передачи. На протяжении всех операций комплексные механизмы восстановления после ошибок обрабатывают различные сценарии сбоев для поддержания надежности системы.

Обработка кода статуса

Коды успеха

  • STATUS_SENT: данные успешно переданы в облако.

Ошибки, связанные с GPS

  • STATUS_GPS_ERROR: ошибка связи с GPS-модулем.

  • STATUS_PARSE_ERROR: неверный формат данных NMEA.

Ошибки, связанные с сетью

  • STATUS_NETWORK_ERROR: проблемы с подключением к Wi-Fi/интернету.

  • STATUS_BAD_REQUEST_ERROR: сервер отклонил данные (аутентификация/формат).

  • STATUS_INTERNAL_SERVER_ERROR: проблемы с облачным сервисом.

На этом объяснение кода завершено. Полный код доступен в конце статьи. Теперь осталось только загрузить его в ESP32, и волшебство свершится.

Тестирование работы проекта

После успешной загрузки кода система должна начать работать. В этом проекте идея проста.

Данные GPS собираются и отправляются на сервер. При отсутствии интернета данные сохраняются локально и загружаются после восстановления соединения.

Именно это мы и проверили во время нашего испытания.

Для подключения к сети я использовал мобильную точку доступа. После того, как я подключил систему через USB-порт компьютера, я включил точку доступа Wi-Fi на мобильном устройстве, и ESP32 мгновенно подключился.

Тестирование подключения ESP32 к сети WiFi

Убедившись, что всё работает нормально, мы отправились в короткий путь из офиса. На карте было замечено небольшое движение.

Для тестирования система была настроена на отправку данных каждые 2 секунды.

Примечание: для реального использования идеальная задержка составляет от 15 до 60 секунд.

Тестирование обработки движения

Когда всё заработало как надо, мы решили протестировать функцию автономного хранения. Для этого я отключил мобильную точку доступа на 1 минуту, принудительно переведя устройство в автономный режим.

Отключение от сети Wifi

В период офлайн данные сохранялись в буфере без каких-либо потерь.

Тестирование функции автономного хранения

После восстановления интернета буферизованные точки данных были мгновенно загружены одна за другой, и система вернулась в онлайн-режим.

Через 20 минут мы завершили тест и вернулись в офис.

Завершение тестирования проекта

Мы успешно продемонстрировали и проверили работу GPS-трекера и его применение.

Благодаря будущим обновлениям GeoLinker его использование в качестве универсальной платформы для построения и маршрутизации GPS станет еще более удобным.

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

Исходный код данного проекта можно также скачать с репозитория GitHub

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

(Проголосуй первым!)
Загрузка...
34 просмотров

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

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