- Необходимые компоненты
- Модуль GPS
- Пин из STM32F103C8
- Принципиальная схема и подключения
- Программирование STM32F103C8 для взаимодействия с GPS-модулем
- Определение широты и долготы с помощью GPS и STM32
GPS расшифровывается как Global Positioning System и используется для определения широты и долготы любого места на Земле с точным временем UTC (всемирное координированное время). Это устройство каждую секунду получает координаты со спутника с указанием времени и даты. GPS обеспечивает высокую точность, а также предоставляет другие данные помимо координат.
Все мы знаем, что GPS - очень полезное устройство и очень часто используется в мобильных телефонах и других портативных устройствах для отслеживания местоположения. Он имеет очень широкий спектр приложений во всех сферах - от вызова такси у вас дома до отслеживания высоты самолетов. Вот несколько полезных проектов, связанных с GPS, которые мы создали ранее:
- Система слежения за автомобилем
- GPS часы
- Система оповещения об обнаружении аварий
- Учебное пособие по взаимодействию с модулем Raspberry Pi GPS
- Взаимодействие модуля 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 с описанием:
$ 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, данные контрольной суммы
Но здесь, в этом руководстве, мы используем библиотеку TinyGPSPlus GPS, которая извлекает всю необходимую информацию из предложения NMEA, и нам просто нужно написать простую строку кода, чтобы получить широту и долготу, которые мы увидим позже в руководстве..
Пин из STM32F103C8
Порты последовательной связи USART STM32F103C8 (СИНЯЯ ПИЛЛЯ) показаны на изображении контактов ниже. Они окрашены в синий цвет и имеют (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
ЖК-вывод Нет |
Имя вывода ЖК-дисплея |
Имя контакта 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) |
PC13 |
14 |
Бит данных 7 (DB7) |
PC14 |
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.
TinyGPSPlus gps;
Затем в настройке void начните последовательную связь с модулем GPS, используя Serial1.begin (9600). Serial1 используется как порт Serial 1 (контакты-PA9, PA10) STM32F103C8.
Serial1.begin (9600);
Затем на некоторое время отобразите приветственное сообщение.
lcd.begin (16,2); lcd.print («Электронный дайджест»); 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 ();
Если получены недопустимые данные, на последовательном мониторе отображается «*****», а на ЖК-дисплее отображается «ожидание».
если (! loc_valid) { lcd.print ("Ожидание"); Serial.print ("Широта:"); Serial.println ("*****"); Serial.print ("Долгота:"); Serial.println ("*****"); задержка (4000); lcd.clear (); }
Если получены достоверные данные, широта и долгота отображаются на последовательном мониторе, а также на ЖК-дисплее.
lcd.clear (); Serial.println ("СЧИТЫВАНИЕ GPS:"); 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 ("ДЛИННЫЙ:"); lcd.print (lng_val, 6); задержка (4000);
Следующая функция обеспечивает задержку чтения данных. Он продолжает искать данные по последовательному порту.
static void GPSDelay (unsigned long ms) { unsigned long start = millis (); do { while (Serial1.available ()) gps.encode (Serial1.read ()); } while (millis () - начало <мс); }
Определение широты и долготы с помощью GPS и STM32
После создания настройки и загрузки кода убедитесь, что модуль GPS установлен на открытом месте, чтобы быстро получить сигнал. Иногда получение сигнала занимает несколько минут, поэтому подождите некоторое время. Светодиод в модуле GPS начнет мигать, когда он начнет получать сигнал, и координаты местоположения будут отображаться на ЖК-дисплее.
Вы можете проверить широту и долготу местоположения с помощью карт Google. Просто перейдите на карты Google с включенным GPS и щелкните синюю точку. Он покажет адрес с широтой и долготой, как показано на рисунке ниже.
Полный код и демонстрационное видео приводится ниже.