- Потрібні компоненти
- Модуль GPS
- Викріпіть з STM32F103C8
- Схема та з'єднання
- Програмування STM32F103C8 для взаємодії модуля GPS
- Пошук широти та довготи за допомогою GPS та STM32
GPS розшифровується як система глобального позиціонування і використовується для виявлення широти та довготи будь-якого місця на Землі з точним часом UTC (координований за універсальним часом). Цей пристрій отримує координати від супутника щосекунди з часом та датою. GPS пропонує велику точність, а також забезпечує інші дані, крім координат положення.
Ми всі знаємо, що GPS є дуже корисним пристроєм і дуже часто використовується в мобільних телефонах та інших портативних пристроях для відстеження місцезнаходження. Він має дуже широкий спектр застосувань у будь-якій галузі - від виклику таксі у вас вдома для відстеження висоти літаків. Ось декілька корисних проектів, пов'язаних з GPS, які ми створили раніше:
- Система відстеження транспортних засобів
- GPS годинник
- Система оповіщення про виявлення аварій
- Підручник із взаємодії модуля GPS Raspberry Pi
- Модуль взаємодії GPS з мікроконтролером PIC
У цьому посібнику ми будемо взаємодіяти модуль GPS з мікроконтролером STM32F103C8, щоб знайти координати місцезнаходження та відобразити їх на РК-дисплеї 16x2.
Потрібні компоненти
- Мікроконтролер STM32F103C8
- Модуль GPS
- РК-дисплей 16x2
- Макет
- Підключення проводів
Модуль GPS
Це модуль GPS GY-NEO6MV2 XM37-1612. Цей GPS-модуль має чотири контактні + 5 В, GND, TXD і RXD. Він взаємодіє за допомогою послідовних виводів і може бути легко пов'язаний із послідовним портом STM32F103C8.
Модуль GPS надсилає дані у форматі NMEA (див. Знімок екрана нижче). Формат NMEA складається з декількох речень, у яких нам потрібне лише одне речення. Це речення починається з $ GPGGA і містить координати, час та іншу корисну інформацію. Цей GPGGA називається даними виправлення глобальної системи позиціонування. Дізнайтеся більше про читання даних GPS та їх рядків тут.
Нижче наведено один зразок $ GPGGA String разом з його описом:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0.9,510.4, M, 43.9, M,, * 47
$ GPGGA, HHMMSS.SSS, широта, N, довгота, E, FQ, NOS, HDP, висота, M, висота, M,, дані контрольної суми
Але тут, у цьому підручнику, ми використовуємо GPS-бібліотеку TinyGPSPlus, яка витягує всю необхідну інформацію з речення NMEA, і нам просто потрібно написати простий рядок коду, щоб отримати широту та довготу, що ми побачимо далі в підручнику.
Викріпіть з STM32F103C8
Порти послідовного зв'язку STM32F103C8 (BLUE PILL) USART показані на зображенні, що виводиться нижче. Це сині кольори, що мають (PA9-TX1, PA10- RX1, PA2-TX2, PA3- RX2, PB10-TX3, PB11- RX3). Він має три таких канали зв'язку.
Схема та з'єднання
Схема з'єднання між модулем GPS та STM32F103C8
Модуль GPS |
STM32F103C8 |
RXD |
PA9 (TX1) |
TXD |
PA10 (RX1) |
+ 5В |
+ 5В |
GND |
GND |
З'єднання між РК-дисплеєм 16x2 та STM32F103C8
ЖК-номер |
Назва PIN-коду РК-дисплея |
Ім'я контакту STM32 |
1 |
Земля (Gnd) |
Земля (G) |
2 |
VCC |
5 В |
3 |
VEE |
Пін з центру потенціометра |
4 |
Вибір реєстру (RS) |
PB11 |
5 |
Читання / запис (RW) |
Земля (G) |
6 |
Увімкнути (EN) |
PB10 |
7 |
Біт даних 0 (DB0) |
Відсутнє підключення (NC) |
8 |
Біт даних 1 (DB1) |
Відсутнє підключення (NC) |
9 |
Біт даних 2 (DB2) |
Відсутнє підключення (NC) |
10 |
Біт даних 3 (DB3) |
Відсутнє підключення (NC) |
11 |
Біт даних 4 (DB4) |
PB0 |
12 |
Біт даних 5 (DB5) |
PB1 |
13 |
Біт даних 6 (DB6) |
ПК13 |
14 |
Біт даних 7 (DB7) |
ПК14 |
15 |
Позитивний світлодіод |
5 В |
16 |
Світлодіод негативний |
Земля (G) |
Вся установка буде виглядати нижче:
Програмування STM32F103C8 для взаємодії модуля GPS
Повна програма пошуку місцезнаходження за допомогою модуля GPS за допомогою STM32 подана в кінці цього проекту. STM32F103C8 можна запрограмувати за допомогою Arduino IDE, просто підключивши його до ПК через порт USB. Обов’язково видаліть шпильки TX і RX під час завантаження коду та під’єднайте його після завантаження.
Щоб підключити GPS до STM32, спочатку ми повинні завантажити бібліотеку за посиланням GitHub TinyGPSPlus. Після завантаження бібліотеки її можна включити в IDE Arduino за допомогою Sketch -> Include Library -> Add.zip Library. Цю ж бібліотеку можна використовувати для взаємодії GPS з Arduino.
Отже, спочатку включіть необхідні файли бібліотеки та визначте шпильки для РК-дисплею 16x2:
#включати
Потім створіть об’єкт з іменем gps класу TinyGPSPlus.
GPS TinyGPSPlus;
Потім у налаштуванні порожнечі розпочніть послідовний зв’язок з модулем GPS за допомогою Serial1.begin (9600). Serial1 використовується як порт Serial 1 (Pins-PA9, PA10) STM32F103C8.
Serial1.begin (9600);
Потім на деякий час відображати привітальне повідомлення.
lcd.begin (16,2); lcd.print ("Circuit Digest"); lcd.setCursor (0,1); lcd.print ("STM32 з GPS"); затримка (4000); lcd.clear ();
Далі у циклі void () ми отримуємо широту та довготу від GPS, перевіряємо, чи є дані достовірними чи ні, і відображаємо інформацію на послідовному моніторі та РК-дисплеї.
Перевірка, чи є доступними дані про місцезнаходження чи ні
loc_valid = gps.location.isValid ();
Отримує дані широти
lat_val = gps.location.lat ();
Отримує дані довготи
lng_val = gps.location.lng ();
Якщо отримані недійсні дані, на послідовному моніторі відображається "*****", а на РК-дисплеї відображається "очікування".
if (! loc_valid) { lcd.print ("Очікування"); Serial.print ("Широта:"); Serial.println ("*****"); Serial.print ("Довгота:"); Serial.println ("*****"); затримка (4000); lcd.clear (); }
У разі отримання дійсних даних широта та довгота відображаються на послідовному моніторі, а також на РК-дисплеї.
lcd.clear (); Serial.println ("GPS READING:"); Serial.print ("Широта:"); Serial.println (lat_val, 6); lcd.setCursor (0,0); lcd.print ("LAT:"); lcd.print (lat_val, 6); Serial.print ("Довгота:"); Serial.println (lng_val, 6); lcd.setCursor (0,1); lcd.print ("LONG:"); lcd.print (lng_val, 6); затримка (4000);
Наступна функція забезпечує затримку зчитування даних. Він продовжує шукати дані на послідовному порту.
статична порожнеча GPSDelay (непідписана довга мс) { непідписана довгий старт = міліс (); do { while (Serial1.available ()) gps.encode (Serial1.read ()); } while (millis () - старт <мс); }
Пошук широти та довготи за допомогою GPS та STM32
Після побудови налаштування та завантаження коду переконайтеся, що GPS-модуль розміщений на відкритому майданчику для швидкого прийому сигналу. Іноді для отримання сигналу потрібно кілька хвилин, тому почекайте деякий час. Світлодіод почне блимати в модулі GPS, коли почне приймати сигнал, а координати розташування відображатимуться на РК-дисплеї.
Ви можете перевірити широту та довготу місцезнаходження за допомогою карт Google. Просто перейдіть до карт Google із увімкненим GPS і натисніть синю крапку. На ній буде вказана адреса з широтою та довготою, як показано на малюнку нижче
Повний код і демонстраційне відео наводиться нижче.