INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
ESP32+SIM808 Gpsdaten auf Display und SMS
06.10.2020, 16:49
Beitrag #1
ESP32+SIM808 Gpsdaten auf Display und SMS
ESP32 und SIM808 mit Library: GSM-GPRS-GPS-Shield-GSMSHIELD gibt GPS Daten auf LCD Display und bei Anruf des SIM808 Moduls wird eine SMS mit Google-Link der Koordinaten an Anrufnummer gesendet.
Bei der org. Library wird ein nicht sehr vorteilhaftes NMEA Protokoll verwendet (keine Signalqualität, keine Anzahl der Satelitten). Ich habe darum die Library (GPS.cpp und GPS.h) geändert um auf das Protokoll $GPGGA zu kommen.
Sketch und Änderung der Lib.
Code:
Änderungen in Library  „GSM-GPRS-GPS-Shield-GSMSHIELD“ (org. Library) in: GPS.cpp und GPS.h um ein besseres NMEA-Protokoll zu erhalten.

GPS.cpp:

char GPSGSM::getPar(char *str_zeit, char *str_lat, char *str_lat1, char *str_lon, char *str_lon1, char *str_qual, char *str_satanz, char *str_abw , char *str_hoehe)
{
     char ret_val=0;
     char *p_char;
     char *p_char1;
     gsm.SimpleWriteln("AT+CGPSINF=2");
     gsm.WaitResp(5000, 100, "OK");
     if(gsm.IsStringReceived("OK"))
          ret_val=1;

     //Zeit
     p_char = strchr((char *)(gsm.comm_buf),',');
     p_char1 = p_char+1;  //we are on the first char of longitude
     p_char = strchr((char *)(p_char1), ',');
     if (p_char != NULL) {
          *p_char = 0;
     }
     strcpy(str_zeit, (char *)(p_char1));

     // Breite
     p_char++;
     p_char1 = strchr((char *)(p_char), ',');
     if (p_char1 != NULL) {
          *p_char1 = 0;
     }
     strcpy(str_lat, (char *)(p_char));

     // N S
     p_char1++;
     p_char = strchr((char *)(p_char1), ',');
     if (p_char != NULL) {
          *p_char = 0;
     }
     strcpy(str_lat1, (char *)(p_char1));

     // Länge
     p_char++;
     p_char1 = strchr((char *)(p_char), ',');
     if (p_char1 != NULL) {
          *p_char1 = 0;
     }
     strcpy(str_lon, (char *)(p_char));

      // E W
     p_char1++;
     p_char = strchr((char *)(p_char1), ',');
     if (p_char != NULL) {
          *p_char = 0;
     }
     strcpy(str_lon1, (char *)(p_char1));

     // Qualität
     p_char++;
     p_char1 = strchr((char *)(p_char), ',');
     if (p_char1 != NULL) {
          *p_char1 = 0;
     }
     strcpy(str_qual, (char *)(p_char));

      // Sat Anz
     p_char1++;
     p_char = strchr((char *)(p_char1), ',');
     if (p_char != NULL) {
          *p_char = 0;
     }
     strcpy(str_satanz, (char *)(p_char1));

     // horiz. Abweichung
     p_char++;
     p_char1 = strchr((char *)(p_char), ',');
     if (p_char1 != NULL) {
          *p_char1 = 0;
     }
     strcpy(str_abw, (char *)(p_char));
    
     // Höhe
     p_char1++;
     p_char = strchr((char *)(p_char1), ',');
     if (p_char != NULL) {
          *p_char = 0;
     }
     strcpy(str_hoehe, (char *)(p_char1));



     return ret_val;
}

alles Andere bleibt!


GPS.h:

//char getPar(char *str_long, char *str_lat, char *str_alt, char *str_time, char *speed); //org Zeile
     char getPar(char *str_zeit, char *str_lat, char *str_lat1, char *str_lon, char *str_lon1, char *str_qual, char *str_satanz, char *str_abw , char *hoehe);

Nur diese Zeile ändern!

Protokoll 2 ist jetzt :
+CGPSINF: 2,083020.000,0050.9143,N,00010.2075,E,1,10,0.90,255.6,M,47.8,M,,  
$GPGGA,Zeit,Breite,N,Länge,E,Qualität,Anz Sat,Abweichung,Höhe,Einheit Meter, geo sep, Einheit M,Alter d. Daten,Referenz*Prüfsumme

Sketch:

//ESP32 und SIM808

#include "SIM900.h"
#include <SoftwareSerial.h>
#include "gps.h"
#include <LiquidCrystal_I2C.h>
#include "sms.h"
#include "call.h"

//Ändern der Pinbelegung in GSM.cpp. Zeile 27 u. 28 TX=16 RX=4
//Pin 17 vom ESP auf Pin9 von SIM808 für Power und Reset
//Änderung der Pinbelegung in GSM.h Zeile 45 und 46 für Power und Reset beides auf 17 gesetzt
//Änderung in GPS.cpp und GPS.h nach Anleitung um besseres NMEA-Protokoll zu bekommen

GPSGSM gps;

char lo[15]; //Länge
char lo1[5]; //E W
char la[15];  //Breite
char la1[5];  // N S
char qua[5];   //Qualität
char time1[20];  //Zeit
char satan[5];   //Anz Sat
char abwei[15];  //Abweichung
char hoe[10];    //Höhe

char stat;
char inSerial[20];
boolean started = false;
String googlelink;

CallGSM call;
SMSGSM sms;

char number[20];
byte st=0;
char ausgang[160];

LiquidCrystal_I2C lcd(0x27,20,4);  //LCD initialisieren

void setup()   //......................................................................
{
  //Serial connection.
  
  lcd.init();                 //LCD initialisieren
  lcd.setBacklight(HIGH);     //LCD Hintergrund beleuchtung an
  
  Serial.begin(9600);
  Serial.println("GSM Shield testing.");

  //SIM808 startet und testet die Baudrate und schaltet ein, wenn ausgeschaltet
  if (gsm.begin(2400)) {
    Serial.println("\nstatus=READY");
    gsm.forceON();  //Power ein
    started = true;
  } else Serial.println("\nstatus=Leerlauf");

  if (started) {
    //GPS attach
    if (gps.attachGPS())  //GPS eingeschaltet
      Serial.println("status=GPSREADY");
    else Serial.println("status=GPS ERROR");

    delay(10000); //Time for fixing
    stat = gps.getStat(); //GPS Qualität
    if (stat == 1)
      Serial.println("NOT FIXED");
    else if (stat == 0)
      Serial.println("GPS OFF");
    else if (stat == 2)
      Serial.println("2D FIXED");
    else if (stat == 3)
      Serial.println("3D FIXED");
    delay(4000);

  }
}   //............Ende Setup..........................

void loop()//.........................................
{

  //Get data from GPS

  gps.getPar(time1,la,la1,lo, lo1, qua, satan, abwei , hoe);

  Serial.print("Zeit: ");
  Serial.println(time1);
  Serial.print("Breite: ");
  Serial.println(la);
  Serial.println(la1);
  Serial.print("Länge: ");
  Serial.println(lo);
  Serial.println(lo1);
  Serial.print("Qualität: ");
  Serial.println(qua);
  Serial.print("Anz. Sat.: ");
  Serial.println(satan);
  Serial.print("Abweichung: ");
  Serial.println(abwei);
  Serial.print("Höhe: ");
  Serial.println(hoe);

//Google Link erstellen
//googlelink = "https://www.google.de/search?biw=1440&bih=775&ei=iEA9X7byI4P4kwXhx7so&q= " + String(la) + String(la1) + "," + String(lo) + String(lo1);
//oder kürzer
googlelink = "https://www.google.de/search?q=" + String(la) + String(la1) + "," + String(lo) + String(lo1);
googlelink.toCharArray(ausgang,160);  //googlelink in Char konvertieren wegen SMS Versand

Serial.println(googlelink);
Serial.println();

//LCD beschreiben
  lcd.clear();
  lcd.setCursor(0,0); //Spalte,Zeile
  lcd.print("UTC: "+ (String(time1)).substring(0,2)+ ":" + (String(time1)).substring(2,4) + ":" + (String(time1)).substring(4,6));  //Zeit
  lcd.setCursor(0,1);      
  lcd.print("B: " + String(la) + " " + String(la1));  //Breite
  lcd.setCursor(0,2);
  lcd.print("L: " + String(lo)+ " " + String(lo1));    //Länge
  lcd.setCursor(0,3);
  lcd.print("Q: " + String(qua)+ " " + "S: " + String(satan) + " " + "H: " + String(hoe));


//prüfen ob Anruf
     st=call.CallStatusWithAuth(number,0,0); //Status prüfen u. Nummer auslesen ob Anrufer in Kontakten ist wird nicht genutzt( Pos von-bis)
     //Serial.println("Status");   //zur Kontrolle
     //Serial.println(st);         //zur Kontrolle
     if(st!=0) {   //Anruf geht ein
          call.HangUp();  //Anruf beenden
          delay(2000);
          Serial.println("number: ");
          Serial.println(number);
        
          //evt Tel.-Nummer über if Block einschränken
          sms.SendSMS(number,ausgang);  //SMS senden
     }
     delay(1000);

}    //...........Ende Loop.............................


   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Lampe mit Sternen & Sternzeichen (ESP32 12x PWM) Panicer 3 101 27.11.2020 23:26
Letzter Beitrag: Tommy56
  ESP32 WROOM wwilhelm 8 289 27.11.2020 17:01
Letzter Beitrag: amithlon
  MicroPython auf ESP32-S luemar 9 267 23.11.2020 21:01
Letzter Beitrag: Tommy56
  AES256 / SHA384 Chiffren bei HTTPS requests mit ESP32 nutzen TBMSam 0 119 23.11.2020 13:47
Letzter Beitrag: TBMSam
Smile Frage zu Millis im Loop - ESP32 Stargazer 4 176 21.11.2020 16:58
Letzter Beitrag: MicroBahner
  ESP32 und PI mit BLE codingalex 1 182 17.11.2020 12:10
Letzter Beitrag: Tommy56
  ESP32 Ethernet shrimps 34 26.407 15.11.2020 09:57
Letzter Beitrag: miq19
  ESP32 CAM Flashlamp schalten RaspiUser0815 9 768 13.11.2020 17:16
Letzter Beitrag: RaspiUser0815
  ESP32 arbeitet nicht in Arduino-IDE wonk 3 269 12.11.2020 18:16
Letzter Beitrag: wonk
  Hilfe bei async-mqtt-client für ESP32 amshh 7 331 12.11.2020 09:19
Letzter Beitrag: amithlon

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste