Exporteer ESp32 LoRa met GPS

Het ESP32-LoRa-bord is zeer geschikt om te worden uitgebreid met een GPS-module. Bedrading is heel eenvoudig omdat alleen een seriële interface vereist is. De gegevens van de GPS-module kunnen worden weergegeven op het geïntegreerde OLED-display.

We hebben een nodig om te bouwen Nodemcu ESP32 met geïntegreerd OLED-display  en een GPS-module met actieve antenne. Voor mobiel gebruik moet een geschikte 3,7 V LiPo-batterij worden gebruikt.

We voegen ook een knop toe. Als u op deze knop drukt, moet het apparaat de huidige coördinaten onthouden en vervolgens de afstand tot dit punt weergeven en de richting waarin dit punt kan worden gevonden.

Naast deze gegevens geeft het apparaat de exacte datum en tijd weer (UTC!). Deze omvatten breedte- en lengtegraad evenals snelheid. Als een referentiepunt is opgeslagen door op de knop te drukken, toont het apparaat nog steeds de afstand en richting naar dit referentiepunt. Het aantal satellieten dat kan worden ontvangen, wordt rechtsonder weergegeven.

 

 

Schets:

 

# opnemen <SPI.h>
# opnemen <LoRa.h>
# opnemen "SSD1306.h"
# opnemen <TinyGPS.h>
;
# opnemen<Arduino.h>

// Exemplaren voor de seriële interface, het display en de GPS-module
HardwareSerial Serieel1(1);
SSD1306  weer te geven(0x3c, 4, 15);
TinyGPS gps;

// Pin voor de knop
#define btn 23

// Duitse afkortingen
String maand[12] {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Okt","Nov","Dec"};

// Globale variabelen voor de huidige positie en voor de positie van het referentiepunt
zweven fslat = 0, fslon = 0, plat, flon;

// Wachtlus die inkomende gegevens van de GPS-module verwerkt en de status van de knop controleert
statisch nietig smartdelay(niet ondertekend lang ms)
{   niet ondertekend lang start = millis();   doen    {     als (!digitaal lezen(btn)) {       fslat = plat;        fslon = flon;     }     terwijl (Serieel1.beschikbaar())       gps.coderen(Serieel1.lezen());   } terwijl (millis() - start < ms);
}

// Toon de datum en tijd van de GPS-module
nietig display_date(TinyGPS &gps, uint8_t x, uint8_t y){   int jaar;   byte maand, dag, uur, minuut, tweede, honderdsten;   niet ondertekend lang leeftijd;   char mnc[3];   String mns;   // deze functie van Tiny-GPS levert de datum en tijd op in afzonderlijke variabelen   // de tijd is in UTC-formaat, wat betekent dat u voor de CET 1 of 2 uur met zomertijd moet toevoegen   gps.crack_datetime(&jaar, &maand, &dag, &uur, &minuut, &tweede, &honderdsten, &leeftijd);   als (leeftijd == TinyGPS::GPS_INVALID_AGE)     // Als op het display deze sterren worden weergegeven, weet u dat de GPS-module nog geen geldige gegevens heeft geleverd     weer te geven.drawString(x,y,"********** ******** ");   anders   {     // Geef de maand weer als een afkorting in plaats van het nummer     char sz[32];     mns=maand[maand-1];     mns.toCharArray(mnc,4);     sprintf(sz, "% 02d.% 3s.% 02d% 02d:% 02d:% 02d",         dag, mnc, jaar, uur, minuut, tweede);     weer te geven.drawString(x,y,sz);     Serie.println(sz);   }   smartdelay(0);    }


nietig instellen() {   // display resetten   pinMode(16,UITGANG);   digitalWrite(16, LAAG);    // zet GPIO16 laag om OLED te resetten   vertraging(50);    digitalWrite(16, HOOG); // moet, terwijl OLED actief is, GPIO16 op hoog zetten      // start seriële interface   Serie.beginnen(115200);   Serie.println("Start");   // Start seriële interface voor communicatie met de GPS-module   // Niet de standaard IO-pennen 9 en 10 maar de IO-pennen 12 en 13 worden gebruikt   Serieel1.beginnen(9600,SERIAL_8N1,12,13);   // Pin voorbereiden voor knop   pinMode(btn,INPUT_PULLUP);   // Initialiseer het display   weer te geven.init();   // Liggende weergave   weer te geven.flipScreenVertically();   weer te geven.duidelijk();   // Tekstparameters   weer te geven.setTextAlignment(TEXT_ALIGN_LEFT);   weer te geven.setFont(ArialMT_Plain_10);   Serie.println("Installatie voltooid");
}

nietig lus() {   zweven crs, fspd;   uint8_t cx,cy;   uint32_t dist;   niet ondertekend lang leeftijd, date, tijd, tekens = 0;   niet ondertekend kort zinnen = 0, mislukt = 0;   char tmp[32]; // Buffer voor uitvoer   // Positie lezen van GPS-module   gps.f_get_position(&plat, &flon, &leeftijd);   // Bereid de advertentie voor   weer te geven.duidelijk();   // Datum en tijd weergeven   display_date(gps,0,0);   // Latitude weergeven   sprintf(tmp,"Breedte:% 10.6f °",plat);   // Lengtegraad tonen   weer te geven.drawString(0,10,tmp);   sprintf(tmp,"Lengte:% 10.6f *",flon);   // Toon snelheid   weer te geven.drawString(0,20,tmp);   sprintf(tmp,"Snelheid:% 6.2f km / h",gps.f_speed_kmph());   weer te geven.drawString(0,30,tmp);   // Wordt alleen weergegeven als een referentiepunt is ingesteld   als (fslon > 0) {     // Toon afstand tot het referentiepunt     dist = gps.afstand_tussen(plat, flon, fslat,fslon);     als (dist >1000) {       // meer dan 1000 km       sprintf(tmp,"Afstand:% 8,2f km",dist/1000);     } anders {       // anders in m       sprintf(tmp,"Afstand:% 8d m",dist);     }     weer te geven.drawString(0,40,tmp);     // Richting naar het referentiepunt     sprintf(tmp, "Richting:% 5s",gps.kardinaal(gps.natuurlijk(plat, flon, fslat, fslon)));     weer te geven.drawString(0,50,tmp);   }   // aantal satellieten   sprintf(tmp,"% 3d",gps.satellieten());   weer te geven.drawString(100,50,tmp);       // Update het display   weer te geven.weer te geven();   // wacht 5 seconden   smartdelay(5000);
}

 

Veel plezier met experimenteren

 

Esp-32Projekte für anfänger

4 Kommentare

Ulrich Engel

Ulrich Engel

Hallo, schönes Projekt.
Ich verstehe nur nicht ganz, warum ich hierfür einen ESP32LoRa benötige? Der LoRa-Chip kommt doch gar nicht zum Einsatz, oder?

LG Ulli

Andre Pankau

Andre Pankau

Hallo ,
Ich finde eure Projekte und E-Book´s (außer es steht nur der blink Sketch drin ) ganz gut .
Da merkt man das es nicht nur um verkauf geht sondern ums lernen.

ich habe mir ein stater Paket und ein Robot Car auf Amazon gekauft.
Danach habe ich hier bei euch ein NodeMCU mit esp8266 gekauft .
Da steuere ich momentan 2 Led´s mit Unity3d an.
Desweiteren habe ich ein d1 mini und darauf ein Webserver laufen (online).
Würde gern ein Gprs Tracker bauen der dann die Gprs Coordinaten an den Webserver sendet.
Könnt ihr mir da weiter helfen oder mal so ein Projekt machen. Hier kann man sie schon mal auslesen weis aber nicht ob sie auch vom Modul aus online gesendet werden können .
Mit freundlichen Grüssen
Andre P.

Moritz Spranger

Moritz Spranger

Sehr geehrter Kunde,
vielen Dank für Ihren Kommentar. Den Link habe ich soeben korrigiert. Die Beschreibung zur genauen Funktionsweise des Moduls finden Sie im dazugehörigen E-Book. Die verwendeten Bibliotheken finden Sie am Anfang des Sketches.
Für die Benutzung unserer Module ist es leider unumgänglich sich in das Thema einzuarbeiten, wir stehen Ihnen jedoch für Hilfe zur Verfügung, bitte wenden Sie sich hierzu an unseren Support.

Juergen Duerr

Juergen Duerr

Hallo,

die Idee und einfache Umsetzung ist ja super.
Nur wenn ich Anfange dies nachzubauen stelle ich schnell fest
- der Link auf das Modul geht ins leere
- es fehlt die Beschreibung welches Modul/ Board ich einstellen muss
- welche Bibliotheken von wo hier verwendet werden

Eventuell können Sie ja mal ALLE Infos auch in diese tollen Blogs stellen.
Es nervt langsam der Hinweis auch auf anderen Projektseiten, dass man alles im Internet finden kann. Ich will basteln und nicht im Netz stundenlang suchen.

MFG
J. Dürr

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert