- Необходими компоненти
- GPS модул
- Закачете от STM32F103C8
- Електрическа схема и връзки
- Програмиране на STM32F103C8 за взаимодействие с GPS модул
- Намиране на географска ширина и дължина с GPS и STM32
GPS означава система за глобално позициониране и се използва за откриване на географската ширина и дължина на всяко местоположение на Земята, с точно UTC време (универсално координирано време). Това устройство получава координатите от спътника за всяка секунда, с час и дата. GPS предлага голяма точност и освен това предоставя други данни освен координатите на позицията.
Всички знаем, че GPS е много полезно устройство и много често се използва в мобилни телефони и други преносими устройства за проследяване на местоположението. Той има много широк спектър от приложения във всяка област, от извикване на таксито в дома ви за проследяване на надморската височина на самолетите. Ето някои полезни проекти, свързани с GPS, които изградихме по-рано:
- Система за проследяване на превозни средства
- GPS часовник
- Система за предупреждение за откриване на произшествия
- Урок за взаимодействие на модул за Raspberry Pi GPS
- Взаимодействие на GPS модул с PIC микроконтролер
Тук в този урок ще свържем GPS модул с микроконтролера STM32F103C8, за да намерим координатите на местоположението и да ги покажем на 16x2 LCD дисплей.
Необходими компоненти
- STM32F103C8 Микроконтролер
- GPS модул
- 16x2 LCD дисплей
- Макет
- Свързване на проводници
GPS модул
Това е GPS модул GY-NEO6MV2 XM37-1612. Този GPS модул има четири пина + 5V, 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
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) |
+ 5V |
+ 5V |
GND |
GND |
Връзки между 16x2 LCD и STM32F103C8
LCD щифт № |
Име на LCD щифт |
Име на щифта STM32 |
1 |
Земя (Gnd) |
Земя (G) |
2 |
VCC |
5V |
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 |
LED Положителен |
5V |
16. |
LED отрицателен |
Земя (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 LCD:
#include
След това създайте обект с име gps от класа TinyGPSPlus.
TinyGPSPlus gps;
След това в настройката за празнота започнете серийната комуникация с 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 и проверяваме дали получените данни са валидни или не и показваме информация в серийния монитор и LCD.
Проверка дали наличните данни за местоположението са валидни или не
loc_valid = gps.location.isValid ();
Получава данни за географската ширина
lat_val = gps.location.lat ();
Получава данни за географската дължина
lng_val = gps.location.lng ();
Ако са получени невалидни данни, той показва “*****” в серийния монитор и показва “чакане” на LCD.
if (! loc_valid) { lcd.print ("Waiting"); Serial.print ("Latitude:"); Serial.println ("*****"); Serial.print ("Географска дължина:"); Serial.println ("*****"); забавяне (4000); lcd.clear (); }
Ако са получени валидни данни, географската ширина и дължина се показват на серийния монитор, както и на LCD дисплея.
lcd.clear (); Serial.println ("GPS ЧЕТАНЕ:"); Serial.print ("Latitude:"); 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);
Следващата функция осигурява забавяне за четене на данните. Той продължава да търси данните на серийния порт.
static void GPSDelay (unsigned long ms) { unsigned long start = millis (); do { while (Serial1.available ()) gps.encode (Serial1.read ()); } while (millis () - старт <ms); }
Намиране на географска ширина и дължина с GPS и STM32
След изграждане на настройката и качване на кода, не забравяйте да поставите GPS модула на открито, за да получите бързо сигнала. Понякога получаването на сигнал отнема няколко минути, така че изчакайте известно време. Светодиодът ще започне да мига в GPS модула, когато започне да получава сигнал и координатите на местоположението ще се показват на LCD дисплея.
Можете да проверите географската ширина и дължина на местоположението, като използвате Google Maps. Просто отидете на Google maps с включен GPS и кликнете върху синята точка. Той ще покаже адреса с географската ширина и дължина, както е показано на снимката по-долу
Най- пълен код и демонстрация видеото е дадена по-долу.