- Componenten vereist
- GPS-module
- Pin uit STM32F103C8
- Schakelschema en aansluitingen
- Programmering STM32F103C8 voor GPS-module-interface
- Breedtegraad en lengtegraad zoeken met GPS en STM32
GPS staat voor Global Positioning System en wordt gebruikt om de lengte- en breedtegraad van elke locatie op aarde te detecteren, met de exacte UTC-tijd (Universal Time Coordinated). Dit apparaat ontvangt voor elke seconde de coördinaten van de satelliet, met tijd en datum. GPS biedt een grote nauwkeurigheid en biedt naast positiecoördinaten ook andere gegevens.
We weten allemaal dat gps een erg handig apparaat is en heel vaak wordt gebruikt in mobiele telefoons en andere draagbare apparaten om de locatie te volgen. Het heeft een zeer breed scala aan toepassingen op elk gebied, van het bellen met de taxi bij u thuis om de hoogte van vliegtuigen te volgen. Hier zijn enkele nuttige GPS-gerelateerde projecten die we eerder hebben gebouwd:
- Voertuigvolgsysteem
- GPS-klok
- Waarschuwingssysteem voor ongevaldetectie
- Raspberry Pi GPS-module Interfacing-zelfstudie
- GPS-module koppelen met PIC-microcontroller
Hier in deze tutorial zullen we een GPS-module koppelen aan de STM32F103C8-microcontroller om de locatiecoördinaten te vinden en deze weer te geven op een 16x2 LCD-scherm.
Componenten vereist
- STM32F103C8 Microcontroller
- GPS-module
- 16x2 LCD-scherm
- Breadboard
- Verbindingsdraden
GPS-module
Het is een GY-NEO6MV2 XM37-1612 GPS-module. Deze GPS-module heeft vier pins + 5V, GND, TXD en RXD. Het communiceert via de seriële pinnen en kan eenvoudig worden aangesloten op de seriële poort van de STM32F103C8.
GPS-module verzendt de gegevens in NMEA-formaat (zie onderstaande schermafbeelding). Het NMEA-formaat bestaat uit meerdere zinnen, waarin we maar één zin nodig hebben. Deze zin begint vanaf $ GPGGA en bevat de coördinaten, tijd en andere nuttige informatie. Deze GPGGA wordt verwezen naar Global Positioning System Fix Data. Lees hier meer over het lezen van GPS-gegevens en de bijbehorende snaren.
Hieronder staat een voorbeeld van een $ GPGGA-string, samen met de beschrijving:
$ GPGGA, 104534.000,7791,0381, N, 06727,4434, E, 1,08,0,9,510,4, M, 43,9, M`` * 47
$ GPGGA, HHMMSS.SSS, breedtegraad, N, lengtegraad, E, FQ, NOS, HDP, hoogte, M, hoogte, M`` checksum data
Maar hier in deze tutorial gebruiken we een TinyGPSPlus GPS-bibliotheek die alle vereiste informatie uit de NMEA-zin haalt, en we hoeven alleen maar een eenvoudige regel code te schrijven om de lengte- en breedtegraad te krijgen, die we later in de tutorial zullen zien.
Pin uit STM32F103C8
STM32F103C8 (BLUE PILL) USART seriële communicatiepoorten worden getoond in de pin-out afbeelding hieronder. Deze zijn blauw gekleurd met (PA9-TX1, PA10-RX1, PA2-TX2, PA3-RX2, PB10-TX3, PB11-RX3). Het heeft drie van dergelijke communicatiekanalen.
Schakelschema en aansluitingen
Circuitverbindingen tussen GPS-module en STM32F103C8
GPS-module |
STM32F103C8 |
RXD |
PA9 (TX1) |
TXD |
PA10 (RX1) |
+ 5V |
+ 5V |
GND |
GND |
Verbindingen tussen 16x2 LCD & STM32F103C8
LCD Pin Nr |
Naam LCD-pincode |
STM32 Pin-naam |
1 |
Grond (Gnd) |
Aarde (G) |
2 |
VCC |
5V |
3 |
VEE |
Pin van Center of Potentiometer |
4 |
Registreren Select (RS) |
PB11 |
5 |
Lezen / schrijven (RW) |
Aarde (G) |
6 |
Inschakelen (EN) |
PB10 |
7 |
Gegevensbit 0 (DB0) |
Geen verbinding (NC) |
8 |
Gegevensbit 1 (DB1) |
Geen verbinding (NC) |
9 |
Gegevensbit 2 (DB2) |
Geen verbinding (NC) |
10 |
Gegevensbit 3 (DB3) |
Geen verbinding (NC) |
11 |
Gegevensbit 4 (DB4) |
PB0 |
12 |
Gegevensbit 5 (DB5) |
PB1 |
13 |
Gegevensbit 6 (DB6) |
PC13 |
14 |
Gegevensbit 7 (DB7) |
PC14 |
15 |
LED Positief |
5V |
16 |
LED negatief |
Aarde (G) |
De hele opzet ziet er als volgt uit:
Programmering STM32F103C8 voor GPS-module-interface
Het complete programma voor het vinden van een locatie met behulp van de GPS-module met STM32 wordt aan het einde van dit project gegeven. STM32F103C8 kan worden geprogrammeerd met Arduino IDE door hem eenvoudig via een USB-poort op de pc aan te sluiten. Zorg ervoor dat u de pinnen TX en RX verwijdert tijdens het uploaden van de code en sluit deze na het uploaden aan.
Om GPS met STM32 te verbinden, moeten we eerst een bibliotheek downloaden van de GitHub-link TinyGPSPlus. Na het downloaden van de bibliotheek, kan deze worden opgenomen in de Arduino IDE door Sketch -> Bibliotheek opnemen ->.zip-bibliotheek toevoegen. Dezelfde bibliotheek kan worden gebruikt om GPS met Arduino te verbinden.
Dus neem eerst de nodige bibliotheekbestanden op en definieer pinnen voor 16x2 LCD:
# omvatten
Maak vervolgens een object met de naam gps van de klasse TinyGPSPlus.
TinyGPSPlus gps;
Begin vervolgens in de lege configuratie met de seriële communicatie met de GPS-module met Serial1.begin (9600). Serial1 wordt gebruikt als de Serial 1-poort (Pins-PA9, PA10) van de STM32F103C8.
Serial1.begin (9600);
Geef vervolgens een tijdje een welkomstbericht weer.
lcd.begin (16,2); lcd.print ("Circuit Digest"); lcd.setCursor (0,1); lcd.print ("STM32 met GPS"); vertraging (4000); lcd.clear ();
Vervolgens ontvangen we in de lege lus () de lengte- en breedtegraad van de GPS en controleren of de ontvangen gegevens geldig zijn of niet en geven we informatie weer op de seriële monitor en het LCD-scherm.
Controleren of de beschikbare locatiegegevens geldig zijn of niet
loc_valid = gps.location.isValid ();
Ontvangt de breedtegraadgegevens
lat_val = gps.location.lat ();
Ontvangt de lengtegraadgegevens
lng_val = gps.location.lng ();
Als ongeldige gegevens worden ontvangen, wordt "*****" weergegeven op de seriële monitor en wordt "wachtend" weergegeven op het LCD-scherm.
if (! loc_valid) { lcd.print ("Wachten"); Serial.print ("Latitude:"); Serial.println ("*****"); Serial.print ("Lengtegraad:"); Serial.println ("*****"); vertraging (4000); lcd.clear (); }
Als geldige gegevens worden ontvangen, worden de lengte- en breedtegraad weergegeven op de seriële monitor en op het LCD-scherm.
lcd.clear (); Serial.println ("GPS READING:"); Serial.print ("Latitude:"); Serial.println (lat_val, 6); lcd.setCursor (0,0); lcd.print ("LAT:"); lcd.print (lat_val, 6); Serial.print ("Lengtegraad:"); Serial.println (lng_val, 6); lcd.setCursor (0,1); lcd.print ("LONG:"); lcd.print (lng_val, 6); vertraging (4000);
De volgende functie biedt de vertraging om de gegevens te lezen. Het blijft zoeken naar de gegevens op de seriële poort.
statische ongeldige GPSDelay (niet-ondertekende lange ms) { niet-ondertekende lange start = millis (); do { while (Serial1.available ()) gps.encode (Serial1.read ()); } while (millis () - start <ms); }
Breedtegraad en lengtegraad zoeken met GPS en STM32
Zorg ervoor dat u na het opbouwen van de installatie en het uploaden van de code de GPS-module in een open ruimte plaatst om het signaal snel te ontvangen. Soms duurt het een paar minuten voordat het signaal wordt ontvangen, dus wacht even. De LED begint te knipperen in de GPS-module wanneer deze signaal begint te ontvangen en de locatiecoördinaten worden weergegeven op het LCD-scherm.
U kunt de lengte- en breedtegraad van de locatie verifiëren met Google maps. Ga gewoon naar Google maps met GPS ingeschakeld en klik op de blauwe stip. Het toont het adres met de lengte- en breedtegraad zoals weergegeven in de onderstaande afbeelding
De volledige code en demonstratievideo worden hieronder gegeven.