- Erforderliche Komponenten
- GPS-Modul
- Pin aus STM32F103C8
- Schaltplan und Anschlüsse
- Programmierung von STM32F103C8 für die GPS-Modulschnittstelle
- Breiten- und Längengrad mit GPS und STM32 ermitteln
GPS steht für Global Positioning System und wird verwendet, um den Breiten- und Längengrad eines beliebigen Ortes auf der Erde mit der genauen UTC-Zeit (Universal Time Coordinated) zu erfassen. Dieses Gerät empfängt die Koordinaten vom Satelliten für jede Sekunde mit Uhrzeit und Datum. GPS bietet eine hohe Genauigkeit und liefert neben Positionskoordinaten auch andere Daten.
Wir alle wissen, dass GPS ein sehr nützliches Gerät ist und sehr häufig in Mobiltelefonen und anderen tragbaren Geräten zur Ortung verwendet wird. Es hat ein sehr breites Anwendungsspektrum in allen Bereichen, angefangen beim Anrufen des Taxis bei Ihnen zu Hause bis hin zur Verfolgung der Flughöhe. Hier sind einige nützliche GPS-Projekte, die wir zuvor erstellt haben:
- Fahrzeugverfolgungssystem
- GPS-Uhr
- Unfallerkennungssystem
- Raspberry Pi GPS-Modul Schnittstellen-Tutorial
- Verbindung des GPS-Moduls mit dem PIC-Mikrocontroller
Hier in diesem Tutorial werden wir ein GPS-Modul mit dem STM32F103C8-Mikrocontroller verbinden, um die Standortkoordinaten zu finden und sie auf einem 16x2-LCD-Display anzuzeigen.
Erforderliche Komponenten
- STM32F103C8 Mikrocontroller
- GPS-Modul
- 16x2 LCD-Anzeige
- Steckbrett
- Kabel anschließen
GPS-Modul
Es ist ein GY-NEO6MV2 XM37-1612 GPS-Modul. Dieses GPS-Modul verfügt über vier Pin + 5V, GND, TXD und RXD. Es kommuniziert über die seriellen Pins und kann problemlos mit dem seriellen Anschluss des STM32F103C8 verbunden werden.
Das GPS-Modul sendet die Daten im NMEA-Format (siehe Abbildung unten). Das NMEA-Format besteht aus mehreren Sätzen, in denen wir nur einen Satz benötigen. Dieser Satz beginnt bei $ GPGGA und enthält die Koordinaten, die Zeit und andere nützliche Informationen. Dieses GPGGA wird als Fixdaten für das globale Positionierungssystem bezeichnet. Erfahren Sie hier mehr über das Lesen von GPS-Daten und deren Zeichenfolgen.
Unten finden Sie ein Beispiel für einen $ GPGGA-String mit seiner Beschreibung:
$ GPGGA, 104534.000.7791.0381, N, 06727.4434, E, 1.08.0.9.510.4, M, 43.9, M,, * 47
$ GPGGA, HHMMSS.SSS, Breite, N, Länge, E, FQ, NOS, HDP, Höhe, M, Höhe, M,, Prüfsummen-Daten
Aber hier in diesem Tutorial verwenden wir eine TinyGPSPlus GPS-Bibliothek, die alle erforderlichen Informationen aus dem NMEA-Satz extrahiert, und wir müssen nur eine einfache Codezeile schreiben, um den Breiten- und Längengrad zu erhalten, den wir später im Tutorial sehen werden.
Pin aus STM32F103C8
Die seriellen USART-Kommunikationsanschlüsse STM32F103C8 (BLUE PILL) sind in der Pinbelegung unten dargestellt. Diese sind blau gefärbt mit (PA9-TX1, PA10-RX1, PA2-TX2, PA3-RX2, PB10-TX3, PB11-RX3). Es hat drei solche Kommunikationskanäle.
Schaltplan und Anschlüsse
Schaltungsverbindungen zwischen GPS-Modul und STM32F103C8
GPS-Modul |
STM32F103C8 |
RXD |
PA9 (TX1) |
TXD |
PA10 (RX1) |
+ 5V |
+ 5V |
GND |
GND |
Verbindungen zwischen 16x2 LCD und STM32F103C8
LCD Pin Nr |
LCD-Pin-Name |
STM32 Pin Name |
1 |
Boden (Gnd) |
Boden (G) |
2 |
VCC |
5V |
3 |
VEE |
Pin von der Mitte des Potentiometers |
4 |
Register Select (RS) |
PB11 |
5 |
Lesen / Schreiben (RW) |
Boden (G) |
6 |
Aktivieren (EN) |
PB10 |
7 |
Datenbit 0 (DB0) |
Keine Verbindung (NC) |
8 |
Datenbit 1 (DB1) |
Keine Verbindung (NC) |
9 |
Datenbit 2 (DB2) |
Keine Verbindung (NC) |
10 |
Datenbit 3 (DB3) |
Keine Verbindung (NC) |
11 |
Datenbit 4 (DB4) |
PB0 |
12 |
Datenbit 5 (DB5) |
PB1 |
13 |
Datenbit 6 (DB6) |
PC13 |
14 |
Datenbit 7 (DB7) |
PC14 |
15 |
LED positiv |
5V |
16 |
LED negativ |
Boden (G) |
Das gesamte Setup sieht wie folgt aus:
Programmierung von STM32F103C8 für die GPS-Modulschnittstelle
Das vollständige Programm zum Auffinden des Standorts mithilfe des GPS-Moduls mit STM32 finden Sie am Ende dieses Projekts. STM32F103C8 kann mit Arduino IDE programmiert werden, indem es einfach über einen USB-Anschluss an den PC angeschlossen wird. Stellen Sie sicher, dass Sie beim Hochladen des Codes die Stifte TX und RX entfernen und nach dem Hochladen verbinden.
Um GPS mit STM32 zu verbinden, müssen wir zuerst eine Bibliothek vom GitHub-Link TinyGPSPlus herunterladen. Nach dem Herunterladen der Bibliothek kann sie über Sketch -> Include Library -> Add.zip Library in die Arduino IDE aufgenommen werden . Dieselbe Bibliothek kann verwendet werden, um GPS mit Arduino zu verbinden.
Fügen Sie also zuerst die erforderlichen Bibliotheksdateien hinzu und definieren Sie die Pins für das 16x2-LCD:
#einschließen
Erstellen Sie dann ein Objekt mit dem Namen gps der Klasse TinyGPSPlus.
TinyGPSPlus gps;
Beginnen Sie als nächstes im Void-Setup die serielle Kommunikation mit dem GPS-Modul unter Verwendung von Serial1.begin (9600). Serial1 wird als Serial 1-Port (Pins-PA9, PA10) des STM32F103C8 verwendet.
Serial1.begin (9600);
Zeigen Sie dann für einige Zeit eine Begrüßungsnachricht an.
lcd.begin (16,2); lcd.print ("Circuit Digest"); lcd.setCursor (0,1); lcd.print ("STM32 mit GPS"); Verzögerung (4000); lcd.clear ();
Als nächstes empfangen wir in der Void-Schleife () Längen- und Breitengrade vom GPS und prüfen, ob die empfangenen Daten gültig sind oder nicht, und zeigen Informationen auf dem seriellen Monitor und dem LCD an.
Überprüfen, ob die verfügbaren Standortdaten gültig sind oder nicht
loc_valid = gps.location.isValid ();
Empfängt die Breitengraddaten
lat_val = gps.location.lat ();
Empfängt die Längengraddaten
lng_val = gps.location.lng ();
Wenn ungültige Daten empfangen werden, wird auf dem seriellen Monitor "*****" und auf dem LCD "Warten" angezeigt.
if (! loc_valid) { lcd.print ("Waiting"); Serial.print ("Latitude:"); Serial.println ("*****"); Serial.print ("Longitude:"); Serial.println ("*****"); Verzögerung (4000); lcd.clear (); }}
Wenn gültige Daten empfangen werden, werden der Breiten- und Längengrad sowohl auf dem seriellen Monitor als auch auf dem LCD-Display angezeigt.
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 ("Longitude:"); Serial.println (lng_val, 6); lcd.setCursor (0,1); lcd.print ("LONG:"); lcd.print (lng_val, 6); Verzögerung (4000);
Die folgende Funktion liefert die Verzögerung zum Lesen der Daten. Es sucht ständig nach den Daten an der seriellen Schnittstelle.
statische Leere GPSDelay (vorzeichenlose lange ms) { vorzeichenloser langer Start = millis (); do { while (Serial1.available ()) gps.encode (Serial1.read ()); } while (millis () - start <ms); }}
Breiten- und Längengrad mit GPS und STM32 ermitteln
Stellen Sie nach dem Erstellen des Setups und dem Hochladen des Codes sicher, dass sich das GPS-Modul im offenen Bereich befindet, um das Signal schnell zu empfangen. Manchmal dauert es einige Minuten, bis das Signal empfangen wird. Warten Sie also einige Zeit. Die LED im GPS-Modul beginnt zu blinken, wenn das Signal empfangen wird, und die Standortkoordinaten werden auf dem LCD-Display angezeigt.
Sie können den Breiten- und Längengrad des Standorts mithilfe von Google Maps überprüfen. Gehen Sie einfach mit eingeschaltetem GPS zu Google Maps und klicken Sie auf den blauen Punkt. Es wird die Adresse mit dem Breiten- und Längengrad angezeigt, wie im Bild unten gezeigt
Der vollständige Code und das Demonstrationsvideo sind unten angegeben.