Go Down

Topic: NMEA Ausgabe Koordinaten (Read 162 times) previous topic - next topic

paulchen12345

Nov 12, 2019, 03:58 pm Last Edit: Nov 12, 2019, 04:31 pm by paulchen12345
Hallo zusammen,

ich verwende einen ESP32 mit einem Neo6m Modul zum bestimmen der Koordinaten des aktuellen Standortes, diese sollten am SerialMonitor ausgegeben werden.
Im SerialMonitor sollte es aber mit Längengrad: 1546 und Breitengrad: 78949 angezeigt weden. Bei mir wird bisher nur "$GPGGA,133448.00,4677.40473,N,01431.86334,E,1,08,0.95,502.9,M,43.1,M,,*52" in so also die NMEA Form angezeigt.

Habe schon einige Methoden versucht bisher hat jedoch keine funktioniert.


Code: [Select]

#include <TinyGPS++.h>
#include <TinyGPS.h>
#include <SoftwareSerial.h>

int rxPin = 34;
int txPin = 35;
int _speed = 9600;

TinyGPSPlus gps;

SoftwareSerial ss;

float flat, flon;
unsigned long age;

void setup() {
  Serial.begin(115200);
  ss.begin(rxPin, txPin, _speed);

  Serial.println("GPS-Modul");
  Serial.println("Suchen...");
}

void loop() {
  while (ss.available() > 0) {
    gps.encode(ss.read());

    if (gps.location.isUpdated()) {
      Serial.println("Latitude: ");
      Serial.println(gps.location.lat(), 6);
      Serial.println("Longitude: ");
      Serial.println(gps.location.lng(), 6);
    }
  }
}
[*code]



Wäre sehr dankbar wenn mir hier wer weiterhelfen kann.
Liebe Grüße

Tommy56

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [*code] davor und [*/code] dahinter ohne *).
So ist er auch auf portablen Geräten lesbar. Das kannst Du auch noch nachträglich ändern.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

HTML-Fan

$GPGGA,133448.00,4677.40473,N,01431.86334,E,1,08,0.95,502.9,M,43.1,M,,*52
Ist das die vollständige oder verstümmelte Ausgabe im seriellen Monitor?

paulchen12345

Zurzeit wird mir das ausgegeben:

$GPGSA,A,1,05,13,02,,,,,,,,,,5.53,5.44,1.00*02
$GPGSV,3,1,12,02,07,232,10,04,28,098,,05,58,276,12,07,51,057,*79
$GPGSV,3,2,12,08,06,067,,09,19,102,,13,34,288,13,15,03,291,*7E
$GPGSV,3,3,12,21,01,342,,27,04,034,,28,30,158,,30,87,086,*7C
$GPGLL,,,,,151823.00,V,N*46
>⸮X"⸮⸮I⸮⸮⸮⸮⸮`8⸮h⸮,,,,,,*6D

HTML-Fan

Also wird Latitude und Longitude weggelassen?

paulchen12345

Derzeit schon da beim Modul die blaue LED nicht leuchtet, was ja auch heißt das es keine Satelliten findet.
 

HTML-Fan

Das oben gezeigte Programm (welches du übrigens mal in Code-Tags setzen könntest) ist dein aktuelles Programm? Und das gibt diesen "Stuss" aus?

amithlon

#7
Nov 12, 2019, 05:48 pm Last Edit: Nov 12, 2019, 05:49 pm by amithlon
Hallo,

SoftwareSerial kann auf einem ESP32 Probleme machen, zumindest was den Müll am Schluß angeht.
Der ESP32 hat 3 Hardware-Serielle.

Das ist mein Testsketch:
Code: [Select]

/*****************************************
* ESP32 GPS VKEL 9600 Bds
******************************************/

#include <TinyGPS++.h>                       

TinyGPSPlus gps;                           
HardwareSerial GPS(1);                 

void setup()
{
  Serial.begin(115200);
  GPS.begin(9600, SERIAL_8N1, 12, 15);   //17-TX 18-RX
}

void loop()
{
  Serial.print("Latitude  : ");
  Serial.println(gps.location.lat(), 5);
  Serial.print("Longitude : ");
  Serial.println(gps.location.lng(), 4);
  Serial.print("Satellites: ");
  Serial.println(gps.satellites.value());
  Serial.print("Altitude  : ");
  Serial.print(gps.altitude.feet() / 3.2808);
  Serial.println("m");
  Serial.print("Speed     : ");
  Serial.print(gps.speed.kmph());
  Serial.println("km/h");
  Serial.print("Time      : ");
  Serial.print(gps.time.hour());
  Serial.print(":");
  Serial.print(gps.time.minute());
  Serial.print(":");
  Serial.println(gps.time.second());

  Serial.println("**********************");

  smartDelay(1000);                                     

  if (millis() > 5000 && gps.charsProcessed() < 10)
    Serial.println(F("No GPS data received: check wiring"));
}

static void smartDelay(unsigned long ms)               
{
  unsigned long start = millis();
  do
  {
    while (GPS.available())
      gps.encode(GPS.read());
  } while (millis() - start < ms);
}



Die Pins mußt Du bei GPS.begin(9600, SERIAL_8N1, 12, 15);   //17-TX 18-RX anpassen oder eben umverdrahten.
Ich habe hier ein NEO-6M, da ist von Anfang an die Pufferbatterie tot. Das braucht hier am Fenster (Hfseite, 1.Stock) so 2-3 Stunden bis es einen Fix hat. Betterei habe ich zwar beschafft, aber noch nicht gewechselt...

Bevor das GPS-Modul nicht stabil mit seiner LED blinkt, brauchst Du zumindest nicht auf vollständige Daten hoffen.

Gruß aus Berlin
Michael

paulchen12345

Danke für die Hilfe jedoch gibt es bei deinem Programm wieder das gleiche aus , also:

$GPGSA,A,1,05,13,02,,,,,,,,,,5.53,5.44,1.00*02
$GPGSV,3,1,12,02,07,232,10,04,28,098,,05,58,276,12,07,51,057,*79
$GPGSV,3,2,12,08,06,067,,09,19,102,,13,34,288,13,15,03,291,*7E
$GPGSV,3,3,12,21,01,342,,27,04,034,,28,30,158,,30,87,086,*7C
$GPGLL,,,,,151823.00,V,N*46
>⸮X"⸮⸮I⸮⸮⸮⸮⸮`8⸮h⸮,,,,,,*6D


Wie gibt das Programm die Koordinaten denn bei dir aus?

amithlon

Hallo,

Danke für die Hilfe jedoch gibt es bei deinem Programm wieder das gleiche aus , also:

...

Wie gibt das Programm die Koordinaten denn bei dir aus?
Seltsam.. Ich habe es gerade mal auf einen ESP32 mit Neo6 geflasht. Ausgabe ohne Fix:

Bei falschen Pins der Seriellen zum GPS-Modul (LED blinkt aber) oder wenn es noch garkeine Daten sendet (LED blinkt nicht):
Code: [Select]

**********************
No GPS data received: check wiring
Latitude  : 0.00000
Longitude : 0.0000
Satellites: 0
Altitude  : 0.00m
Speed     : 0.00km/h
Time      : 0:0:0
**********************


Richtig beschaltet und mit Fix:
Code: [Select]

**********************
Latitude  : 52.46649
Longitude : 13.5155
Satellites: 6
Altitude  : 51.00m
Speed     : 1.43km/h
Time      : 7:51:8
**********************


Gruß aus Berlin
Michael

paulchen12345

Habe den Fehler gefunden, habe nicht darauf geachtet die Baudrate auf  115200 umzustellen.


Gibt mir jedoch alles mit 0 aus, also deine erste Variante.



amithlon

Hallo,

wichtig ist diese Meldung:
No GPS data received: check wiring

Dann stimmt was mit der Verbindung zum GPS-Modul nicht.
Sonst müßte eigenlich
Code: [Select]

**********************
Latitude  : 0.00000
Longitude : 0.0000
Satellites: 0
Altitude  : 0.00m
Speed     : 0.00km/h
Time      : 9:5:55
**********************
[code]
kommen, das Modul blinkt da noch nicht.

Aktiv, aber noch ohne Fix:
[code]
**********************
Latitude  : 0.00000
Longitude : 0.0000
Satellites: 3
Altitude  : 0.00m
Speed     : 0.00km/h
Time      : 9:5:56
**********************


Es kann "ewig" dauern, bis er die ersten Satellieten finden wenn er noch keine sinnvollen almanac-Daten gespeichert hat. Für einen Fix braucht er zumindest eine Zeit lang 4 Satelliten.

Hängt stark von den Empfangsbedingungen ab, im Freien geht es recht schnell, hier im Zimmer an der Balkontür dauert das bei ersten Start auch mal 2 Stunden. Mit den Mini-Antennen, die neuerdings mitgeliefert werden, findet er hier irgendwann 4 Satelliten, max. 5. Meine andere aktive GPS-Antenne (die größere quadratische) hat er meist 6-7.

Gruß aus Berlin
Michael


paulchen12345


Die blaue LED blinkt, also hat er schon Satelliten gefunden.

Also wenn ich mich nicht täusche muss etwas mit den angeschlossenen Pins sein oder?

Habe RX vom Modul am Pin 18 und TX am Pins 17 angeschlossen. Muss ich da etwas ändern?


amithlon

#13
Nov 15, 2019, 03:57 pm Last Edit: Nov 15, 2019, 03:57 pm by amithlon
Hallo,

die stehen als Kommenta dahinter von einem anderen Projekt.
GPS.begin(9600, SERIAL_8N1, 12, 15);   //17-TX 18-RX
Genutzt werden zur Zeit also RX 12 und TX15.
Format ist GPS.begin(BAUDRATE, CONFIG, RX, TX);
Also GPS.begin(9600,SERIAL_8N1, 17, 18);
sollte dann passen.

Gruß aus Berlin
Michael


Go Up