Tech Gyan Set
Published © MIT

ESP32 4G LTE GPS Tracker with MQTT Dashboard

A SIM-based ESP32 4G LTE GPS tracker that sends real-time vehicle location via MQTT to a live web dashboard.

BeginnerFull instructions provided8 hours334
ESP32 4G LTE GPS Tracker with MQTT Dashboard

Things used in this project

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Code

πŸš— ESP32 4G LTE GPS Tracker (Complete Firmware)

C/C++
#define TINY_GSM_MODEM_SIM7600
#define TINY_GSM_RX_BUFFER 1024

#include <TinyGsmClient.h>
#include <PubSubClient.h>
#include <TinyGPSPlus.h>

// ================= PIN DEFINITIONS =================
#define MODEM_RX 16
#define MODEM_TX 17

#define GPS_RX 27
#define GPS_TX 14

// ================= NETWORK CONFIG =================
const char apn[]  = "airtelgprs.com";
const char user[] = "";
const char pass[] = "";

const char* broker = "broker.emqx.io";
const int   port   = 1883;
const char* topic  = "device/SL001/gps";

// ================= OBJECTS =================
HardwareSerial SerialAT(2);
HardwareSerial gpsSerial(1);

TinyGsm modem(SerialAT);
TinyGsmClient gsmClient(modem);
PubSubClient mqtt(gsmClient);
TinyGPSPlus gps;

unsigned long lastPublish = 0;

// ================= CONNECT GPRS =================
bool connectGPRS() {
  Serial.println("Connecting to Network...");
  if (!modem.waitForNetwork()) {
    Serial.println("Network Failed");
    return false;
  }

  Serial.println("Connecting to GPRS...");
  if (!modem.gprsConnect(apn, user, pass)) {
    Serial.println("GPRS Failed");
    return false;
  }

  Serial.println("GPRS Connected");
  return true;
}

// ================= CONNECT MQTT =================
bool connectMQTT() {
  String clientID = "ESP32_" + String(random(10000));
  if (mqtt.connect(clientID.c_str())) {
    Serial.println("MQTT Connected");
    return true;
  }

  Serial.println("MQTT Failed");
  return false;
}

// ================= SETUP =================
void setup() {

  Serial.begin(115200);

  SerialAT.begin(115200, SERIAL_8N1, MODEM_RX, MODEM_TX);
  gpsSerial.begin(9600, SERIAL_8N1, GPS_RX, GPS_TX);

  modem.restart();

  if (!connectGPRS()) {
    Serial.println("GPRS Connection Error");
  }

  mqtt.setServer(broker, port);

  if (!connectMQTT()) {
    Serial.println("MQTT Connection Error");
  }

  Serial.println("SYSTEM READY");
}

// ================= LOOP =================
void loop() {

  // Read GPS Data
  while (gpsSerial.available()) {
    gps.encode(gpsSerial.read());
  }

  // Reconnect MQTT if disconnected
  if (!mqtt.connected()) {
    connectGPRS();
    connectMQTT();
  }

  mqtt.loop();

  // Publish GPS Data Every 5 Seconds
  if (gps.location.isValid() && millis() - lastPublish > 5000) {

    float lat = gps.location.lat();
    float lng = gps.location.lng();
    float speed = gps.speed.kmph();
    float altitude = gps.altitude.meters();
    float course = gps.course.deg();
    int sat = gps.satellites.value();

    String payload = "{";
    payload += "\"lat\":" + String(lat, 6) + ",";
    payload += "\"lng\":" + String(lng, 6) + ",";
    payload += "\"speed\":" + String(speed, 1) + ",";
    payload += "\"sat\":" + String(sat) + ",";
    payload += "\"altitude\":" + String(altitude, 1) + ",";
    payload += "\"direction\":" + String(course, 1);
    payload += "}";

    mqtt.publish(topic, payload.c_str());

    Serial.println("Published Data:");
    Serial.println(payload);

    lastPublish = millis();
  }
}

Credits

Tech Gyan Set
32 projects β€’ 14 followers
Tech Gyan Set | IoT & Embedded Systems Creator | Arduino, ESP32, GSM & NodeMCU Projects | Smart Home & Real-Life Automation Tutorials
Thanks to Tech Gyan Set .

Comments