Skip to content

NEO-6/7/8 — GPS-модуль

Работа с GPS-модулем NEO-6M/7M/8M на ESP32: чтение сырых NMEA-данных со спутников, проверка контрольной суммы, статус связи/спутников/координат в консоли.

🛰️ GPS NEO Модуль для STEM Лаборатории

Проект для работы с GPS модулем NEO-6M/7M/8M на ESP32. Программа читает “сырые” NMEA-данные со спутников, проверяет их по контрольной сумме и выводит понятный статус связи/спутников/координат в консоль.

📋 Документация проекта

ФайлЧто внутриКому
GUIDE.mdУчебное пособие: протокол NMEA, разбор кода построчно, диагностика, самопроверкаИзучаешь проект впервые
WIRING.mdСхема подключения модуля к ESP32Собираешь железо
ROADMAP.mdКуда развивать проект: автономный ровер по GPS-координатамХочешь пойти дальше

Описание

Проект демонстрирует базовую работу с GPS на уровне, который понятен и пятикласснику, и старшекласснику:

  • Чтение и побайтовый разбор строк NMEA 0183.
  • Проверка каждой строки по контрольной сумме (отсев “битых” пакетов).
  • Подсчёт спутников, видимых каждой системой (GPS/BeiDou/GLONASS/Galileo) — с суммированием по всем созвездиям.
  • Определение статуса Fix (есть ли валидные координаты) и числа спутников, реально использованных в расчёте.
  • Разбор координат, скорости, курса (из $..RMC) и высоты/точности HDOP (из $..GGA) в десятичные градусы и метрические единицы.
  • Watchdog связи: чёткое сообщение в консоли, если модуль физически не отвечает (обрыв проводов/питания), а не просто “тишина”.

Программная архитектура

Один класс-драйвер, без обёрток и фасадов — стандартный паттерн для всех компонентов этого репозитория (см. Components/2.MPU6050):

ФайлыЧто внутри
include/GpsNeo.h, src/GpsNeo.cppКласс GpsNeo: парсинг RMC/GGA/GSV, проверка checksum, watchdog связи. Публичный API компактный (begin(), process(), hasFix(), getPosition()…), поэтому отдельного упрощённого слоя не требуется.
src/main.cppТестовый стенд: создаёт единственный экземпляр GpsNeo gps(Serial2) и выводит диагностику — связь → данные → спутники → координаты.
tools/gps_track_view.pyЖивой визуализатор трека движения (см. раздел “Визуализация” ниже).

Разбор того, как это устроено внутри — в GUIDE.md.

Работа через CLI

cd "Components/1.GPS_NEO_6-8"
pio run -t upload && pio device monitor

Если прошивка падает с ошибкой chip stopped responding — снизь upload_speed = 115200 в platformio.ini, закрой Serial Monitor перед прошивкой.

Окружение esp32c6 в текущей версии не собирается (конфликт макроса Serial/USBSerial в ядре Arduino для этой платы) — используй esp32dev или esp32s3.

📊 Визуализация

Голые числа Lat:.../Lon:... в консоли — не самый наглядный формат для группы учеников. tools/gps_track_view.py рисует накопленный трек движения в реальном времени в метрах от точки старта:

cd tools
pip install -r requirements.txt
python3 gps_track_view.py /dev/ttyUSB0

Работает полностью офлайн (относительная проекция, см. GUIDE.md про формат координат и ROADMAP.md про приближение коротких расстояний). Если нужна подложка настоящей карты (OpenStreetMap) и есть интернет — добавьте флаг --map (потребует pip install contextily); без сети скрипт продолжит работу без подложки.

Serial Monitor прошивки на момент запуска скрипта должен быть закрыт — иначе порт занят и Python не сможет его открыть.


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

Связанные материалы

  • Пространство и положение — координаты, точка отсчёта, пересчёт в метры.
  • BeaconRadio — проект на этом датчике: SOS-маячок с передачей координат, разбор NMEA и обнаружение GNSS-спуфинга.
  • GY-271 — GPS обновляется раз в секунду и «дрожит» на месте; компас даёт направление здесь и сейчас.