ESP32 Heltec + TinyGPS Serial Comm Issue using Arduino IDE


(Battlecruiser) #1

Hi guys,
I recently got a new ESP32 LoRA board to setup as a TTN node.
For now I am just trying to communicate with the TinyGPS using ESP32 over Software serial and output the co-ordinates on Arduino’s Serial Monitor.
I am unable to receive any GPS data on Arduino IDE’s serial monitor.
I was wondering if anyone had tried this before. Or maybe find an issue with my code.
I do see some other data on the monitor. Attached is the image.image
Following is my code.

> #include <SoftwareSerial.h>
> #include <TinyGPS++.h>
> 
> static const int RXPin = 17, TXPin = 16;
> static const uint32_t GPSBaud = 9600;
> 
> // The TinyGPS++ object
> TinyGPSPlus gps;
> 
> // The serial connection to the GPS device
> SoftwareSerial ss(RXPin, TXPin);
> 
> void setup()
> {
>   Serial.begin(115200);
>   ss.begin(GPSBaud);
> 
>   Serial.println(F("DeviceExample.ino"));
>   Serial.println(F("A simple demonstration of TinyGPS++ with an attached GPS module"));
>   Serial.print(F("Testing TinyGPS++ library v. ")); Serial.println(TinyGPSPlus::libraryVersion());
>   Serial.println(F("by Mikal Hart"));
>   Serial.println();
> }
> 
> void loop()
> {
>   // This sketch displays information every time a new sentence is correctly encoded.
>   while (ss.available() > 0)
>     if (gps.encode(ss.read()))
>       displayInfo();
> 
>   if (millis() > 5000 && gps.charsProcessed() < 10)
>   {
>     Serial.println(F("No GPS detected: check wiring."));
>     while(true);
>   }
> }
> 
> void displayInfo()
> {
>   Serial.print(F("Location: ")); 
>   if (gps.location.isValid())
>   {
>     Serial.print(gps.location.lat(), 6);
>     Serial.print(F(","));
>     Serial.print(gps.location.lng(), 6);
>   }
>   else
>   {
>     Serial.print(F("INVALID"));
>   }
> 
>   Serial.print(F("  Date/Time: "));
>   if (gps.date.isValid())
>   {
>     Serial.print(gps.date.month());
>     Serial.print(F("/"));
>     Serial.print(gps.date.day());
>     Serial.print(F("/"));
>     Serial.print(gps.date.year());
>   }
>   else
>   {
>     Serial.print(F("INVALID"));
>   }
> 
>   Serial.print(F(" "));
>   if (gps.time.isValid())
>   {
>     if (gps.time.hour() < 10) Serial.print(F("0"));
>     Serial.print(gps.time.hour());
>     Serial.print(F(":"));
>     if (gps.time.minute() < 10) Serial.print(F("0"));
>     Serial.print(gps.time.minute());
>     Serial.print(F(":"));
>     if (gps.time.second() < 10) Serial.print(F("0"));
>     Serial.print(gps.time.second());
>     Serial.print(F("."));
>     if (gps.time.centisecond() < 10) Serial.print(F("0"));
>     Serial.print(gps.time.centisecond());
>   }
>   else
>   {
>     Serial.print(F("INVALID"));
>   }
> 
>   Serial.println();
> }

Thanks!


#2

you sure the GPS works , try to direct connect it to a usb-serial and use a terminal program or the (if u-blox) use U-center


(Battlecruiser) #3

Yes the GPS does work, it does take like 10 mins to lock in the location. I tested it on Arduino Uno.
Thanks


(LoRaTracker) #4

Looks like the program is crashing, perhaps an issue with the softwareserial library. It puzzles me why your using softwareserial in the first place. .

Try the program with the GPS connected on the Serial2 hardware serial port.