- Potrebne komponente:
- GPS modul:
- Pridobivanje lokacijskih podatkov iz GPS-a:
- Povezava GPS z ESP12E NodeMCU:
- Razlaga kode:
- Koda HTML za spletno stran:
GPS pomeni Global Positioning System in se uporablja za ugotavljanje lokacije, nadmorske višine, hitrosti, datuma in ure v UTC. V tem projektu bomo povezali GPS modul z NodeMCU. Z uporabo NodeMCU se ustvari preprost lokalni spletni strežnik, na tej strani pa se posodobijo podrobnosti o lokaciji. Posebnost tega projekta, ki temelji na IoT, je, da lahko lokacijo v Goolge Maps preverimo s klikom na povezavo na spletni strani. To spletno stran lahko tudi odprete in od kjer koli preverite lokacijo tako, da v modemu / usmerjevalniku aktivirate posredovanje vrat.
Potrebne komponente:
- NodeMCU ESP12
- GPS modul (uBlox Neo 6M GPS)
GPS modul:
Ublox Neo 6M je serijski GPS modul, ki prek serijske komunikacije zagotavlja podrobnosti o lokaciji. Ima štiri nožice.
pin |
Opis |
Vcc |
2,7 - 5V napajalnik |
Gnd |
Tla |
TXD |
Pošlji podatke |
RXD |
Prejemanje podatkov |
GPS modul Ublox neo 6M je združljiv s TTL in njegove specifikacije so navedene spodaj.
Čas zajemanja | Kul start: 27s, vroč start: 1s |
Komunikacijski protokol | NMEA |
Zaporedna komunikacija | 9600 bps, 8 podatkovnih bitov, 1 stop bit, brez parnosti in brez nadzora pretoka |
Obratovalni tok | 45mA |
Pridobivanje lokacijskih podatkov iz GPS-a:
Modul bo podatke prenašal v več nizih s hitrostjo 9600 Baud. Če uporabimo terminal UART s hitrostjo 9600 Baud, bomo videli podatke, ki jih prejme GPS.
Modul GPS pošilja podatke o položaju za sledenje v realnem času v obliki NMEA (glejte zgornji posnetek zaslona). Oblika NMEA je sestavljena iz več stavkov, v katerih so spodaj navedeni štirje pomembni stavki. Podrobnejše informacije o stavku NMEA in njegovi obliki podatkov najdete tukaj.
- $ GPGGA: podatki o popravkih sistema za globalno določanje položaja
- $ GPGSV: na ogled sateliti GPS
- $ GPGSA: GPS DOP in aktivni sateliti
- $ GPRMC: Priporočeni minimalni specifični podatki GPS / tranzita
Več o podatkih GPS in nizih NMEA lahko preberete tukaj.
To so podatki, ki jih GPS prejme, ko je povezan s hitrostjo 9600 baudov.
GPRMC, 141848,00, A, 2237,63306, N, 08820,86316, E, 0,553,, 100418,,, A * 73 $ GPVTG,, T,, M, 0,553, N, 1,024, K, A * 27 $ GPGGA, 141848,00, 2237.63306, N, 08820.86316, E, 1,03,2.56,1.9, M, -54,2, M,, * 74 $ GPGSA, A, 2,06,02,05,,,,,,,,,, 2,75, 2,56,1,00 * 02 $ GPGSV, 1,1,04,02,59,316,30,05,43,188,25,06,44,022,23,25,03,324, * 76 $ GPGLL, 2237,63306, N, 08820,86316, E, 141848,00, A, A * 65
Ko za sledenje katere koli lokacije uporabljamo modul GPS , potrebujemo le koordinate in to lahko najdemo v nizu $ GPGGA. V programih se večinoma uporablja samo niz $ GPGGA (Global Positioning System Fix Data), drugi nizi pa so prezrti.
$ GPGGA, 141848,00, 2237,63306, N, 08820,86316, E, 1,03,2,56,1,9, M, -54,2, M,, * 74
Kaj pomeni ta vrstica?
Pomen te vrstice je:
1. Niz se vedno začne z znakom "$"
2. GPGGA je kratica za Global Positioning System Fix Data
3. "," Vejica označuje ločitev med dvema vrednostma
4. 141848,00: GMT čas kot 14 (h): 18 (min): 48 (sek): 00 (ms)
5. 2237,63306, N: zemljepisna širina 22 (stopinja) 37 (minute) 63306 (sek) sever
6. 08820.86316, E: Zemljepisna dolžina 088 (stopinja) 20 (minute) 86316 (sek) vzhod
7. 1: Popravi količino 0 = neveljavni podatki, 1 = veljavni podatki, 2 = popravek DGPS
8. 03: Število trenutno gledanih satelitov.
9. 1.0: HDOP
10. 2,56, M: Nadmorska višina (višina nadmorske višine v metrih)
11. 1.9, M: Višina geoidov
12. * 74: kontrolna vsota
Torej potrebujemo številki 5 in 6, da zberemo informacije o lokaciji modula ali o tem, kje se nahaja. V tem projektu smo uporabili knjižnico GPS, ki ponuja nekatere funkcije za pridobivanje zemljepisne širine in dolžine, tako da nam tega ni treba skrbeti.
Pred tem smo že vmesniki GPS z drugimi mikrokrmilniki:
· Kako uporabljati GPS z Arduinom
· Vadnica za povezovanje modulov Raspberry Pi GPS
· Povezava modula GPS z mikrokrmilnikom PIC
· Sledite vozilu v Google Zemljevidih z uporabo Arduino, ESP8266 in GPS
Povezava GPS z ESP12E NodeMCU:
NodeMCU je razvojna plošča, ki temelji na ESP8266. Kot jedro obdelave ima ESP-12E. To je 32-bitni MCU. Ima 14 GPIO nožic, enokanalni 10-bitni integrirani ADC. Podpira UART, I2C, SPI komunikacijo. Združljiv je s 3,3 V, ne more obvladati 5 V Če ste novi v NodeMCU, preberite naš Uvod v NodeMCU ESP-12.
Za povezave med NodeMCU in GPS modul, kot je prikazano spodaj.
NodeMCU |
GPS modul |
3V3 |
Vcc |
GND |
GND |
D1 (GPIO5) |
RX |
D2 (GPIO4) |
TX |
Spodaj je diagram vezja povezovanja GPS z NodeMCU:
Ko se vklopi, modul GPS traja nekaj časa, da zajame podrobnosti o lokaciji. NodeMCU zažene spletni strežnik in čaka, da se odjemalec poveže s spletnim strežnikom. Ko je odjemalec povezan s spletnim strežnikom, NodeMCU pošlje podatke o lokaciji povezanemu odjemalcu. Podrobnosti o lokaciji so prikazane na preprosti spletni strani, zasnovani z uporabo HTML-ja.
Koraki:
- Priključite vezje, kot je prikazano na shemi.
- Kodo naložite po spremembi poverilnic za Wi-Fi.
- Odprite serijski monitor v Arduino IDE in si zapišite IP naslov spletnega strežnika.
- Odprite kateri koli brskalnik in vnesite naslov IP spletnega strežnika.
- Prikazali bodo podrobnosti o lokaciji, datum, čas in povezavo do Google Maps.
Razlaga kode:
Celotno izvorno kodo za ta projekt je navedena na koncu tega članka. Koda je razdeljena na majhne pomembne koščke in je razložena spodaj.
Za povezavo modula GPS z NodeMCU moramo vključiti ustrezne datoteke glav. Datoteke z glavo lahko prenesete s spodnjih povezav.
Drobna knjižnica GPS ++:
#include
Če želite ustvariti spletni strežnik z uporabo NodeMCU, mora biti povezan z omrežjem Wi-Fi. V tem delu kode ponujamo poverilnice Wi-Fi za brezžično omrežje, na katerega se NodeMCU poveže. Zamenjajte to s poverilnicami za Wi-Fi.
const char * ssid = " shashi "; const char * geslo = "12345678";
V tem delu kode ustvarjamo objekt razreda TinyGPSPlus in definiramo nožice, na katere je povezan GPS modul. Modul GPS je povezan z zatiči 4 in 5 (GPIO4 in GPIO5) NodeMCU. Za podporo serijski komunikaciji na pin 4 in 5 uporabljamo knjižnico »SoftwareSerial« za ustvarjanje navideznih serijskih vrat.
TinyGPSPlus gps; // objekt TinyGPS ++ SoftwareSerial ss (4, 5); // Zaporedna povezava z napravo GPS.
Ta vrstica kode označuje številko vrat ustvarjenega spletnega strežnika. Za povezavo je privzeta številka vrat 80.
Strežnik WiFiServer (80);
Za ustvarjanje spletnega strežnika z uporabo NodeMCU se uporablja spodnji del kode. Po ustvarjanju spletnega strežnika natisne naslov IP spletnega strežnika v Serial Monitor. Kasneje se ta naslov IP uporablja za dostop do spletnega strežnika v lokalnem omrežju.
server.begin (); Serial.println ("Strežnik se je začel"); Serial.println (WiFi.localIP ()); // Natisni naslov IP
Nato moramo začeti brati serijske podatke, poslane iz modula GPS, in če gre za napake, moramo iz njih pridobiti podrobnosti o lokaciji. Za pridobivanje podrobnosti o lokaciji uporabljamo knjižnico TinyGPSPlus . Ta del kode deluje zgoraj.
while (ss.available ()> 0) if (gps.encode (ss.read ()))
Če je prejeti niz brez napak, moramo najprej preveriti, ali je lokacija veljavna ali ne. Če je lokacija veljavna, moramo iz nje izvleči zemljepisno širino in dolžino. Nato se pretvori v format niza za prikaz na spletni strani. Za izpolnitev te naloge uporabljamo ta del kode.
if (gps .location.isValid ()) { latitude = gps.location.lat (); lat_str = Niz (zemljepisna širina, 6); zemljepisna dolžina = gps.location.lng (); lng_str = Niz (zemljepisna dolžina, 6); }
Za pridobivanje datuma in ure moramo slediti enakim korakom.
if (gps.date.isValid ()) { date = gps.date.day (); mesec = gps.date.month (); leto = gps.date.year (); }
Če želimo izvleči čas, moramo slediti istemu postopku, vendar GPS zagotavlja, da je čas v formatu UTC. Za pretvorbo UTC-ja v IST moramo UTC-ju dodati odmik + 5 ur in 30 minut. Ta del kode pretvori iz UTC v IST.
minuta = (minuta + 30); if (minuta> 59) { minuta = minuta - 60; ura = ura + 1; } ura = (ura + 5); če (ura> 23) ura = ura - 24;
Tokrat je v 24-urni obliki. Za pretvorbo 24-urne v 12-urno obliko se uporablja spodnja koda.
če (ura> = 12) pm = 1; sicer pm = 0; ura = ura% 12;
V tem delu kode preverjamo, ali je odjemalec povezan s spletnim strežnikom. počaka, da se stranka poveže.
Odjemalec WiFiClient = server.available (); if (! client) { return; }
Ko je odjemalec povezan, mora spletni strežnik stranki poslati odgovor. Spletna stran je oblikovana z uporabo HTML-ja. Koda HTML za spletno stran je podana na koncu tega članka. Vrednosti zemljepisne širine, dolžine, datuma in časa se posodobijo po prejemu podatkov iz modula GPS. V tem delu kode pošiljamo odgovor stranki. Kjer je 's' niz, ki vsebuje kodo HTML za podrobnosti o spletni strani in lokaciji.
client.print (s);
Koda HTML za spletno stran:
GPS povezovanje z NodeMCU
Podrobnosti o lokaciji
Zemljepisna širina | 12.9000 |
---|---|
Zemljepisna dolžina | 77,5900 |
Datum | 22. 6. 18 |
Čas | 07:12:12 |
Klikni tukaj! Če želite preveriti lokacijo v Google Maps.
Tako izgleda spletna stran, ko v spletnem brskalniku odpremo IP lokalnega spletnega strežnika.
Ko kliknete povezavo » Kliknite tukaj «, se v Google Zemljevidih odpre lokacija, kot je spodaj: