Untitled

Anonymous
plain_text
02/23/2026 8:31 AM
3.2 KB
10
Indexable
#include <TinyGPSPlus.h>

/* ESP32-C3 Connection Guide:
   GPS TX  -----> ESP32-C3 Pin 20 (RX1)
   GPS RX  -----> ESP32-C3 Pin 21 (TX1)
   GPS VCC -----> 3.3V or 5V (Depends on module)
   GPS GND -----> GND
*/

#define GPS_RX_PIN 20
#define GPS_TX_PIN 21
#define GPS_BAUD 9600

// Create GPS object
TinyGPSPlus gps;

// Create Serial instance for GPS on UART1
HardwareSerial gpsSerial(1); 

void setup() {
  // Start Debug Serial (USB)
  Serial.begin(115200);
  delay(1000); 

  // Initialize GPS Serial with C3 specific pins
  // Format: baud, config, rxPin, txPin
  gpsSerial.begin(GPS_BAUD, SERIAL_8N1, GPS_RX_PIN, GPS_TX_PIN);
  
  Serial.println(F("--- ESP32-C3 GPS System Initialized ---"));
  Serial.println(F("Waiting for satellite fix..."));
}

void loop() {
  // Continuously read data from GPS module
  while (gpsSerial.available() > 0) {
    gps.encode(gpsSerial.read());
  }

  // Periodic display (every 2 seconds)
  static unsigned long lastUpdate = 0;
  if (millis() - lastUpdate > 2000) {
    updateDisplay();
    lastUpdate = millis();
  }

  // Diagnostics: Check if we are receiving ANY data
  if (millis() > 5000 && gps.charsProcessed() < 10) {
    Serial.println(F("CRITICAL ERROR: No data from GPS. Check Pin 20/21 connections."));
  }
}

void updateDisplay() {
  Serial.print(F("["));
  printTime(); // Print UTC Time
  Serial.print(F("] "));

  if (gps.location.isValid()) {
    Serial.print(F("Lat: ")); Serial.print(gps.location.lat(), 6);
    Serial.print(F(" | Lng: ")); Serial.print(gps.location.lng(), 6);
    Serial.print(F(" | Sats: ")); Serial.println(gps.satellites.value());
    
    Serial.print(F("   Speed: ")); Serial.print(gps.speed.kmph()); Serial.print(F(" km/h"));
    Serial.print(F(" | Alt: ")); Serial.print(gps.altitude.meters()); Serial.println(F("m"));
  } 
  else {
    Serial.print(F("Searching... Satellites in view: "));
    Serial.println(gps.satellites.value());
  }
  Serial.println(F("-----------------------------------------------"));
}

void printTime() {
  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());
  } else {
    Serial.print(F("00:00:00"));
  }
}
Editor is loading...
Leave a Comment