- Components necessaris
- Mòdul GPS
- Fixa de STM32F103C8
- Diagrama de circuits i connexions
- Programació STM32F103C8 per a la interfície del mòdul GPS
- Cercar latitud i longitud amb GPS i STM32
GPS significa Sistema de Posicionament Global (Global Positioning System) i s’utilitza per detectar la latitud i la longitud de qualsevol ubicació de la Terra, amb hora UTC exacta (temps universal coordinat). Aquest dispositiu rep les coordenades del satèl·lit per cada segon, amb hora i data. El GPS ofereix una gran precisió i també proporciona altres dades a part de les coordenades de posició.
Tots sabem que el GPS és un dispositiu molt útil i molt utilitzat en telèfons mòbils i altres dispositius portàtils per fer un seguiment de la ubicació. Té una àmplia gamma d’aplicacions en tots els àmbits, des de trucar al taxi de casa fins a controlar l’altitud dels avions. Aquests són alguns projectes útils relacionats amb el GPS, que hem creat anteriorment:
- Sistema de seguiment de vehicles
- Rellotge GPS
- Sistema d'alerta de detecció d'accidents
- Tutorial sobre interfície del mòdul GPS Raspberry Pi
- Mòdul GPS d’interfície amb microcontrolador PIC
Aquí, en aquest tutorial, farem una interfície d’un mòdul GPS amb microcontrolador STM32F103C8 per trobar les coordenades d’ubicació i mostrar-les a la pantalla LCD de 16x2.
Components necessaris
- Microcontrolador STM32F103C8
- Mòdul GPS
- Pantalla LCD de 16x2
- Taula de pa
- Connexió de cables
Mòdul GPS
És un mòdul GPS GY-NEO6MV2 XM37-1612. Aquest mòdul GPS té quatre pins + 5V, GND, TXD i RXD. Es comunica mitjançant els pins Serial i es pot connectar fàcilment amb el port sèrie del STM32F103C8.

El mòdul GPS envia les dades en format NMEA (vegeu la captura de pantalla següent). El format NMEA consta de diverses frases, en què només necessitem una frase. Aquesta frase comença a partir de $ GPGGA i conté les coordenades, el temps i altra informació útil. Aquest GPGGA es refereix a dades de correcció del sistema de posicionament global. Obteniu més informació sobre la lectura de dades GPS i les seves cadenes aquí.
A continuació es mostra un exemple de cadena $ GPGGA, juntament amb la seva descripció:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0,9,510,4, M, 43,9, M,, * 47
$ GPGGA, HHMMSS.SSS, latitud, N, longitud, E, FQ, NOS, HDP, altitud, M, alçada, M,, dades de suma de verificació
Però aquí, en aquest tutorial, estem utilitzant una biblioteca GPS TinyGPSPlus que extreu tota la informació necessària de la frase NMEA i només necessitem escriure una línia de codi senzilla per obtenir la latitud i la longitud, que veurem més endavant al tutorial..
Fixa de STM32F103C8
Els ports de comunicació sèrie STM32F103C8 (BLUE PILL) de USART es mostren a la imatge de pin out següent. Són de color blau (PA9-TX1, PA10- RX1, PA2-TX2, PA3- RX2, PB10-TX3, PB11- RX3). Té tres canals de comunicació d’aquest tipus.

Diagrama de circuits i connexions

Connexions de circuits entre el mòdul GPS i el STM32F103C8
|
Mòdul GPS |
STM32F103C8 |
|
RXD |
PA9 (TX1) |
|
TXD |
PA10 (RX1) |
|
+ 5V |
+ 5V |
|
GND |
GND |
Connexions entre LCD 16x2 i STM32F103C8
|
Pin LCD núm |
Nom del pin LCD |
Nom del pin STM32 |
|
1 |
Terra (Gnd) |
Terra (G) |
|
2 |
VCC |
5V |
|
3 |
VEE |
Pin del centre del potenciòmetre |
|
4 |
Selecciona registre (RS) |
PB11 |
|
5 |
Lectura / Escriptura (RW) |
Terra (G) |
|
6 |
Activa (EN) |
PB10 |
|
7 |
Bit de dades 0 (DB0) |
Sense connexió (NC) |
|
8 |
Bit de dades 1 (DB1) |
Sense connexió (NC) |
|
9 |
Bit de dades 2 (DB2) |
Sense connexió (NC) |
|
10 |
Bit de dades 3 (DB3) |
Sense connexió (NC) |
|
11 |
Bit de dades 4 (DB4) |
PB0 |
|
12 |
Bit de dades 5 (DB5) |
PB1 |
|
13 |
Bit de dades 6 (DB6) |
PC13 |
|
14 |
Bit de dades 7 (DB7) |
PC14 |
|
15 |
LED positiu |
5V |
|
16 |
LED negatiu |
Terra (G) |
Tota la configuració es mostrarà a continuació:

Programació STM32F103C8 per a la interfície del mòdul GPS
Al final d'aquest projecte es dóna un programa complet per trobar la ubicació mitjançant el mòdul GPS mitjançant STM32. El STM32F103C8 es pot programar mitjançant Arduino IDE simplement connectant-lo al PC mitjançant un port USB. Assegureu-vos d’eliminar els pins TX i RX mentre pengeu el codi i connecteu-los després de penjar-los.
Per connectar el GPS amb STM32, primer hem de descarregar una biblioteca des de l’enllaç GitHub TinyGPSPlus. Després de descarregar la biblioteca, es pot incloure a l'IDE d'Arduino a Sketch -> Inclou biblioteca -> Afegeix biblioteca.zip. La mateixa biblioteca es pot utilitzar per a la interfície GPS amb Arduino.
Per tant, primer incloeu els fitxers de biblioteca necessaris i definiu els pins per a LCD de 16x2:
#incloure
A continuació, creeu un objecte anomenat gps de la classe TinyGPSPlus.
Gps TinyGPSPlus;
A continuació, a la configuració del buit , comenceu la comunicació en sèrie amb el mòdul GPS mitjançant Serial1.begin (9600). Serial1 s'utilitza com a port de sèrie 1 (Pins-PA9, PA10) del STM32F103C8.
Serial1.begin (9600);
A continuació, mostreu el missatge de benvinguda durant algun temps.
lcd.begin (16,2); lcd.print ("Circuit Digest"); lcd.setCursor (0,1); lcd.print ("STM32 amb GPS"); retard (4000); lcd.clear ();
A continuació, al bucle buit (), rebem latitud i longitud del GPS i comprovem si les dades rebudes són vàlides o no i mostrem informació al monitor sèrie i a la pantalla LCD.
Comprovar si les dades d’ubicació disponibles són vàlides o no
loc_valid = gps.location.isValid ();
Rep les dades de latitud
lat_val = gps.location.lat ();
Rep les dades de longitud
lng_val = gps.location.lng ();
Si es reben dades no vàlides, es mostra "*****" al monitor sèrie i es mostra "esperant" a la pantalla LCD.
if (! loc_valid) { lcd.print ("Esperant"); Serial.print ("Latitud:"); Serial.println ("*****"); Serial.print ("Longitud:"); Serial.println ("*****"); retard (4000); lcd.clear (); }
Si es reben dades vàlides, la latitud i la longitud es mostren al monitor sèrie, així com a la pantalla LCD.
lcd.clear (); Serial.println ("LECTURA GPS:"); Serial.print ("Latitud:"); Serial.println (lat_val, 6); lcd.setCursor (0,0); lcd.print ("LAT:"); lcd.print (lat_val, 6); Serial.print ("Longitud:"); Serial.println (lng_val, 6); lcd.setCursor (0,1); lcd.print ("LONG:"); lcd.print (lng_val, 6); retard (4000);
La funció següent proporciona el retard per llegir les dades. Continua buscant les dades del port sèrie.
static void GPSDelay (ms llarg sense signar) { unsigned long start = millis (); fer { while (Serial1.available ()) gps.encode (Serial1.read ()); } while (millis () - inici <ms); }
Cercar latitud i longitud amb GPS i STM32
Després de crear la configuració i carregar el codi, assegureu-vos de col·locar el mòdul GPS a la zona oberta per rebre el senyal ràpidament. De vegades triga uns minuts a rebre el senyal, així que espereu una estona. El LED començarà a parpellejar al mòdul GPS quan comenci a rebre senyal i es mostraran les coordenades de la ubicació a la pantalla LCD.

Podeu verificar la latitud i la longitud de la ubicació mitjançant Google Maps. Simplement aneu a Google Maps amb el GPS activat i feu clic al punt blau. Es mostrarà l'adreça amb la latitud i la longitud com es mostra a la imatge següent

A continuació es mostra el codi complet i el vídeo de demostració.
