- Komponenter som krävs:
- GPS-modul:
- Hämta platsdata från GPS:
- Gränssnitt GPS med ESP12E NodeMCU:
- Kodförklaring:
- HTML-kod för webbsida:
GPS står för Global Positioning System och används för att ta reda på plats, höjd, hastighet, datum och tid i UTC. I det här projektet ska vi koppla en GPS-modul med NodeMCU. En enkel lokal webbserver skapas med hjälp av NodeMCU och platsinformationen uppdateras på serverns webbsida. Speciellt för detta IoT-baserade projekt är att vi kan kontrollera platsen i Goolge Maps genom att klicka på länken på webbsidan. Du kan också öppna den här webbsidan och kontrollera platsen var som helst genom att aktivera vidarebefordran av port i ditt modem / router.
Komponenter som krävs:
- NodeMCU ESP12
- GPS-modul (uBlox Neo 6M GPS)
GPS-modul:
Ublox Neo 6M är en seriell GPS-modul som ger platsinformation genom seriell kommunikation. Den har fyra stift.
stift |
Beskrivning |
Vcc |
2,7 - 5V strömförsörjning |
Gnd |
Jord |
TXD |
Överför data |
RXD |
Ta emot data |
Ublox neo 6M GPS-modul är TTL-kompatibel och dess specifikationer ges nedan.
Fångstid | Cool start: 27s, Hot start: 1s |
Kommunikationsprotokoll | NMEA |
Seriekommunikation | 9600bps, 8 databitar, 1 stoppbit, ingen paritet och ingen flödeskontroll |
Driftström | 45mA |
Hämta platsdata från GPS:
Modulen överför data i flera strängar till 9600 Baud Rate. Om vi använder en UART-terminal med 9600 Baud-hastighet, ser vi de data som mottas av GPS.
GPS-modulen skickar realtidsspårningspositionsdata i NMEA-format (se skärmdumpen ovan). NMEA-formatet består av flera meningar, där fyra viktiga meningar ges nedan. Mer information om NMEA-meningen och dess dataformat finns här.
- $ GPGGA: Fixeringsdata för globalt positioneringssystem
- $ GPGSV: GPS-satelliter i sikte
- $ GPGSA: GPS DOP och aktiva satelliter
- $ GPRMC: Rekommenderad minimispecifik GPS / transitdata
Läs mer om GPS-data och NMEA-strängar här.
Detta är den data som mottas av GPS när den är ansluten till 9600 baudhastighet.
$ 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
När vi använder GPS-modulen för att spåra vilken plats som helst behöver vi bara koordinater och vi kan hitta detta i $ GPGGA-sträng. Endast $ GPGGA (Global Positioning System Fix Data) -sträng används mest i program och andra strängar ignoreras.
$ GPGGA, 141848.00,2237.63306, N, 08820.86316, E, 1,03,2.56,1.9, M, -54,2, M,, * 74
Vad är meningen med den linjen?
Betydelsen av den linjen är: -
1. Sträng börjar alltid med ett "$" -tecken
2. GPGGA står för Global Positioning System Fix Data
3. “,” Komma indikerar separationen mellan två värden
4. 141848.00: GMT tid som 14 (hr): 18 (min): 48 (sek): 00 (ms)
5. 2237.63306, N: Latitud 22 (grad) 37 (minuter) 63306 (sek) Nord
6. 08820.86316, E: Longitud 088 (grad) 20 (minuter) 86316 (sek) Öst
7. 1: Fix kvantitet 0 = ogiltiga data, 1 = giltiga data, 2 = DGPS fix
8. 03: Antal satelliter som för närvarande ses.
9. 1.0: HDOP
10. 2.56, M: Höjd (höjd över havet i meter)
11. 1.9, M: Geoids höjd
12. * 74: kontrollsumma
Så vi behöver nr 5 och nr 6 för att samla information om modulens plats eller var den ligger. I det här projektet har vi använt ett GPS-bibliotek som tillhandahåller vissa funktioner för att extrahera latitud och longitud så att vi inte behöver oroa oss för det.
Vi har tidigare gränssnitt GPS med andra mikrokontroller:
· Hur man använder GPS med Arduino
· Raspberry Pi GPS-modul gränssnittshandledning
· Gränssnitt GPS-modul med PIC Microcontroller
· Spåra ett fordon på Google Maps med Arduino, ESP8266 & GPS
Gränssnitt GPS med ESP12E NodeMCU:
NodeMCU är ESP8266-baserat utvecklingskort. Den har ESP-12E som sin processkärna. Det är en 32-bitars MCU. Den har 14 GPIO-stift, enkanals 10-bitars integrerad ADC. Den stöder UART-, I2C-, SPI-kommunikation. Den är 3.3V kompatibel, den klarar inte 5V. Om du är ny på NodeMCU läs sedan Komma igång med NodeMCU ESP-12.
De anslutningar mellan NodeMCU och GPS-modulen är såsom visas nedan.
NodeMCU |
GPS-modul |
3V3 |
Vcc |
GND |
GND |
D1 (GPIO5) |
RX |
D2 (GPIO4) |
TX |
Nedan är kretsschemat för anslutning av GPS med NodeMCU:
GPS-modulen tar lite tid att fånga platsinformation när den är påslagen. NodeMCU startar webbserver och väntar på att en klient ska anslutas till webbservern. När klienten är ansluten till webbservern skickar NodeMCU platsinformation till den anslutna klienten. Platsuppgifterna visas på en enkel webbsida utformad med HTML.
Steg:
- Anslut kretsen som visas i schemat.
- Ladda upp koden efter att ha ändrat Wi-Fi-referenser.
- Öppna seriell bildskärm i Arduino IDE och anteckna webbserverns IP-adress.
- Öppna valfri webbläsare och ange webbserverns IP-adress.
- Den visar platsinformation, datum, tid och Google maps-länk.
Kodförklaring:
Den fullständiga källkoden för detta projekt ges i slutet av den här artikeln. Koden är uppdelad i små meningsfulla bitar och förklaras nedan.
För att koppla ihop GPS-modulen med NodeMCU måste vi inkludera lämpliga rubrikfiler. Rubrikfilerna kan laddas ner från länkarna nedan.
Litet GPS ++ -bibliotek:
#omfatta
För att skapa en webbserver med NodeMCU måste den vara ansluten till Wi-Fi-nätverket. I denna del av koden tillhandahåller vi Wi-Fi-referenser för det trådlösa nätverket som NodeMCU ansluts till. Ersätt detta med dina Wi-Fi-referenser.
const char * ssid = " shashi "; const char * password = "12345678";
I denna del av koden skapar vi ett objekt av klassen TinyGPSPlus och definierar stiften som GPS-modulen är ansluten till. GPS-modulen är ansluten till stift 4 och 5 (GPIO4 och GPIO5) på NodeMCU. För att stödja seriell kommunikation på stift 4 och 5 använder vi ”SoftwareSerial” -biblioteket för att skapa virtuell seriell port.
TinyGPSPlus GPS; // TinyGPS ++ -objektet SoftwareSerial ss (4, 5); // Den seriella anslutningen till GPS-enheten.
Denna rad i koden indikerar portnumret på den webbserver som skapas. För HTTP-anslutning är standardportnummer 80.
WiFiServer-server (80);
För att skapa webbserver med hjälp av NodeMCU används nedanstående kod. Efter att ha skapat webbservern skriver den ut IP-adressen till webservern i Serial Monitor. Senare används denna IP-adress för att komma åt webbservern inom det lokala nätverket.
server.begin (); Serial.println ("Server startad"); Serial.println (WiFi.localIP ()); // Skriv ut IP-adressen
Därefter måste vi börja läsa seriell data som skickas ut från GPS-modulen och om den är felfri måste vi extrahera platsinformation från den. För att extrahera platsinformation använder vi TinyGPSPlus- biblioteket. Denna del av koden fungerar ovan.
medan (ss.available ()> 0) if (gps.encode (ss.read ()))
Om den mottagna strängen är felfri måste vi först kontrollera om platsen är giltig eller inte. Om platsen är giltig måste vi extrahera latitud och longitud från den. Sedan konverteras den till strängformat för att visa den på webbsidan. För att utföra denna uppgift använder vi denna kod.
om (gps .location.isValid ()) { latitude = gps.location.lat (); lat_str = Sträng (latitud, 6); longitud = gps.location.lng (); lng_str = Sträng (longitud, 6); }
Vi måste följa samma steg för att extrahera datum och tid.
om (gps.date.isValid ()) { date = gps.date.day (); månad = gps.date.month (); år = gps.date.year (); }
För att extrahera tid måste vi följa samma procedur, men GPS ger tid är i UTC-format. För att konvertera UTC till IST måste vi lägga till en förskjutning på + 5 timmar och 30 minuter till UTC. Denna del av koden gör konverteringen från UTC till IST.
minut = (minut + 30); om (minut> 59) { minut = minut - 60; timme = timme + 1; } timme = (timme + 5); om (timme> 23) timme = timme - 24;
Den här tiden är i 24-timmarsformat. För att konvertera 24-timmars- till 12-timmarsformat används nedanstående kod.
om (timme> = 12) pm = 1; annars pm = 0; timme = timme% 12;
I denna del av koden kontrollerar vi om en klient är ansluten till webserver. det väntar tills en klient är ansluten.
WiFiClient-klient = server.available (); if (! client) { return; }
När en klient är ansluten måste webbservern skicka svar till klienten. Webbsidan är utformad med HTML. HTML-koden för webbsidan ges i slutet av den här artikeln. Latitud-, longitud-, datum- och tidsvärdena uppdateras när data har mottagits från GPS-modulen. I denna del av koden skickar vi svar till klienten. Where's är en sträng som innehåller HTML-kod för webbsidor och platsinformation.
client.print (s);
HTML-kod för webbsida:
GPS-gränssnitt med NodeMCU
Platsinformation
Latitud | 12,9000 |
---|---|
Longitud | 77,5900 |
Datum | 22/06/18 |
Tid | 07:12:12 |
Klicka här! För att kontrollera platsen i Google maps.
Så här ser webbsidan ut efter att vi öppnar IP: n för lokal webbserver i webbläsaren.
När du klickar på länken " Klicka här " öppnar den platsen i Google Maps som nedan: