- Wymagane składniki
- Moduł GPS
- Wypiąć STM32F103C8
- Schemat obwodu i połączenia
- Programowanie STM32F103C8 do współpracy z modułem GPS
- Znajdowanie szerokości i długości geograficznej za pomocą GPS i STM32
GPS oznacza Global Positioning System i służy do wykrywania szerokości i długości geograficznej dowolnego miejsca na Ziemi z dokładnym czasem UTC (Universal Time Coordinated). To urządzenie odbiera współrzędne z satelity co każdą sekundę, wraz z godziną i datą. GPS zapewnia dużą dokładność, a także dostarcza inne dane poza współrzędnymi pozycji.
Wszyscy wiemy, że GPS jest bardzo przydatnym urządzeniem i jest powszechnie używany w telefonach komórkowych i innych urządzeniach przenośnych do śledzenia lokalizacji. Ma bardzo szeroki zakres zastosowań w każdej dziedzinie, od wezwania taksówki do domu po śledzenie wysokości samolotów. Oto kilka przydatnych projektów związanych z GPS, które stworzyliśmy wcześniej:
- System śledzenia pojazdów
- Zegar GPS
- System ostrzegania o wykrywaniu wypadków
- Samouczek dotyczący interfejsu modułu GPS Raspberry Pi
- Łączenie modułu GPS z mikrokontrolerem PIC
W tym samouczku połączymy moduł GPS z mikrokontrolerem STM32F103C8, aby znaleźć współrzędne lokalizacji i wyświetlić je na wyświetlaczu LCD 16x2.
Wymagane składniki
- Mikrokontroler STM32F103C8
- Moduł GPS
- Wyświetlacz LCD 16x2
- Płytka prototypowa
- Podłączanie przewodów
Moduł GPS
Jest to moduł GPS GY-NEO6MV2 XM37-1612. Ten moduł GPS ma cztery styki + 5 V, GND, TXD i RXD. Komunikuje się za pomocą pinów szeregowych i może być łatwo połączony z portem szeregowym STM32F103C8.
Moduł GPS przesyła dane w formacie NMEA (patrz zrzut ekranu poniżej). Format NMEA składa się z kilku zdań, w których potrzebujemy tylko jednego zdania. To zdanie zaczyna się od $ GPGGA i zawiera współrzędne, czas i inne przydatne informacje. Ten GPGGA jest nazywany danymi poprawek globalnego systemu pozycjonowania. Dowiedz się więcej o odczytywaniu danych GPS i ich ciągów tutaj.
Poniżej znajduje się przykładowy ciąg $ GPGGA wraz z opisem:
$ GPGGA, 104534.000, 7791.0381, N, 06727.4434, E, 1,08,0,9,510,4, M, 43,9, M,, * 47
$ GPGGA, HHMMSS.SSS, szerokość, N, długość geograficzna, E, FQ, NOS, HDP, wysokość, M, wysokość, M,, dane sumy kontrolnej
Ale tutaj, w tym samouczku, używamy biblioteki TinyGPSPlus GPS, która wyodrębnia wszystkie wymagane informacje z zdania NMEA, i musimy tylko napisać prostą linię kodu, aby uzyskać szerokość i długość geograficzną, które zobaczymy w dalszej części samouczka.
Wypiąć STM32F103C8
Szeregowe porty komunikacyjne USART STM32F103C8 (BLUE PILL) pokazano na poniższym obrazku. Są to kolory w kolorze niebieskim (PA9-TX1, PA10-RX1, PA2-TX2, PA3-RX2, PB10-TX3, PB11-RX3). Posiada trzy takie kanały komunikacji.
Schemat obwodu i połączenia
Połączenia obwodów między modułem GPS a STM32F103C8
Moduł GPS |
STM32F103C8 |
RXD |
PA9 (TX1) |
TXD |
PA10 (RX1) |
+ 5V |
+ 5V |
GND |
GND |
Połączenia między wyświetlaczem LCD 16x2 i STM32F103C8
Nr styku wyświetlacza LCD |
Nazwa styku wyświetlacza LCD |
Nazwa styku STM32 |
1 |
Ziemia (Gnd) |
Mielone (G) |
2 |
VCC |
5V |
3 |
VEE |
Kołek ze środka potencjometru |
4 |
Zarejestruj Wybierz (RS) |
PB11 |
5 |
Odczyt / zapis (RW) |
Mielone (G) |
6 |
Włącz (EN) |
PB10 |
7 |
Bit danych 0 (DB0) |
Brak połączenia (NC) |
8 |
Bit danych 1 (DB1) |
Brak połączenia (NC) |
9 |
Bit danych 2 (DB2) |
Brak połączenia (NC) |
10 |
Bit danych 3 (DB3) |
Brak połączenia (NC) |
11 |
Bit danych 4 (DB4) |
PB0 |
12 |
Bit danych 5 (DB5) |
PB1 |
13 |
Bit danych 6 (DB6) |
PC13 |
14 |
Bit danych 7 (DB7) |
PC14 |
15 |
Dioda LED dodatnia |
5V |
16 |
Negatyw LED |
Mielone (G) |
Cała konfiguracja będzie wyglądać jak poniżej:
Programowanie STM32F103C8 do współpracy z modułem GPS
Kompletny program do wyszukiwania lokalizacji za pomocą modułu GPS za pomocą STM32 jest podany na końcu tego projektu. STM32F103C8 można zaprogramować za pomocą Arduino IDE, po prostu podłączając go do komputera przez port USB. Pamiętaj, aby usunąć piny TX i RX podczas wgrywania kodu i podłączyć go po wgraniu.
Aby połączyć GPS z STM32, najpierw musimy pobrać bibliotekę z łącza GitHub TinyGPSPlus. Po pobraniu biblioteki można ją włączyć do Arduino IDE poprzez Sketch -> Include Library -> Add.zip Library. Ta sama biblioteka może być używana do połączenia GPS z Arduino.
Więc najpierw dołącz niezbędne pliki biblioteki i zdefiniuj piny dla LCD 16x2:
#zawierać
Następnie utwórz obiekt o nazwie gps z klasy TinyGPSPlus.
TinyGPSPlus gps;
Następnie w pustej konfiguracji rozpocznij komunikację szeregową z modułem GPS za pomocą Serial1.begin (9600). Port Serial1 jest używany jako port szeregowy 1 (Pins-PA9, PA10) w STM32F103C8.
Serial1.begin (9600);
Następnie wyświetl na chwilę wiadomość powitalną.
lcd.begin (16,2); lcd.print ("Circuit Digest"); lcd.setCursor (0,1); lcd.print ("STM32 z GPS"); opóźnienie (4000); lcd.clear ();
Następnie w void loop () otrzymujemy szerokość i długość geograficzną z GPS i sprawdzamy, czy otrzymane dane są prawidłowe, czy nie, i wyświetlamy informacje na monitorze szeregowym i LCD.
Sprawdzanie, czy dostępne dane o lokalizacji są prawidłowe, czy nie
loc_valid = gps.location.isValid ();
Odbiera dane o szerokości geograficznej
lat_val = gps.location.lat ();
Odbiera dane o długości geograficznej
lng_val = gps.location.lng ();
Jeśli otrzymane zostaną nieprawidłowe dane, na monitorze szeregowym zostanie wyświetlony komunikat „*****”, a na wyświetlaczu LCD „oczekiwanie”.
if (! loc_valid) { lcd.print ("Oczekiwanie"); Serial.print („Szerokość:”); Serial.println ("*****"); Serial.print ("Długość:"); Serial.println ("*****"); opóźnienie (4000); lcd.clear (); }
Jeśli otrzymane zostaną prawidłowe dane, szerokość i długość geograficzna są wyświetlane na monitorze szeregowym, a także na wyświetlaczu LCD.
lcd.clear (); Serial.println ("ODCZYT GPS:"); Serial.print („Szerokość:”); Serial.println (lat_val, 6); lcd.setCursor (0,0); lcd.print ("LAT:"); lcd.print (lat_val, 6); Serial.print ("Długość:"); Serial.println (lng_val, 6); lcd.setCursor (0,1); lcd.print ("LONG:"); lcd.print (lng_val, 6); opóźnienie (4000);
Następująca funkcja zapewnia opóźnienie odczytu danych. Ciągle szuka danych na porcie szeregowym.
static void GPSDelay (unsigned long ms) { unsigned long start = millis (); do { while (Serial1.available ()) gps.encode (Serial1.read ()); } while (millis () - start <ms); }
Znajdowanie szerokości i długości geograficznej za pomocą GPS i STM32
Po utworzeniu konfiguracji i przesłaniu kodu upewnij się, że umieściłeś moduł GPS na otwartej przestrzeni, aby szybko odebrać sygnał. Czasami odebranie sygnału zajmuje kilka minut, więc poczekaj chwilę. Dioda LED zacznie migać w module GPS, gdy zacznie odbierać sygnał, a współrzędne lokalizacji zostaną wyświetlone na wyświetlaczu LCD.
Możesz sprawdzić szerokość i długość geograficzną lokalizacji za pomocą map Google. Po prostu przejdź do map Google z włączonym GPS i kliknij niebieską kropkę. Wyświetli adres z szerokością i długością geograficzną, jak pokazano na poniższym obrazku
Kod i demonstracja kompletny film zamieszczony jest poniżej.