- Componente necesare
- Modul GPS
- Fixează din STM32F103C8
- Diagrama circuitului și conexiunile
- Programarea STM32F103C8 pentru interfațarea modulului GPS
- Găsirea latitudinii și longitudinii cu GPS și STM32
GPS înseamnă Sistem de poziționare globală și este utilizat pentru a detecta latitudinea și longitudinea oricărei locații de pe Pământ, cu ora UTC exactă (timpul universal coordonat). Acest dispozitiv primește coordonatele de la satelit pentru fiecare secundă, cu ora și data. GPS oferă o precizie excelentă și oferă, de asemenea, alte date în afară de coordonatele poziției.
Știm cu toții că GPS-ul este un dispozitiv foarte util și foarte frecvent utilizat în telefoanele mobile și alte dispozitive portabile pentru urmărirea locației. Are o gamă foarte largă de aplicații în toate domeniile, de la apelarea taxiului de acasă la urmărirea altitudinii avioanelor. Iată câteva proiecte utile legate de GPS, pe care le-am construit anterior:
- Sistem de urmărire a vehiculelor
- Ceas GPS
- Sistem de alertă pentru detectarea accidentelor
- Tutorial de interfațare a modulului GPS Raspberry Pi
- Interfață modul GPS cu microcontroler PIC
Aici, în acest tutorial, vom interfața un modul GPS cu microcontroler STM32F103C8 pentru a găsi coordonatele de locație și a le afișa pe ecran LCD 16x2.
Componente necesare
- Microcontroler STM32F103C8
- Modul GPS
- Afișaj LCD 16x2
- Breadboard
- Conectarea firelor
Modul GPS
Este un modul GPS GY-NEO6MV2 XM37-1612. Acest modul GPS are patru pini + 5V, GND, TXD și RXD. Comunică utilizând pinii Serial și poate fi ușor interfațat cu portul Serial al STM32F103C8.
Modulul GPS trimite datele în format NMEA (vezi captura de ecran de mai jos). Formatul NMEA constă în mai multe propoziții, în care avem nevoie doar de o propoziție. Această propoziție începe de la $ GPGGA și conține coordonatele, timpul și alte informații utile. Acest GPGGA este menționat la datele de corecție ale sistemului de poziționare globală. Aflați mai multe despre citirea datelor GPS și șirurile sale aici.
Mai jos este un eșantion $ GPGGA String, împreună cu descrierea sa:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0.9,510.4, M, 43.9, M,, * 47
$ GPGGA, HHMMSS.SSS, latitudine, N, longitudine, E, FQ, NOS, HDP, altitudine, M, înălțime, M,, date de control
Dar aici, în acest tutorial, folosim o bibliotecă GPS TinyGPSPlus care extrage toate informațiile necesare din propoziția NMEA și trebuie doar să scriem o linie simplă de cod pentru a obține latitudinea și longitudinea, pe care le vom vedea mai târziu în tutorial.
Fixează din STM32F103C8
STM32F103C8 (BLUE PILL) Porturile de comunicații seriale USART sunt afișate în imaginea pin out de mai jos. Acestea sunt de culoare albastră având (PA9-TX1, PA10- RX1, PA2-TX2, PA3- RX2, PB10-TX3, PB11- RX3). Are trei astfel de canale de comunicare.
Diagrama circuitului și conexiunile
Conexiuni de circuit între modulul GPS și STM32F103C8
Modul GPS |
STM32F103C8 |
RXD |
PA9 (TX1) |
TXD |
PA10 (RX1) |
+ 5V |
+ 5V |
GND |
GND |
Conexiuni între 16x2 LCD și STM32F103C8
Pin LCD nr |
Numele pinului LCD |
Numele pinului STM32 |
1 |
Teren (Gnd) |
Teren (G) |
2 |
VCC |
5V |
3 |
VEE |
Pin din Centrul Potențiometrului |
4 |
Selectare înregistrare (RS) |
PB11 |
5 |
Citire / Scriere (RW) |
Teren (G) |
6 |
Activați (EN) |
PB10 |
7 |
Bit de date 0 (DB0) |
Fără conexiune (NC) |
8 |
Bit de date 1 (DB1) |
Fără conexiune (NC) |
9 |
Bit de date 2 (DB2) |
Fără conexiune (NC) |
10 |
Bit de date 3 (DB3) |
Fără conexiune (NC) |
11 |
Bit de date 4 (DB4) |
PB0 |
12 |
Bit de date 5 (DB5) |
PB1 |
13 |
Bit de date 6 (DB6) |
PC13 |
14 |
Bit de date 7 (DB7) |
PC14 |
15 |
LED pozitiv |
5V |
16 |
LED negativ |
Teren (G) |
Întreaga configurare va arăta ca mai jos:
Programarea STM32F103C8 pentru interfațarea modulului GPS
Programul complet pentru găsirea locației utilizând modulul GPS folosind STM32 este oferit la sfârșitul acestui proiect. STM32F103C8 poate fi programat folosind Arduino IDE prin simpla conectare la computer prin port USB. Asigurați-vă că eliminați pinii TX și RX în timp ce încărcați codul și conectați-l după încărcare.
Pentru a interfața GPS cu STM32, mai întâi trebuie să descărcăm o bibliotecă de pe link-ul GitHub TinyGPSPlus. După descărcarea bibliotecii, aceasta poate fi inclusă în IDE-ul Arduino de la Sketch -> Include Library -> Add.zip Library. Aceeași bibliotecă poate fi utilizată pentru interfața GPS cu Arduino.
Așadar, includeți mai întâi fișierele bibliotecii necesare și definiți pinii pentru LCD 16x2:
#include
Apoi creați un obiect numit GPS din clasa TinyGPSPlus.
TinyGPSPlus gps;
Apoi în configurarea nulă , începeți comunicarea serială cu modulul GPS utilizând Serial1.begin (9600). Serial1 este utilizat ca port Serial 1 (Pins-PA9, PA10) al STM32F103C8.
Serial1.begin (9600);
Apoi afișați mesajul de întâmpinare pentru o perioadă de timp.
lcd.inceput (16,2); lcd.print ("Circuit Digest"); lcd.setCursor (0,1); lcd.print („STM32 cu GPS”); întârziere (4000); lcd.clear ();
Apoi în bucla de gol (), primim latitudine și longitudine de pe GPS și verificăm dacă datele primite sunt valide sau nu și afișăm informații pe monitorul serial și pe LCD.
Verificarea dacă datele de locație disponibile sunt valabile sau nu
loc_valid = gps.location.isValid ();
Primește datele de latitudine
lat_val = gps.location.lat ();
Primește datele longitudinale
lng_val = gps.location.lng ();
Dacă se primesc date nevalide, se afișează „*****” pe monitorul serial și se afișează „în așteptare” pe ecranul LCD.
if (! loc_valid) { lcd.print ("În așteptare"); Serial.print ("Latitudine:"); Serial.println ("*****"); Serial.print ("Longitudine:"); Serial.println ("*****"); întârziere (4000); lcd.clear (); }
Dacă se primesc date valide, latitudinea și longitudinea sunt afișate pe monitorul serial, precum și pe ecranul LCD.
lcd.clear (); Serial.println ("GPS READING:"); Serial.print ("Latitudine:"); Serial.println (lat_val, 6); lcd.setCursor (0,0); lcd.print ("LAT:"); lcd.print (lat_val, 6); Serial.print ("Longitudine:"); Serial.println (lng_val, 6); lcd.setCursor (0,1); lcd.print ("LONG:"); lcd.print (lng_val, 6); întârziere (4000);
Funcția următoare oferă întârzierea citirii datelor. Continuă să caute datele de pe portul serial.
static void GPSDelay (ms long long unsigned) { unsigned long start = millis (); face { while (Serial1.available ()) gps.encode (Serial1.read ()); } while (millis () - start <ms); }
Găsirea latitudinii și longitudinii cu GPS și STM32
După construirea configurării și încărcarea codului, asigurați-vă că plasați modulul GPS în zona deschisă pentru a primi semnalul rapid. Uneori este nevoie de câteva minute pentru a primi semnal, așa că așteptați ceva timp. LED-ul va începe să clipească în modul GPS când începe să primească semnal și coordonatele de locație vor fi afișate pe afișajul LCD.
Puteți verifica latitudinea și longitudinea locației utilizând Google Maps. Accesați Google Maps cu GPS activat și faceți clic pe punctul albastru. Va afișa adresa cu latitudinea și longitudinea așa cum se arată în imaginea de mai jos
Cod și demonstrație completă video de este prezentată mai jos.