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 GPS Daten auslesen und auf LCD
21.09.2020, 11:56
Beitrag #1
ESP32+SIM808 GPS Daten auslesen und auf LCD
Ich habe einen ESP32 mit SIM808 Modul zu Auslesen der GPS Daten verwendet.
Ausgabe auf LCD-Display.
Problem der serielle Puffer muß in der SoftwareSerial.h auf 128 kB geändert werden, sonst werden nicht der gesamte Inhalt des GPS Protokolls angezeigt.
Mehr dazu auf: http://www.schaefer-marksuhl.de/esp32.html
Der Sketch:
[
// GPS auslesen mit AT Befehlen u. auf LCD Display
// Eingabe AT Befehle in SIM808 Modul mit ESP32
//in Lib. SoftwareSerial.h Zeile 109 Buffer von 64 auf 128 ändern
//sonst wird nicht der gesamte NMEA String angezeigt !!!!!

#include <SoftwareSerial.h> //ESP32 SoftwareSerial downloaden
#include <DFRobot_sim808.h> //für Initialisierung
#include <LiquidCrystal_I2C.h>
#define PIN_TX 16
#define PIN_RX 4

String inhalt;
String gesamt;
String response;
String response1;
int pos;
int pos2;
String googlepos;
int anzfehler=0;

LiquidCrystal_I2C lcd(0x27,20,4); //LCD initialisieren
SoftwareSerial mySerial(PIN_TX, PIN_RX); //PINs der Ser. Schnittstelle festlegen
DFRobot_SIM808 sim808(&mySerial); //Serielle Schnittstelle mySerial auf sim808 legen

void setup() { //.............................................................................
mySerial.begin(9600);
Serial.begin(9600);

lcd.init(); //LCD initialisieren
lcd.setBacklight(HIGH); //LCD Hintergrund beleuchtung an


// SIM808 kurz reseten Pin 9 SIM808 an Pin 17 ESP
pinMode(17, OUTPUT);
digitalWrite(17, HIGH);
delay(2000);
digitalWrite(17, LOW);

//********Initialize sim808 module*************
while (!sim808.init()) {
delay(500);
Serial.println("Sim808 init error");
anzfehler=anzfehler + 1;
if (anzfehler > 10){
Serial.println("ESP Neustart");
ESP.restart(); //Neustart ESP32
}
}
Serial.println("Sim808 bereit");

mySerial.print("at+cgpspwr=1\r") ; //GPS einschalten
delay(150);
} //................................................................................​..........

void loop() { //..........................................................................
response = "";
response1 = "";
mySerial.flush(); //Serieller Puffer löschen
Serial.flush(); //Serieller Puffer löschen

mySerial.write("at+cgpsinf=2 \n"); //GPS Protokoll 2 $GPGGA einmal abrufen
delay(150); //etwas Zeit für Übertragung

while (mySerial.available() > 0) { // wird ausgeführt wenn Daten vorhanden sind
//char c = mySerial.read();
//response=response+String©;
//oder als String einlesen
response = mySerial.readString();
}

//Serial.println(response);

//String zerlegen

pos = response.indexOf("+CGPSINF: "); //Position von +CGPSINF: suchen
//Serial.println(pos);
pos2 = response.indexOf("M"); //Position von M für Meter der Höhe suchen
//Serial.println(pos2);

response1 = response.substring(pos, pos2 + 1); //aus gesamten ser. String Teilstring bilden
Serial.println(response1);

//in Teilstrings zerlegen , bis ,
char StartString[40];
char buf[120];

response1.toCharArray(buf, 120); //Umwandlung von String nach Char

for (int i = 0; i < 120; i++) { //alle Kommas müssen durchlaufen werden
StartString[i] = char(buf[i]);
}

char* Part0 = strtok(StartString, ","); //Protokoll Nr.
char* Part1 = strtok(NULL, ","); // Zeit
char* Part2 = strtok(NULL, ","); // Breite
char* Part3 = strtok(NULL, ","); //N oder S
char* Part4 = strtok(NULL, ","); // Länge
char* Part5 = strtok(NULL, ","); //E oder W
char* Part6 = strtok(NULL, ","); //Qualität 0=ungültig 1=GPS fix
char* Part7 = strtok(NULL, ","); //Anzahl Sat.
char* Part8 = strtok(NULL, ",");
char* Part9 = strtok(NULL, ","); // Höhe
char* Part10 = strtok(NULL, ","); // M für Meter

Serial.println("Protokoll Nr: " + String(Part0)); //Protokoll Nr.
Serial.println("UTC: " + String(Part1)); // Zeit
Serial.println("Breite: " + String(Part2) + " " + String(Part3)); // Breite
//Serial.println(Part3); // N oder S
Serial.println("Länge: " + String(Part4)+ " " + String(Part5)); // Länge
//Serial.println(Part5); //E oder W
Serial.println("Qualität: " + String(Part6)); //Qualität 0 ungültig 1 GPS fix
Serial.println("Anz Sat: " +String(Part7)); //Anzahl Sat.
//Serial.println(Part8);
Serial.println("Höhe: " + String(Part9)); // Höhe
//Serial.println(Part10); // M für Meter

googlepos = "http://maps.google.com/maps?q=loc:" + String(Part2) + " " + String(Part3) + "," + String(Part4)+ " " + String(Part5);
Serial.println(googlepos);
Serial.println("-------------------------------------------------------");

//LCD beschreiben
lcd.clear();
lcd.setCursor(0,0); //Spalte,Zeile
lcd.print("UTC: "+ (String(Part1)).substring(0,2)+ ":" + (String(Part1)).substring(2,4) + ":" + (String(Part1)).substring(4,6)); //Zeit
lcd.setCursor(0,1);
lcd.print("B: " + String(Part2) + " " + String(Part3)); //Breite
lcd.setCursor(0,2);
lcd.print("L: " + String(Part4)+ " " + String(Part5)); //Länge
lcd.setCursor(0,3);
lcd.print("Q: " + String(Part6)+ " " + "S: " + String(Part7) + " " + "H: " + String(Part9));

delay(1000);

} //...............................................................................][/code]
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.09.2020, 12:48
Beitrag #2
RE: ESP32+SIM808 GPS Daten auslesen und auf LCD
Stelle Deinen Sketch bitte in Codetags.
Wie das geht, steht hier.
Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.09.2020, 18:25
Beitrag #3
RE: ESP32+SIM808 GPS Daten auslesen und auf LCD
Hallo,
die Puffergröße musst Du in der Tat ändert.
Wird in der Datei …/hardware/arduino/avr/libraries/SoftwareSerial/SoftwareSerial.h
Vorgenommen. Suche nach -> _SS_MAX_RX_BUFF. Ziemlich am Anfang in den Deklarationen. Default beträgt das buffer 64. Soll also _SS_MAX_RX_BUFF 128 sein.
Ich musste offt sogar 1024 reservieren.
Gruß Georg

Sorry für mein nicht korrektes Deutsch. Sad
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 104 27.11.2020 23:26
Letzter Beitrag: Tommy56
  ESP32 WROOM wwilhelm 8 295 27.11.2020 17:01
Letzter Beitrag: amithlon
  MicroPython auf ESP32-S luemar 9 273 23.11.2020 21:01
Letzter Beitrag: Tommy56
  AES256 / SHA384 Chiffren bei HTTPS requests mit ESP32 nutzen TBMSam 0 122 23.11.2020 13:47
Letzter Beitrag: TBMSam
  serieller Monitor verschluckt Daten wonk 18 481 22.11.2020 23:27
Letzter Beitrag: hotsystems
Smile Frage zu Millis im Loop - ESP32 Stargazer 4 179 21.11.2020 16:58
Letzter Beitrag: MicroBahner
  ESP32 und PI mit BLE codingalex 1 185 17.11.2020 12:10
Letzter Beitrag: Tommy56
  ESP32 Ethernet shrimps 34 26.420 15.11.2020 09:57
Letzter Beitrag: miq19
  ESP32 CAM Flashlamp schalten RaspiUser0815 9 769 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

Gehe zu:


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