ESP32Thing Neo6m GPS Setup Hilfe

Hallo,
ich habe mir vor kurzem ein Funspark ESP32 Thing gekauft, um leistungs intensievere Projekte mit einigen sensoren und großem LCD ralisieren zu können.

Funspark ESP 32 Thing
Ublox Neo6m

beim umschreiben der Programme von Arduino auf ESP komme ich jetzt beim GPS aber einfach nicht weiter...
Ich hab mir im Internet alle möglichen Beispiele angeschaut und versucht mein Programm zum laufen zu bekommen aber ich bekomme immer nur nullen raus.

HardwareSerial SerialGPS(0); müsste richtig sein. Bei 1 und 2 wirft er mir nur fragezeichen aus.
Mit null zeigt er zumindest alles richtig an aber eben überall 0.00000

Die LED vom GPS Blinks auch wie vorher mit Arduino, also sollte eigentlich ein
Signal da sein.

Hier mal mein ganz einfaches Programm um erstmal Daten vom GPS erfassen zu können.

Viellicht findet ja jemand den fehler. :neutral_face:

   //Pinverbindung:
   //ESP 3.3V > GPS VCC
   //ESP GND  > GPS GND
   //ESP RX   > GPS TX
   //ESP TX   > GPS RX
 

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

TinyGPSPlus gps;
HardwareSerial SerialGPS(0);


void setup() {
  Serial.begin(115200);
  SerialGPS.begin(9600, SERIAL_8N1, TX, RX);
}
 

void loop() {

    Serial.print("LAT=");  Serial.println(gps.location.lat(), 6);
    Serial.print("LONG="); Serial.println(gps.location.lng(), 6);
    Serial.print("ALT=");  Serial.println(gps.altitude.meters());
    Serial.print("Sats=");  Serial.println(gps.satellites.value());

    delay(1000);
  }

Das Board:

RX und TX vom Neo 6m wie im Programm und diversen Beispielen "Vertauscht" an TX und RX vom Board oben rechts angeschlossen.

Wenn ich es richtig sehe, sollte es SerialGPS.begin(9600, SERIAL_8N1, RX, TX); sein.

Aber UART0 ist mit USB verbunden, weshalb UART2 die bessere Wahl sein sollte. So kann ich Daten lesen:

#include <HardwareSerial.h> 
HardwareSerial SerialGPS(2);  // UART2

void setup()
{
  SerialGPS.begin(9600, SERIAL_8N1, 16, 17);  // RX-Pin, TX-Pin
...
}

void loop()
{
  while (SerialGPS.available() > 0)
  {
...
  }
}

Einfacher kannst Du Serial2 nutzen:

void setup()
{
  Serial2.begin(9600);
...
}

void loop()
{
  while (Serial2.available() > 0)
  {
...
  }
}

In Deinem Programm vermisse ich gps.encode().

Getestet mit ESP32 Dev Module.

Danke für die hilfe,
ja stimmt das fehlte.

Ich habe aber zum testen nochmal alles ans Uno angeschlossen und da funktionierte mein altes Uno Programm auch nicht mehr.

Also stimmt wohl entweder was mit dem Modul oder der Libary nicht.
Ich werde TinyGPS mal neu laden und es dann nochmal probieren.

Jetzt läuft es bei mir auch, mit einem anderen Modul.
Danke für die Hilfe. dein Code hat mir das fehlende bisschen gegeben. :grinning_face_with_smiling_eyes:

RX und TX vom Modul zum Board Vertaucht angeschlossen.
Also RX modul zu 17(TX) am Board und TX modul zu 16(RX) am Board

Hier mal mein code:

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

HardwareSerial SerialGPS(2);  // UART2

TinyGPSPlus gps;

void setup(){
  Serial.begin(9600);
  SerialGPS.begin(9600, SERIAL_8N1, 16, 17);  // RX-Pin, TX-Pin
}

void loop()
{
    while (SerialGPS.available() > 0)
    if (gps.encode(SerialGPS.read()))
    displayInfo();
    delay(1000);   
}

void displayInfo()
{

  //Print Location
    Serial.print(F("Location: ")); 
    Serial.print(gps.location.lat(), 6);
    Serial.print(F(","));
    Serial.print(gps.location.lng(), 6);

  //Print Date
    Serial.print(F("  Date "));
    Serial.print(gps.date.day());
    Serial.print(F("/"));
    Serial.print(gps.date.month());
    Serial.print(F("/"));
    Serial.print(gps.date.year());

  //Print Current Speed
    Serial.print(F("  Speed: ")); 
    Serial.print(gps.speed.kmph());
    Serial.print(F("kmph "));
  
    Serial.println();
}

Bitte gerne und Dank für die Rückmeldung!

Funktioniert es auch mit Serial2?

Ja genau, mit UART 2.

Bei Pin 16 und 17 steht ja auch oben im Bild der Pin Beschreibung U2_TXD / RXD.

Beim Normalen TX und RX Pin steht U0_RX/TX daher da UART 0.

Richtig, UART2 ist die im µC verbaute und genutzte Hardware.

Hiermit kannst Du dank der IO-Matrix irgendwelche Pins als RX- und TX-Pin zuordnen. Das möchte ich mal den ESP32-Style nennen.

In #2 habe ich im zweiten Beispiel mit Serial2 den Arduino-Style verwendet, wo die Verbindung der UART2 zu den Pins 16 und 17 festgelegt ist.

Spannend wird es, wenn man UART1 verwenden möchte, denn Serial1 ist mit Pins verbunden, die zumindest bei meinen ESP32 mit Flash-Pins verbunden sind, also nicht nutzbar. Im ESP32-Style sollte es aber funktionieren:

HardwareSerial SerialGPS(1);  // UART1
...
  SerialGPS.begin(9600, SERIAL_8N1, 18, 19);  // RX-Pin, TX-Pin
1 Like