Cirkit Designer LogoCirkit DesignerYour all-in-one circuit design IDE Launch Cirkit Designer App

ESP32-Based GPS Tracker with Bluetooth Connectivity and Camera Interface

View and Edit Project In Cirkit DesignerImage of ESP32-Based GPS Tracker with Bluetooth Connectivity and Camera Interface

Circuit Documentation

Summary

The circuit in question is designed to interface an ESP32 microcontroller with several peripheral modules, including a Neo 6M GPS Module, an OV7725 camera module, an HC-05 Bluetooth Module, and a BT139 600 triac. The ESP32 is responsible for processing data from the GPS module, controlling the camera module, and communicating with external devices via Bluetooth. Additionally, the ESP32 can control power flow through the triac. The circuit is powered through the ESP32's 3V3 pin, which supplies power to the other modules.

Component List

ESP32 (30 pin)

Neo 6M GPS Module

BT139 600

OV7725

HC-05 Bluetooth Module

Wiring Details

ESP32 (30 pin)

Neo 6M GPS Module

BT139 600

OV7725

HC-05 Bluetooth Module

Documented Code

ESP32 (30 pin) - sketch.ino

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

#define GPS_BAUDRATE 9600  // The default baudrate of NEO-6M is 9600

TinyGPSPlus gps;  // the TinyGPS++ object

void setup() {
  Serial.begin(9600);
  Serial2.begin(GPS_BAUDRATE); //serial2 for GPS UART

  Serial.println(F("ESP32 - GPS module_Simulation"));
}

void loop() {
  if (Serial2.available() > 0) {
    if (gps.encode(Serial2.read())) {
      if (gps.location.isValid()) {
        Serial.print(F("Latitude: "));
        Serial.println(gps.location.lat(),6);

        Serial.print(F("Longitude: "));
        Serial.println(gps.location.lng(),6);

        Serial.print(F("Altitude: "));
        if (gps.altitude.isValid())
          Serial.println(gps.altitude.meters());
        else
          Serial.println(F("INVALID"));
      } else {
        Serial.println(F("Location: INVALID"));
      }

      Serial.print(F("Speed: "));
      if (gps.speed.isValid()) {
        Serial.print(gps.speed.kmph());
        Serial.println(F(" km/h"));
      } else {
        Serial.println(F("INVALID"));
      }

      Serial.print(F("GPS date&time: "));
      if (gps.date.isValid() && gps.time.isValid()) {
        Serial.print(gps.date.year());
        Serial.print(F("-"));
        Serial.print(gps.date.month());
        Serial.print(F("-"));
        Serial.print(gps.date.day());
        Serial.print(F(" "));
        Serial.print(gps.time.hour());
        Serial.print(F(":"));
        Serial.print(gps.time.minute());
        Serial.print(F(":"));
        Serial.println(gps.time.second());
      } else {
        Serial.println(F("INVALID"));
      }

      Serial.println();
    }
  }

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

This code is responsible for initializing the GPS module, reading GPS data, and outputting the location, speed, and timestamp to the serial monitor. It checks for valid GPS data and prints an error message if no data is received within the first 5 seconds.