- Požadované komponenty
- GPS modul
- Kolík z STM32F103C8
- Schéma zapojení a zapojení
- Programování STM32F103C8 pro rozhraní GPS modulu
- Hledání zeměpisné šířky a délky pomocí GPS a STM32
GPS znamená Global Positioning System a používá se k detekci zeměpisné šířky a délky jakéhokoli místa na Zemi s přesným časem UTC (Universal Time Coordinated). Toto zařízení přijímá souřadnice ze satelitu každou sekundu s časem a datem. GPS nabízí velkou přesnost a kromě souřadnic polohy poskytuje i další data.
Všichni víme, že GPS je velmi užitečné zařízení a velmi často se používá v mobilních telefonech a jiných přenosných zařízeních pro sledování polohy. Má velmi širokou škálu aplikací v každé oblasti, od volání taxíku u vás doma až po sledování nadmořské výšky letadel. Zde je několik užitečných projektů souvisejících s GPS, které jsme vytvořili dříve:
- Systém sledování vozidel
- GPS hodiny
- Varovný systém detekce nehod
- Výukový program pro propojení GPS modulu Raspberry Pi
- Propojovací modul GPS s mikrokontrolérem PIC
Tady v tomto tutoriálu budeme propojovat modul GPS s mikrokontrolérem STM32F103C8, abychom našli souřadnice polohy a zobrazili je na LCD displeji 16x2.
Požadované komponenty
- Mikrokontrolér STM32F103C8
- GPS modul
- 16x2 LCD displej
- Nepájivá deska
- Připojení vodičů
GPS modul
Je to GPS modul GY-NEO6MV2 XM37-1612. Tento modul GPS má čtyři piny + 5 V, GND, TXD a RXD. Komunikuje pomocí sériových pinů a lze jej snadno propojit se sériovým portem STM32F103C8.
GPS modul odesílá data ve formátu NMEA (viz screenshot níže). Formát NMEA se skládá z několika vět, ve kterých potřebujeme pouze jednu větu. Tato věta začíná od $ GPGGA a obsahuje souřadnice, čas a další užitečné informace. Toto GPGGA se označuje jako opravná data globálního pozičního systému. Další informace o čtení dat GPS a jejich řetězcích naleznete zde.
Níže je uveden jeden ukázkový řetězec $ GPGGA spolu s jeho popisem:
$ GPGGA, 104534 000 7791,0381, N, 06727,4434, E, 1,08,0,9 510,4, M, 43,9, M,, * 47
$ GPGGA, HHMMSS.SSS, zeměpisná šířka, N, zeměpisná délka, E, FQ, NOS, HDP, nadmořská výška, M, výška, M,, data kontrolního součtu
Ale tady v tomto tutoriálu používáme TinyGPSPlus GPS knihovnu, která extrahuje všechny požadované informace z věty NMEA, a pro získání zeměpisné šířky a délky stačí napsat jednoduchý řádek kódu, který uvidíme dále v tutoriálu.
Kolík z STM32F103C8
STM32F103C8 (BLUE PILL) Sériové komunikační porty USART jsou zobrazeny na obrázku níže. Jedná se o modře zbarvené mající (PA9-TX1, PA10-RX1, PA2-TX2, PA3-RX2, PB10-TX3, PB11-RX3). Má tři takové komunikační kanály.
Schéma zapojení a zapojení
Propojení obvodu mezi modulem GPS a STM32F103C8
GPS modul |
STM32F103C8 |
RXD |
PA9 (TX1) |
TXD |
PA10 (RX1) |
+ 5V |
+ 5V |
GND |
GND |
Připojení mezi 16x2 LCD a STM32F103C8
Číslo PIN LCD |
Název PINu LCD |
Název PIN STM32 |
1 |
Ground (GND) |
Zem (G) |
2 |
VCC |
5V |
3 |
VEE |
Kolík ze středu potenciometru |
4 |
Výběr rejstříku (RS) |
PB11 |
5 |
Čtení / zápis (RW) |
Zem (G) |
6 |
Povolit (EN) |
PB10 |
7 |
Datový bit 0 (DB0) |
Žádné připojení (NC) |
8 |
Datový bit 1 (DB1) |
Žádné připojení (NC) |
9 |
Datový bit 2 (DB2) |
Žádné připojení (NC) |
10 |
Datový bit 3 (DB3) |
Žádné připojení (NC) |
11 |
Datový bit 4 (DB4) |
PB0 |
12 |
Datový bit 5 (DB5) |
PB1 |
13 |
Datový bit 6 (DB6) |
PC13 |
14 |
Datový bit 7 (DB7) |
PC14 |
15 |
Pozitivní LED |
5V |
16 |
LED negativní |
Zem (G) |
Celé nastavení bude vypadat níže:
Programování STM32F103C8 pro rozhraní GPS modulu
Na konci tohoto projektu je uveden kompletní program pro vyhledávání polohy pomocí GPS modulu pomocí STM32. STM32F103C8 lze programovat pomocí Arduino IDE jednoduchým připojením k PC přes USB port. Při nahrávání kódu odstraňte kolíky TX a RX a po nahrání jej připojte.
Abychom mohli propojit GPS s STM32, nejdříve si musíme stáhnout knihovnu z odkazu GitHub TinyGPSPlus. Po stažení knihovny ji lze zahrnout do IDE Arduino pomocí Sketch -> Include Library -> Add.zip Library. Stejnou knihovnu lze použít k propojení GPS s Arduino.
Nejprve tedy zahrňte potřebné soubory knihovny a definujte piny pro 16x2 LCD:
#zahrnout
Poté vytvořte objekt s názvem gps třídy TinyGPSPlus.
TinyGPSPlus gps;
Dále v nastavení neplatnosti začněte sériovou komunikaci s modulem GPS pomocí Serial1.begin (9600). Serial1 se používá jako port Serial 1 (Pins-PA9, PA10) na STM32F103C8.
Serial1.begin (9600);
Poté nějakou dobu zobrazte uvítací zprávu.
lcd.begin (16,2); lcd.print ("Přehled okruhů"); lcd.setCursor (0,1); lcd.print („STM32 s GPS“); zpoždění (4000); lcd.clear ();
Dále ve smyčce void () obdržíme zeměpisnou šířku a délku z GPS a zkontrolujeme, zda jsou přijatá data platná nebo ne, a zobrazíme informace na sériovém monitoru a LCD.
Kontrola, zda jsou dostupné údaje o poloze platné nebo ne
loc_valid = gps.location.isValid ();
Přijímá data zeměpisné šířky
lat_val = gps.location.lat ();
Přijímá data zeměpisné délky
lng_val = gps.location.lng ();
Pokud jsou přijata neplatná data, zobrazí se „sériový monitor“ a „čekající“ na LCD.
if (! loc_valid) { lcd.print ("Čekání"); Serial.print ("Latitude:"); Serial.println ("*****"); Serial.print ("Zeměpisná délka:"); Serial.println ("*****"); zpoždění (4000); lcd.clear (); }
Pokud jsou přijata platná data, zeměpisná šířka a délka se zobrazí na sériovém monitoru i na LCD displeji.
lcd.clear (); Serial.println ("GPS ČTENÍ:"); Serial.print ("Latitude:"); Serial.println (lat_val, 6); lcd.setCursor (0,0); lcd.print ("LAT:"); lcd.print (lat_val, 6); Serial.print ("Zeměpisná délka:"); Serial.println (lng_val, 6); lcd.setCursor (0,1); lcd.print ("LONG:"); lcd.print (lng_val, 6); zpoždění (4000);
Následující funkce poskytuje zpoždění načtení dat. Stále hledá data na sériovém portu.
static void GPSDelay (bez znaménka dlouhý ms) { bez znaménka dlouhý start = millis (); do { while (Serial1.available ()) gps.encode (Serial1.read ()); } while (millis () - start <ms); }
Hledání zeměpisné šířky a délky pomocí GPS a STM32
Po sestavení nastavení a nahrání kódu nezapomeňte umístit modul GPS do volného prostoru, abyste mohli rychle přijímat signál. Někdy příjem signálu trvá několik minut, takže nějakou dobu počkejte. LED začne v modulu GPS blikat, jakmile začne přijímat signál, a na LCD displeji se zobrazí souřadnice polohy.
Zeměpisnou šířku a délku polohy můžete ověřit pomocí map Google. Stačí přejít na mapy Google se zapnutým GPS a kliknout na modrou tečku. Zobrazí adresu se zeměpisnou šířkou a délkou, jak je znázorněno na obrázku níže
Kompletní kód a demonstrační videa je uveden níže.