ESP8266:Примеры/Использование ESP8266 вместе с GPS-модулем от компании u-blox

Материал из ВикиСправочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 1819 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Ambox content.png Черновик


Использование ESP8266 вместе с GPS-модулем от компании u-blox[1]

UBloxGPS.jpg

Около 20 лет назад я несколько семестров учился электротехнике в знаменитом цюрихском ETH, и однажды был на лекции об основах цифровой электроники. Я помню, как профессор сверлил дырки в CD-дисках, чтобы показать качество исправления ошибок у CD-плееров разной ценовой категории. Кроме того, я помню, как он говорил о крошечных и недорогих GPS-ресиверах, которыми скоро будут оснащены все сотовые телефоны (повторюсь, это было 20 лет назад, и до начала эры смартфонов оставалось еще несколько лет). Этого профессора зовут Герхард Тростер (Gerhard Tröster), и в последствии он основал бесфабричную (т.е. не имеющую собственных производственных мощностей) компанию u-blox (в которой на данный момент трудится 450 человек), изготавливающую системы позиционирования. Я был приятно удивлен, когда увидел этот недорогой GPS-модуль, спроектированный u-blox, в своем любимом китайском онлайн-магазине!

Итак, в этой статье я сделаю обзор на этот модуль, покажу, как использовать его с ESP8266, и дам пару идей о том, где его можно применить.

Модуль VK2828U7G5LF производства u-blox по цене менее 10 долларов

Что делает этот модуль?

Сейчас GPS-навигация стала почти обыденной для огромного количества людей, но начался этот тренд примерно с выхода iPhone 3G. GPS – это глобальная система позиционирования, которая получает сигналы от спутников. Если устройство получает данные хотя бы от 4 спутников, вы можете рассчитать его месторасположение. Это выполняется при помощи сравнения небольших отличий во времени, в течение которого сигнал доходит до устройства. Поскольку от спутников исходит слабый сигнал, устройству нужна линия прямой видимости до спутника, и по этой причине «чистый» GPS зачастую плохо работает в закрытых помещениях.

Но хватит о теории. Как нам настроить коммуникацию между ESP8266 и GPS-модулем u-blox? Модуль отправляет информацию о позиционировании через последовательный интерфейс – такой же используется для программирования ESP8266. По умолчанию скорость этой коммуникации составляет 9600 бод, но этот параметр можно поменять и через последовательный интерфейс.

По всей видимости, многие GPS-модули работают через последовательную шину, а другим частично стандартизированным аспектом является формат сообщений. Модуль, о котором рассказывается в этой статье, отправляет сообщения в формате NMEA (0183 V3.0). Этот формат поддерживает множество разных типов сообщений, и некоторые их них специфичны для определенных производителей. Нам же интересны главные сообщения.

Если взглянуть на данные, исходящие от модуля, мы увидим примерно следующее:

$GPGSV,5,1,19,01,,,29,02,,,30,05,,,27,07,,,29*72
$GPGSV,5,2,19,08,,,23,10,,,28,12,,,32,13,,,29*7F
$GPGSV,5,3,19,15,,,26,16,,,28,18,,,27,21,,,26*71
$GPGSV,5,4,19,22,,,29,23,,,30,24,,,27,28,,,27*75
$GPGSV,5,5,19,29,,,29,33,,,30,40,,,30*75

Настройка GPS-модуля для работы с ESP8266

Вот схема для подключения GPS-модуля e-blox и чипа EP8266:

Подключение GPS-модуля e-blox к плате NodeMCU, оснащенной чипом ESP8266

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

  • Контакт E на GPS-модуле (желтый) – к контакту 3.3V на ESP8266
  • Контакт G (черный) – к контакту GND
  • Контакт R (зеленый) – к контакту D6
  • Контакт T (синий) – к контакту D5
  • Контакт V (красный) – к контакту 3.3V
  • Контакт P (белый) – оставьте неподключенным

Итак, теперь, когда GPS-модуль подключен к ESP8266, мы можем загрузить на него код. Мы хотим, чтобы ESP8266 считывал сообщения, а затем отправлял их на монитор порта IDE Arduino. Код для этих действий будет выглядеть следующим образом:

  1. #include <SoftwareSerial.h>
  2.  
  3. // если вы используете не плату NodeMCU, а другой модуль ESP8266,
  4. // вам могут понадобиться другие GPIO-контакты:
  5. SoftwareSerial mySerial(D5, D6);  //  RX, TX
  6.  
  7. void setup() {
  8.   Serial.begin(115200);
  9.   while (!Serial) {
  10.     ;  //  ждем подключения последовательного порта
  11.        // (нужно только для штатного USB-порта)
  12.   }
  13.  
  14.   // задаем скорость передачи данных через порт SoftwareSerial:
  15.   mySerial.begin(9600);
  16.  
  17. }
  18.  
  19. void loop() {
  20.   if (mySerial.available()) {
  21.     Serial.write(mySerial.read());
  22.   }
  23.   if (Serial.available()) {
  24.     mySerial.write(Serial.read());
  25.   }
  26. }

Загрузите этот скетч на ESP8266 и откройте монитор порта IDE Arduino. Вы должны увидеть входящие NMEA-сообщения. Поначалу некоторые данные могут быть пропущены, но чем больше сигналов будет получать ресивер, тем полнее будет информация о позиционировании. Но это была лишь начальная проверка. Теперь давайте попробуем воспользоваться библиотекой, умеющей работать с NMEA-сообщениями.

Библиотека «TinyGPS+»

Установив эту библиотеку, вы получите, наконец, самую маковку GPS-информации: широту, долготу, высоту, скорость и т.д. Для начала скачайте библиотеку с этой страницы, поместите ее в папку библиотек IDE Arduino, а затем перезапустите IDE Arduino. Затем кликните в IDE Arduino по Файл > Примеры > TinyGPSPlus (File > Examples > TinyGPSPlus) и откройте файл «FullExample». Теперь выставьте скорость передачи данных на 9600 бод (это скорость коммуникации GPS-модуля u-blox по умолчанию), назначьте D5 и D6 контактами для передачи последовательных данных и запустите код.

  1. static const int RXPin = D5, TXPin = D6;
  2. static const uint32_t GPSBaud = 9600;

Если вам не приходит никакой информации о позиционировании, то подойдите к окну, а лучше – выйдите на улицу. «Чистый» GPS печально известен тем, что плохо работает в закрытом пространстве – из за слабого спутникового сигнала и помех, вызываемых другими радиочастотными источниками.

Идеи для проектов

Итак, у нас есть готовый GPS-модуль. Но куда его применить? Вот парочка идей:

  • Велосипедный компьютер. Подключите друг к другу OLED-дисплей, плату NodeMCU, внешний аккумулятор с USB-портом и GPS-модуль, а затем установите их на велосипед. Далее напишите программу, отображающую на OLED-дисплее различную информацию вроде скорости, высоты над уровнем моря и пр. Кроме того, можно добавить поддержку путевых точек (для простенькой навигации), а также запись в EEPROM данных о маршруте (чтобы потом загрузить их в облако, когда система определит рядом ваше домашнее устройство).
  • Модуль для «вардрайвинга». Вообще, сейчас целесообразность этого устройства под большим вопросом, но зато на его сборку требуется менее 20 долларов! Подключите друг к другу GPS-модуль, плату NodeMCU и внешний аккумулятор, а затем включите и принесите на работу. Это устройство предназначено для того, чтобы каждые 30 секунд составлять список SSID’ов вместе с данными об их месторасположении, а затем сохранять эту информацию в EEPROM. В дальнейшем эти данные можно использовать для создания карты (бесплатных?) точек доступа WiFi.
  • Часы реального времени высокой точности. Чтобы рассчитать ваше месторасположение, спутник отправляет очень точные временные метки (time stamp), которые можно считывать при помощи библиотеки TinyGPS+. Да, если ESP8266 подключен к интернету, точное время можно узнавать при помощи протокола NTP. Но если вы по какой-то причине ушли в офлайн, эти GPS-часы могут прийтись весьма кстати. Вы даже можете создать собственный NTP-сервер, работающий на основе GPS-модуля.

Итого

Этот GPS-модуль прост в использовании и стоит менее 10 долларов. Работа с ним осуществляется через последовательный интерфейс, который требует всего два свободных GPIO-контакта. Таким образом, я могу безо всяких проблем воспользоваться SoftwareSerial, а аппаратный последовательный интерфейс оставить для отладки.

Хотя этот модуль весьма хорош для открытых пространств, в закрытых помещениях от работает уже не так хорошо (в отличие от уже ставших привычными GPS-модулей, которыми оснащаются смартфоны). Дело в том, что он не может использовать информацию вроде GSM или SSID’ов WiFi-сетей, чтобы улучшить скорость и точность позиционного сигнала.

Впрочем, этот GPS-модуль все равно будет хорошим дополнением к вашему набору электротехнических компонентов (идеи для проектов смотрите в разделе выше).

И еще! Забыл добавить, что этот GPS-модуль очень удобен в ситуации, когда вам нужно избежать лишних трат электроэнергии – если подать на желтый контакт сигнал LOW, это полностью выключит модуль.

См.также

Внешние ссылки

  1. blog.squix.org - ESP8266 Peripherals: uBlox GPS Module