Estendi ESP32 LoRa con GPS

La scheda ESP32-LoRa è molto adatta per essere espansa con un modulo GPS. Il cablaggio è molto semplice poiché è necessaria solo un'interfaccia seriale. I dati dal modulo GPS possono essere visualizzati sul display OLED integrato.

Abbiamo bisogno di un per costruire Nodemcu ESP32 con display OLED integrato  e a Modulo GPS con antenna attiva, Una batteria LiPo da 3,7 V adatta deve essere utilizzata per il funzionamento mobile.

Aggiungiamo anche un pulsante. Se si preme questo pulsante, il dispositivo dovrebbe ricordare le coordinate correnti e quindi visualizzare la distanza da questo punto e la direzione in cui è possibile trovare questo punto.

Oltre a questi dati, il dispositivo visualizza la data e l'ora esatte (UTC!). Questi includono latitudine e longitudine e velocità. Se un punto di riferimento è stato salvato premendo il pulsante, il dispositivo mostra ancora la distanza e la direzione verso questo punto di riferimento. Il numero di satelliti che è possibile ricevere è mostrato in basso a destra.

 

 

Sketch:

 

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

// Istanze per l'interfaccia seriale, il display e il modulo GPS
Serial hardware Serial1(1);
SSD1306  display(0x3C, 4, 15);
TinyGPS GPS;

// Pin per il pulsante
#define btn 23

// Abbreviazioni tedesche
stringa mese[12] {"Jan","Febbraio","Mar","Aprile","MAGGIO","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","December"};

// Variabili globali per la posizione corrente e per la posizione del punto di riferimento
galleggiante fslat = 0, fslon = 0, piatto, Flon;

// Loop in attesa che elabora i dati in entrata dal modulo GPS e verifica lo stato del pulsante
statica vuoto intelligente ritardo(unsigned lungo ms)
{   unsigned lungo inizio = millis();   fare    {     se (!Leggi digitale(btn)) {       fslat = piatto;        fslon = Flon;     }     mentre (Serial1.disponibile())       GPS.codificare(Serial1.leggere());   } mentre (millis() - inizio < ms);
}

// Mostra la data e l'ora del modulo GPS
vuoto display_date(TinyGPS &GPS, uint8_t x, uint8_t y){   int anno;   byte mese, giorno, ora, minuto, secondo, centesimi;   unsigned lungo età;   carbonizzare MNC[3];   stringa MNS;   // questa funzione di Tiny-GPS restituisce la data e l'ora divise in singole variabili   // L'ora è in formato UTC, il che significa che per CET è necessario aggiungere 1 o 2 ore con l'ora legale   GPS.crack_datetime(&anno, &mese, &giorno, &ora, &minuto, &secondo, &centesimi, &età);   se (età == TinyGPS::GPS_INVALID_AGE)     // Se il display mostra queste stelle, sai che il modulo GPS non ha ancora fornito dati validi     display.drawString(x,y,"********** ******** ");   altro   {     // Visualizza il mese come abbreviazione anziché come numero     carbonizzare sz[32];     MNS=mese[mese-1];     MNS.ToCharArray(MNC,4);     sprintf(sz, "% 02d.% 3s.% 02d% 02d:% 02d:% 02d",         giorno, MNC, anno, ora, minuto, secondo);     display.drawString(x,y,sz);     serial.println(sz);   }   intelligente ritardo(0);    }


vuoto configurazione() {   // ripristina display   pinMode(16,USCITA);   digitalWrite(16, LOW);    // imposta GPIO16 basso per ripristinare OLED   ritardo(50);    digitalWrite(16, ALTA); // mentre OLED è in esecuzione, è necessario impostare GPIO16 in alto      // avvia l'interfaccia seriale   serial.iniziare(115200);   serial.println("Start");   // Avvia l'interfaccia seriale per la comunicazione con il modulo GPS   // Non vengono utilizzati i pin IO standard 9 e 10 ma i pin IO 12 e 13   Serial1.iniziare(9600,SERIAL_8N1,12,13);   // Prepara il pin per il pulsante   pinMode(btn,INPUT_PULLUP);   // Inizializza il display   display.init();   // Visualizzazione orizzontale   display.flipScreenVertically();   display.chiaro();   // Parametri di testo   display.setTextAlignment(TEXT_ALIGN_LEFT);   display.setFont(ArialMT_Plain_10);   serial.println("Installazione eseguita");
}

vuoto cappio() {   galleggiante crs, Fspd;   uint8_t cx,cy;   uint32_t dist;   unsigned lungo età, data, tempo, caratteri = 0;   unsigned breve frasi = 0, mancato = 0;   carbonizzare tmp[32]; // Buffer per output   // Leggi la posizione dal modulo GPS   GPS.f_get_position(&piatto, &Flon, &età);   // Prepara l'annuncio   display.chiaro();   // Mostra data e ora   display_date(GPS,0,0);   // Mostra latitudine   sprintf(tmp,"Larghezza:% 10.6f °",piatto);   // Mostra longitudine   display.drawString(0,10,tmp);   sprintf(tmp,"Lunghezza:% 10.6f *",Flon);   // Mostra la velocità   display.drawString(0,20,tmp);   sprintf(tmp,"Velocità:% 6.2f km / h",GPS.f_speed_kmph());   display.drawString(0,30,tmp);   // Inoltre viene visualizzato solo se è stato impostato un punto di riferimento   se (fslon > 0) {     // Mostra la distanza dal punto di riferimento     dist = GPS.distance_between(piatto, Flon, fslat,fslon);     se (dist >1000) {       // maggiore di 1000 in km       sprintf(tmp,"Distanza:% 8.2f km",dist/1000);     } altro {       // altrimenti in m       sprintf(tmp,"Distanza:% 8d m",dist);     }     display.drawString(0,40,tmp);     // Direzione verso il punto di riferimento     sprintf(tmp, "Direzione:% 5s",GPS.cardinale(GPS.course_to(piatto, Flon, fslat, fslon)));     display.drawString(0,50,tmp);   }   // numero di satelliti   sprintf(tmp,"% 3d",GPS.satelliti());   display.drawString(100,50,tmp);       // Aggiorna il display   display.display();   // aspetta 5 secondi   intelligente ritardo(5000);
}

 

Divertiti a sperimentare

 

Esp-32Progetti per principianti

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

Post di blog consigliati

  1. Installa ESP32 ora dal gestore del consiglio di amministrazione
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - Programmazione ESP tramite WLAN