- Необхідні компоненти:
- Модуль GPS:
- Отримання даних про місцезнаходження з GPS:
- Взаємодія GPS з ESP12E NodeMCU:
- Пояснення коду:
- HTML-код веб-сторінки:
GPS розшифровується як Глобальна система позиціонування і використовується для визначення місцезнаходження, висоти, швидкості, дати та часу в UTC. У цьому проекті ми збираємось взаємодіяти модуль GPS з NodeMCU. Простий локальний веб-сервер створюється за допомогою NodeMCU, а деталі розташування оновлюються на веб-сторінці цього сервера. Особливістю цього заснованого на IoT проекту є те, що ми можемо перевірити місце розташування на Goolge Maps, натиснувши посилання на веб-сторінці. Ви також можете відкрити цю веб-сторінку та перевірити місцезнаходження з будь-якого місця, активуючи переадресацію портів у вашому модемі / маршрутизаторі.
Необхідні компоненти:
- NodeMCU ESP12
- GPS-модуль (uBlox Neo 6M GPS)
Модуль GPS:
Ublox Neo 6M - це послідовний модуль GPS, який надає деталі розташування за допомогою послідовного зв'язку. Він має чотири шпильки.
шпилька |
Опис |
Vcc |
2,7 - 5В живлення |
Gnd |
Земля |
TXD |
Передати дані |
RXD |
Отримати дані |
GPS-модуль Ublox neo 6M сумісний з TTL, і його технічні характеристики наведені нижче.
Час захоплення | Крутий старт: 27 с, гарячий старт: 1 с |
Протокол зв'язку | NMEA |
Послідовний зв’язок | 9600 біт / с, 8 біт даних, 1 стоповий біт, відсутність парності та управління потоком |
Робочий струм | 45 мА |
Отримання даних про місцезнаходження з GPS:
Модуль передаватиме дані в декількох рядках зі швидкістю передачі 9600 бод. Якщо ми використовуємо термінал UART зі швидкістю 9600 бод, ми побачимо дані, отримані GPS.
Модуль GPS надсилає дані про положення відстеження в реальному часі у форматі NMEA (див. Знімок екрана вище). Формат NMEA складається з декількох речень, у яких нижче наводяться чотири важливі речення. Детальніше про речення NMEA та його формат даних можна знайти тут.
- $ GPGGA: дані виправлення глобальної системи позиціонування
- $ GPGSV: супутники GPS на увазі
- $ GPGSA: GPS DOP та активні супутники
- $ GPRMC: Рекомендовані мінімальні конкретні дані GPS / Транзиту
Дізнайтеся більше про дані GPS та рядки NMEA тут.
Це дані, отримані GPS при підключенні зі швидкістю передачі 9600 бод.
$ GPRMC, 141848,00, A, 2237,63306, N, 08820,86316, E, 0,553,, 100418,,, A * 73 $ GPVTG,, T,, M, 0,553, N, 1,024, K, A * 27 $ GPGGA, 141848,00, 2237,63306, N, 08820,86316, E, 1,03,2.56,1.9, M, -54,2, M,, * 74 $ GPGSA, A, 2,06,02,05,,,,,,,,,, 2,75, 2,56,1,00 * 02 $ GPGSV, 1,1,04,02,59,316,30,05,43,188,25,06,44,022,23,25,03,324, * 76 $ GPGLL, 2237,63306, N, 08820,86316, E, 141848,00, A, A * 65
Коли ми використовуємо модуль GPS для відстеження будь-якого місця, нам потрібні лише координати, і ми можемо знайти це в рядку $ GPGGA. Тільки рядок $ GPGGA (Global Positioning System Fix Data) в основному використовується в програмах, а інші рядки ігноруються.
$ GPGGA, 141848,00, 2237,63306, N, 08820,86316, E, 1,03,2,56,1,9, M, -54,2, M,, * 74
Що означає цей рядок?
Значення цього рядка:
1. Рядок завжди починається зі знака "$"
2. GPGGA розшифровується як дані про виправлення глобальної системи позиціонування
3. “,” Кома вказує на поділ між двома значеннями
4. 141848.00: GMT час як 14 (год.): 18 (хв.): 48 (сек.): 00 (мс)
5. 2237.63306, N: Широта 22 (градус) 37 (хвилини) 63306 (сек) Північ
6. 08820.86316, E: Довгота 088 (градус) 20 (хвилини) 86316 (сек) схід
7. 1: Виправити кількість 0 = недійсні дані, 1 = дійсні дані, 2 = виправлення DGPS
8. 03: Кількість супутників, які зараз переглядаються.
9. 1.0: HDOP
10. 2,56, М: Висота над рівнем моря (Висота над рівнем моря в метрах)
11. 1.9, М: Висота геоїдів
12. * 74: контрольна сума
Отже, нам потрібні №5 та №6 для збору інформації про розташування модуля або про те, де він знаходиться. У цьому проекті ми використовували бібліотеку GPS, яка надає деякі функції для вилучення широти та довготи, тому нам не доведеться про це турбуватися.
Раніше ми взаємоділи GPS з іншими мікроконтролерами:
· Як користуватися GPS з Arduino
· Підручник з взаємодії модуля GPS Raspberry Pi
· Взаємозв'язок GPS-модуля з мікроконтролером PIC
· Відстежуйте автомобіль на Картах Google за допомогою Arduino, ESP8266 та GPS
Взаємодія GPS з ESP12E NodeMCU:
NodeMCU - це плата розробки на основі ESP8266. В якості основного процесора використовується ESP-12E. Це 32-бітний MCU. Він має 14 контактів GPIO, одноканальний 10-бітний інтегрований АЦП. Він підтримує зв'язок UART, I2C, SPI. Він сумісний з 3.3V, він не може обробити 5V. Якщо ви новачок у NodeMCU, прочитайте наш Початок роботи з NodeMCU ESP-12.
Ці сполуки між NodeMCU і модулем GPS є таким, як показано нижче.
NodeMCU |
GPS-модуль |
3V3 |
Vcc |
GND |
GND |
D1 (GPIO5) |
RX |
D2 (GPIO4) |
TX |
Нижче наведена принципова схема підключення GPS до NodeMCU:
Модулю GPS потрібно деякий час, щоб зафіксувати деталі розташування після його ввімкнення. NodeMCU запускає веб-сервер і чекає, поки клієнт підключиться до веб-сервера. Після підключення клієнта до веб-сервера NodeMCU надсилає деталі місцезнаходження підключеному клієнту. Деталі розташування відображаються на простій веб-сторінці, розробленій із використанням HTML.
Кроки:
- Підключіть схему, як показано на схемі.
- Завантажте код після зміни облікових даних Wi-Fi.
- Відкрийте послідовний монітор в IDE Arduino та запишіть IP-адресу веб-сервера.
- Відкрийте будь-який браузер і введіть IP-адресу веб-сервера.
- На ній відображатимуться дані про місцезнаходження, дата, час та посилання на карти Google.
Пояснення коду:
Повний вихідний код для цього проекту наведено в кінці цієї статті. Код розділений на невеликі значущі фрагменти і пояснено нижче.
Для взаємодії модуля GPS з NodeMCU нам потрібно включити відповідні файли заголовків. Файли заголовків можна завантажити за посиланнями, наведеними нижче.
Крихітна бібліотека GPS ++:
#включати
Щоб створити веб-сервер за допомогою NodeMCU, його потрібно підключити до мережі Wi-Fi. У цій частині коду ми надаємо облікові дані Wi-Fi бездротової мережі, до якої підключається NodeMCU. Замініть це своїми обліковими даними Wi-Fi.
const char * ssid = " shashi "; const char * password = "12345678";
У цій частині коду ми створюємо об'єкт класу TinyGPSPlus і визначаємо висновки, на яких підключений GPS-модуль. Модуль GPS підключений до контактів 4 і 5 (GPIO4 і GPIO5) NodeMCU. Для підтримки послідовного зв’язку на контактах 4 та 5 ми використовуємо бібліотеку “SoftwareSerial” для створення віртуального послідовного порту.
GPS TinyGPSPlus; // об’єкт TinyGPS ++ SoftwareSerial ss (4, 5); // Послідовне підключення до пристрою GPS.
Цей рядок коду вказує номер порту створюваного веб-сервера. Для HTTP-з'єднання номер порту за замовчуванням - 80.
Сервер WiFiServer (80);
Для створення веб-сервера за допомогою NodeMCU використовується згаданий нижче фрагмент коду. Після створення веб-сервера він друкує IP-адресу веб-сервера в послідовному моніторі. Пізніше ця IP-адреса використовується для доступу до веб-сервера в локальній мережі.
server.begin (); Serial.println ("Сервер запущений"); Serial.println (WiFi.localIP ()); // Роздрукувати IP-адресу
Далі ми повинні почати читати послідовні дані, надіслані з модуля GPS, і якщо в них немає помилок, ми повинні витягти з нього деталі розташування. Для вилучення деталей розташування ми використовуємо бібліотеку TinyGPSPlus . Ця частина коду виконує вищевказану роботу.
while (ss.available ()> 0) if (gps.encode (ss.read ()))
Якщо отриманий рядок не містить помилок, спочатку ми повинні перевірити, чи справжнє місце розташування чи ні. Якщо місцезнаходження дійсне, ми повинні витягти з нього широту та довготу. Потім він перетворюється у формат рядка для відображення його на веб-сторінці. Для виконання цього завдання ми використовуємо цей фрагмент коду.
if (gps .location.isValid ()) { lattitude = gps.location.lat (); lat_str = Рядок (широта, 6); довгота = gps.location.lng (); lng_str = Рядок (довгота, 6); }
Нам потрібно виконати ті самі дії, щоб вилучити дату та час.
якщо (gps.date.isValid ()) { date = gps.date.day (); місяць = gps.date.month (); рік = gps.date.year (); }
Щоб отримати час, нам потрібно дотримуватися тієї ж процедури, але GPS надає час у форматі UTC. Щоб перевести UTC в IST, нам потрібно додати зміщення + 5 годин 30 хвилин до UTC. Ця частина коду виконує перетворення з UTC на IST.
хвилина = (хвилина + 30); якщо (хвилина> 59) { хвилина = хвилина - 60; година = година + 1; } година = (година + 5); якщо (година> 23) година = година - 24;
Цей час у 24-годинному форматі. Для перетворення 24-годинного в 12-годинний формат використовується згаданий нижче код.
якщо (година> = 12) pm = 1; інакше pm = 0; година = година% 12;
У цій частині коду ми перевіряємо, чи підключений клієнт до веб-сервера. він чекає, поки клієнт буде підключений.
Клієнт WiFiClient = server.available (); if (! client) { return; }
Після підключення клієнта веб-сервер повинен надіслати відповідь клієнту. Веб-сторінка розроблена з використанням HTML. HTML-код веб-сторінки наведено в кінці цієї статті. Значення широти, довготи, дати та часу оновлюються після отримання даних від модуля GPS. У цій частині коду ми надсилаємо відповідь клієнту. Де 's' - це рядок, який містить HTML-код веб-сторінки та інформацію про місцезнаходження.
client.print (s);
HTML-код веб-сторінки:
GPS взаємодія з NodeMCU
Деталі місця
Широта | 12.9000 |
---|---|
Довгота | 77,5900 |
Дата | 22/06/18 |
Час | 07:12:12 |
Натисніть тут! Щоб перевірити розташування на картах Google.
Ось так виглядає веб-сторінка після того, як ми відкриваємо IP-адресу локального веб-сервера у веб-браузері.
Коли ви натискаєте на посилання " Натисніть тут ", воно відкриє місце на Картах Google, як показано нижче: