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
6 commentaires
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
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
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
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
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
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