- Tarvittavat komponentit
- GPS-moduuli
- Tappi ulos STM32F103C8: sta
- Piirikaavio ja liitännät
- STM32F103C8: n ohjelmointi GPS-moduulin rajapinnalle
- Leveys- ja pituusasteiden etsiminen GPS: n ja STM32: n avulla
GPS tarkoittaa globaalia paikannusjärjestelmää ja sitä käytetään minkä tahansa maan sijainnin leveys- ja pituuspiirin tunnistamiseen tarkalla UTC-ajalla (Universal Time Coordinated). Tämä laite vastaanottaa satelliitilta jokaisen sekunnin koordinaatit, kellonajan ja päivämäärän. GPS tarjoaa suuren tarkkuuden ja tarjoaa myös muita tietoja sijaintikoordinaattien lisäksi.
Me kaikki tiedämme, että GPS on erittäin hyödyllinen laite ja sitä käytetään yleisesti matkapuhelimissa ja muissa kannettavissa laitteissa sijainnin seuraamiseen. Sillä on erittäin laaja valikoima sovelluksia kaikilla aloilla taksin soittamisesta kotona lentokoneiden korkeuden seuraamiseen. Tässä on joitain hyödyllisiä GPS-hankkeita, jotka olemme rakentaneet aiemmin:
- Ajoneuvojen seurantajärjestelmä
- GPS-kello
- Onnettomuuksien havaitsemisvaroitusjärjestelmä
- Raspberry Pi GPS -moduulin liitäntäopetus
- GPS-moduulin ja PIC-mikrokontrollerin yhdistäminen
Tässä tässä opetusohjelmassa liitämme GPS-moduulin STM32F103C8-mikrokontrolleriin paikannuskoordinaattien löytämiseksi ja näyttämiseksi 16x2 LCD-näytöllä.
Tarvittavat komponentit
- STM32F103C8-mikrokontrolleri
- GPS-moduuli
- 16x2 LCD-näyttö
- Leipälauta
- Johtojen liittäminen
GPS-moduuli
Se on GY-NEO6MV2 XM37-1612 GPS-moduuli. Tässä GPS-moduulissa on neljä nastaa + 5 V, GND, TXD ja RXD. Se kommunikoi sarjaliittimien avulla ja voidaan helposti liittää STM32F103C8: n sarjaporttiin.
GPS-moduuli lähettää tiedot NMEA-muodossa (katso alla oleva kuvakaappaus). NMEA-muoto koostuu useista lauseista, joissa tarvitsemme vain yhden lauseen. Tämä lause alkaa $ GPGGA: sta ja sisältää koordinaatit, ajan ja muuta hyödyllistä tietoa. Tätä GPGGA: ta kutsutaan globaalin paikannusjärjestelmän korjaustiedoksi. Lisätietoja GPS-tietojen ja niiden merkkijonojen lukemisesta on täällä.
Alla on yksi esimerkki $ GPGGA-merkkijonosta ja sen kuvaus:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0,9,510,4, M, 43,9, M,, * 47
$ GPGGA, HHMMSS.SSS, leveysaste, N, pituusaste, E, FQ, NOS, HDP, korkeus, M, korkeus, M`` tarkistussummatiedot
Mutta tässä tässä opetusohjelmassa käytämme TinyGPSPlus GPS -kirjastoa, joka poimii kaikki tarvittavat tiedot NMEA-lauseesta, ja meidän on vain kirjoitettava yksinkertainen koodirivi saadaksesi leveys- ja pituusasteet, jotka näemme myöhemmin opetusohjelmassa.
Tappi ulos STM32F103C8: sta
STM32F103C8 (BLUE PILL) USART-sarjaliikenneportit näkyvät alla olevassa pin out -kuvassa. Nämä ovat sinivärisiä (PA9-TX1, PA10-RX1, PA2-TX2, PA3-RX2, PB10-TX3, PB11-RX3). Sillä on kolme tällaista viestintäkanavaa.
Piirikaavio ja liitännät
Piiriyhteydet GPS-moduulin ja STM32F103C8 välillä
GPS-moduuli |
STM32F103C8 |
RXD |
PA9 (TX1) |
TXD |
PA10 (RX1) |
+ 5 V |
+ 5 V |
GND |
GND |
Liitännät 16x2 LCD: n ja STM32F103C8: n välillä
LCD-nasta nro |
LCD-nastan nimi |
STM32-nastan nimi |
1 |
Maa (Gnd) |
Maa (G) |
2 |
VCC |
5 V |
3 |
VEE |
Tappi potentiometrin keskustasta |
4 |
Rekisteröinti Valitse (RS) |
PB11 |
5 |
Lue / kirjoita (RW) |
Maa (G) |
6 |
Ota käyttöön (EN) |
PB10 |
7 |
Databitti 0 (DB0) |
Ei yhteyttä (NC) |
8 |
Databitti 1 (DB1) |
Ei yhteyttä (NC) |
9 |
Databitti 2 (DB2) |
Ei yhteyttä (NC) |
10 |
Databitti 3 (DB3) |
Ei yhteyttä (NC) |
11 |
Databitti 4 (DB4) |
PB0 |
12 |
Databitti 5 (DB5) |
PB1 |
13 |
Databitti 6 (DB6) |
PC13 |
14 |
Databitti 7 (DB7) |
PC14 |
15 |
LED positiivinen |
5 V |
16 |
LED negatiivinen |
Maa (G) |
Koko asennus näyttää seuraavalta:
STM32F103C8: n ohjelmointi GPS-moduulin rajapinnalle
Täydellinen ohjelma paikannuksen löytämiseen GPS-moduulilla STM32: n avulla on tämän projektin lopussa. STM32F103C8 voidaan ohjelmoida Arduino IDE: llä yksinkertaisesti liittämällä se tietokoneeseen USB-portin kautta. Varmista, että poistat nastat TX ja RX koodia ladatessasi, ja liitä se lataamisen jälkeen.
Jotta GPS voidaan liittää STM32: een, meidän on ensin ladattava kirjasto GitHub-linkistä TinyGPSPlus. Kun olet ladannut kirjaston, se voidaan sisällyttää Arduino IDE -ohjelmaan valitsemalla Sketch -> Include Library -> Add.zip Library. Samaa kirjastoa voidaan käyttää GPS: n liittämiseen Arduinoon.
Joten sisällytä ensin tarvittavat kirjastotiedostot ja määritä nastat 16x2 LCD: lle:
#sisältää
Sitten luoda objektia gps luokan TinyGPSPlus.
TinyGPSPlus gps;
Seuraavaksi tyhjät asetukset -kohdassa , aloita sarjayhteys GPS-moduulin kanssa käyttämällä Serial1.begin (9600). Serial1: ää käytetään STM32F103C8: n Serial 1 -porttina (nastat-PA9, PA10).
Serial1.begin (9600);
Näytä sitten tervetuloviesti jonkin aikaa.
lcd-alku (16,2); lcd.print ("Piirin yhteenveto"); lcd.setCursor (0,1); lcd.print ("STM32 GPS: llä"); viive (4000); lcd.clear ();
Seuraavaksi tyhjässä silmukassa () vastaanotetaan leveys- ja pituusaste GPS: ltä ja tarkistamme, ovatko vastaanotetut tiedot kelvollisia , ja näytämme tietoja sarjavalvontalaitteessa ja LCD-näytössä.
Tarkistetaan, ovatko käytettävissä olevat sijaintitiedot voimassa
loc_valid = gps.location.isValid ();
Vastaanottaa leveysdatan
lat_val = gps.location.lat ();
Vastaanottaa pituusasteet
lng_val = gps.location.lng ();
Jos virheellisiä tietoja vastaanotetaan, se näyttää sarjassa "*****" ja nestekidenäytössä "odottaa".
if (! loc_valid) { lcd.print ("Odottaa"); Serial.print ("Leveysaste:"); Sarja.println ("*****"); Sarja.tulos ("Pituusaste:"); Sarja.println ("*****"); viive (4000); lcd.clear (); }
Jos kelvollisia tietoja vastaanotetaan, leveys- ja pituusaste näytetään sarjamoduulissa ja LCD-näytössä.
lcd.clear (); Serial.println ("GPS-LUKEMINEN:"); Serial.print ("Leveysaste:"); Serial.println (lat_val, 6); lcd.setCursor (0,0); lcd.print ("LAT:"); lcd.print (lat_val, 6); Sarja.tulos ("Pituusaste:"); Sarja.println (lng_val, 6); lcd.setCursor (0,1); lcd.print ("PITKÄ:"); lcd.print (lng_val, 6); viive (4000);
Seuraava toiminto antaa viiveen tietojen lukemiseen. Se etsii jatkuvasti tietoja sarjaportista.
staattinen void GPSDelay (allekirjoittamaton pitkä ms) { unsigned long start = millis (); tee { while (Serial1.available ()) gps.encode (Serial1.read ()); } while (millis () - start <ms); }
Leveys- ja pituusasteiden etsiminen GPS: n ja STM32: n avulla
Kun olet rakentanut asennuksen ja lähettänyt koodin, muista sijoittaa GPS-moduuli avoimelle alueelle signaalin vastaanottamiseksi nopeasti. Joskus signaalin vastaanottaminen kestää muutaman minuutin, joten odota hetki. LED alkaa vilkkua GPS-moduulissa, kun se alkaa vastaanottaa signaalia, ja sijaintikoordinaatit näkyvät LCD-näytöllä.
Voit tarkistaa sijainnin leveys- ja pituusaste Google Mapsin avulla. Mene vain Google maps -palveluun, kun GPS on päällä ja napsauta sinistä pistettä. Se näyttää osoitteen leveys- ja pituusasteella alla olevan kuvan mukaisesti
Koko koodi ja esittelyvideo on alla.