ESP32 LoRa mit GPS erweitern - AZ-Delivery

Le panneau ESP32-LoRa est très adapté pour s’étendre avec un module GPS. Le câblage est très simple, car une seule interface série est nécessaire. Le module GPS vn de données peut être affiché sur l’écran OLED intégré.

Pour être mis en place, nous avons besoin d’un Nodemcu ESP32 avec affichage OLED intégré et un Module GPS avec antenne active. Pour le fonctionnement mobile, vous devez utiliser une batterie LiPo appropriée avec 3,7 V.

En outre, nous ajoutons un bouton. Lorsque vous appuyez sur ce bouton, l’appareil doit se rappeler les coordonnées actuelles, puis ensuite afficher la distance à ce point ainsi que la direction du ciel dans lequel ce point doit être trouvé.

En plus de ces données, l’appareil affiche la date et l’heure exactes (UTC !). Il s’agit notamment des latitudes et des longitudes, ainsi que la vitesse. Si un point de référence a été enregistré en appuyant sur le bouton, l’appareil affiche toujours la distance et la direction de ce point de référence. Le nombre de satellites qui peuvent être reçus dans le coin inférieur droit est affiché.

 

 

dessin:

 

#include <Spi.H (en)>
#include <Lora.H (en)>
#include "SSD1306.h"
#include <TinyGPS (en).H (en)>
;
#include<Arduino.H (en)>

Instances pour l’interface sérielle, l’affichage et le module GPS
HardwareSerial (hardwareSerial) Série1(1);
SSD1306  Affichage(0x3c, 4, 15);
TinyGPS (en) Gps;

Épingle pour le bouton
#define Btn 23

Abréviations mensuelles allemandes
String Mois[12] {"Jan","Feb","Mrz","Avr","Mai","Jun","Jul","Aug","Sep","Oct","Nov","Déc"};

Variables globales pour la position actuelle et la position du point de référence
Flotteur fslat = 0, fslon fslon = 0, Plat, Flon;

File d’attente qui traite les données entrantes à partir du module GPS et vérifie l’état du bouton
Statique Vide smartdelay (smartdelay)(Unsigned Long Ms)
{   Unsigned Long Commencer = Millis();   Jeu    {     Si (!digitalRead (en)(Btn)) {       fslat = Plat;        fslon fslon = Flon;     }     Tandis que (Série1.Disponible())       Gps.Encoder(Série1.Lire());   } Tandis que (Millis() - Commencer < Ms);
}

Afficher la date et l’heure du module GPS
Vide display_date(TinyGPS (en) &Gps, uint8_t X, uint8_t Y (Y)){   Int Année;   Octet Mois, Jour, Heure, Minute, Deuxième, Centièmes;   Unsigned Long Âge;   Char Char Mnc[3];   String Mns;   cette fonction de Tiny-GPS retourne date et l’heure divisée en variables individuelles   l’heure est en format UTC, c’est-à-dire pour le TEC, vous devez ajouter 1 ou avec l’heure d’été 2 heures   Gps.crack_datetime(&Année, &Mois, &Jour, &Heure, &Minute, &Deuxième, &Centièmes, &Âge);   Si (Âge == TinyGPS (en)::GPS_INVALID_AGE)     si l’écran montre ces étoiles, vous savez que le module GPS n’a pas encore fourni de données valides     Affichage.Cordon(X,Y (Y),"********** ******** ");   Autre   {     Mois comme abréviation au lieu du numéro de spectacle     Char Char Sz[32];     Mns=Mois[Mois-1];     Mns.Tochararray Tochararray(Mnc,4);     Sprintf(Sz, "%02d.%3s.%0 2d %02d:%02d:%02d ",         Jour, Mnc, Année, Heure, Minute, Deuxième);     Affichage.Cordon(X,Y (Y),Sz);     Série.println(Sz);   }   smartdelay (smartdelay)(0);    }


Vide Configuration() {   Affichage réinitialisé   pinMode(16,Sortie);   digitalWrite (en)(16, Faible);    définir GPIO16 bas pour réinitialiser OLED   Retard(50);    digitalWrite (en)(16, Haute); pendant que l’OLED est en cours d’exécution, doit définir GPIO16 en haute      Démarrer l’interface sérielle   Série.Commencer(115200);   Série.println("Démarrer");   démarrer l’interface série pour communiquer avec le module GPS   les IO-pins standard 9 et 10 ne sont pas utilisés, mais les IO-pins 12 et 13   Série1.Commencer(9600,SERIAL_8N1,12,13);   Préparation de la broche pour les pushbuttons   pinMode(Btn,INPUT_PULLUP);   Affichage initialisé   Affichage.Init();   Affichage en mode paysage   Affichage.flipScreenVertically();   Affichage.Clair();   Paramètres de texte   Affichage.setTextAlignment(TEXT_ALIGN_LEFT);   Affichage.setFont(ArialMT_Plain_10);   Série.println("Configuration faite");
}

Vide Boucle() {   Flotteur Crs, fspd fspd;   uint8_t Cx,Cy;   uint32_t Dist;   Unsigned Long Âge, Date, Temps, Chars = 0;   Unsigned Court Phrases = 0, Échoué = 0;   Char Char Tmp[32]; Tampon pour la sortie   Lire la position du module GPS   Gps.f_get_position(&Plat, &Flon, &Âge);   Préparation pour l’affichage   Affichage.Clair();   Afficher la date et l’heure   display_date(Gps,0,0);   Afficher les latitudes   Sprintf(Tmp,"Largeur: %10.6f ",Plat);   Faire preuve de longitude   Affichage.Cordon(0,10,Tmp);   Sprintf(Tmp,"Durée: %10.6f",Flon);   Afficher la vitesse   Affichage.Cordon(0,20,Tmp);   Sprintf(Tmp,"Geschw.: %6.2f km/h",Gps.f_speed_kmph());   Affichage.Cordon(0,30,Tmp);   Plus d’affichages seulement si un point de référence a été défini   Si (fslon fslon > 0) {     Afficher la distance au point de référence     Dist = Gps.distance_between(Plat, Flon, fslat,fslon fslon);     Si (Dist >1000) {       plus de 1000 km       Sprintf(Tmp,"Distance: %8.2f km",Dist/1000);     } Autre {       autrement en m       Sprintf(Tmp,"Distance: %8d m",Dist);     }     Affichage.Cordon(0,40,Tmp);     Direction du point de référence     Sprintf(Tmp, "Direction: %5s",Gps.Cardinal(Gps.course_to(Plat, Flon, fslat, fslon fslon)));     Affichage.Cordon(0,50,Tmp);   }   Nombre de satellites   Sprintf(Tmp,"%3d",Gps.Satellites());   Affichage.Cordon(100,50,Tmp);       Mettre à jour l’affichage   Affichage.Affichage();   5 secondes à attendre   smartdelay (smartdelay)(5000);
}

 

Amusez-vous à expérimenter

 

Esp-32Projekte für anfänger

6 commentaires

Chris Pallasch

Chris Pallasch

@Stephan

Du hast recht und was Du beschreibst entspricht inetwa GBAS (Ground Based Augmentation System)
Den Referenzpunkt solltest Du von einem befreundeten Vermessungs-Ingenieur einmessen lassen.
Problem bleibt, dass, auch wenn Du am Referenzpunkt ideale Bedingungen (clear Sky) hast, dies beim
mobilen GPS nicht unbedingt der Fall ist (Häuserschlucht, Wald, Brücke,…), die Abweichung eine ganz
andere sein dürfte.

Stephan

Stephan

Hallo, das die GPS-Daten auf min. 2,5m genau (auf die Erdkugel bezogen) sindund das athmosphärische Einflüsse etc. das Signal verfälschen) ist mir bekannt.

Was ist aber….wenn ich einen (gleichen Typ’s) GPS-Empfänger als “Nullpunkt” definiere und den anderen Empfänger mobil ( lokal begrenzt – wir können Erdkrümmung etc. vernachlässigen)
nutze, wie genau sind dann die Differenzdaten x-y (z vernachlässigen wir)

Ich weiss – immer so blöde Fragen…

Danke

Stephan

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

Laisser un commentaire

Tous les commentaires sont modérés avant d'être publiés

Articles de blog recommandés

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery