← Fleet 📡

sundeep

sundeep
tracker ⟳ 30s
📍
Location
27.66224, 85.31734
🏎️
Speed
45 km/h
🏔️
Altitude
🛰️
Satellites
📶
Signal
🔋
Battery

🗺️ Route Playback

Live View

⛽ Fuel Level

85% Diesel
Volt:
Resolving address...

📊 Data History (Last 50 Records)

#LatLngSpeed FuelSatsSignal BattDevice TimeServer Time
9 27.66224 85.31734 45 85% 2026-03-24 10:05:35 2026-03-24 10:05:37
8 27.6661 85.30933 55 13% 2026-03-24 09:58:06 2026-03-24 09:58:06
7 27.68792 85.3168 26 55% 2026-03-24 09:57:58 2026-03-24 09:57:58
6 27.70038 85.31405 26 65% 2026-03-24 09:57:54 2026-03-24 09:57:54
5 27.71841 85.31847 45 85% 2026-03-24 09:57:48 2026-03-24 09:57:49
4 27.73254 85.32826 45 85% 2026-03-24 09:57:47 2026-03-24 09:57:47
3 27.73938 85.33926 45 85% 2026-03-24 09:57:45 2026-03-24 09:57:45
2 27.73589 85.31503 45 85% 2026-03-24 09:57:42 2026-03-24 09:57:43
1 27.72464 85.34527 45 85% 2026-03-24 09:57:36 2026-03-24 09:57:37

🧪 Test This Device

Send Data

curl -X POST https://gps.aitalim.com/api/post_data.php \
  -H "Content-Type: application/json" \
  -d '{"device_id": "sundeep", "latitude": 27.72, "longitude": 85.33, "speed": 50.0, "fuel_level": 60.0}'

Fetch Data

curl "https://gps.aitalim.com/api/get_data.php?device_id=sundeep&limit=10"

🔌 ESP32 Firmware (TTGO T-Call SIM800)

Copy this Arduino sketch. DEVICE_ID is pre-filled with sundeep.

firmware_sundeep.ino

/**
 *  TTGO T-Call SIM800L v1.4 — GPS + Fuel Tracker
 *  Device: sundeep
 *  Server: https://gps.aitalim.com
 *
 *  Pinout (FIXED for TTGO T-Call):
 *    SIM800 TX→GPIO26, RX→GPIO27, PWR→GPIO4, RST→GPIO5
 *    Battery ADC→GPIO35, LED→GPIO13
 *  External GPS: TX→GPIO16, RX→GPIO17
 *  Fuel sensor: GPIO34
 */

#define TINY_GSM_MODEM_SIM800
#define MODEM_TX  27
#define MODEM_RX  26
#define MODEM_PWR 4
#define LED_PIN   13

#include <TinyGsmClient.h>
#include <ArduinoHttpClient.h>
#include <TinyGPSPlus.h>
#include <ArduinoJson.h>

const char* DEVICE_ID   = "sundeep";
const char* DEVICE_NAME = "sundeep";
const char* SERVER_HOST = "gps.aitalim.com";
const int   SERVER_PORT = 80;
const char* SERVER_PATH = "/api/post_data.php";
const char* APN = "ntc"; // Change: Ncell="ncellgprs"

HardwareSerial gpsSerial(1);
TinyGPSPlus gps;
TinyGsm modem(Serial1);
TinyGsmClient client(modem);
HttpClient http(client, SERVER_HOST, SERVER_PORT);

void setup() {
    Serial.begin(115200);
    pinMode(LED_PIN, OUTPUT);
    pinMode(MODEM_PWR, OUTPUT);
    pinMode(23, OUTPUT); // POWER_ON
    pinMode(5, OUTPUT);  // RST
    digitalWrite(23, HIGH);
    digitalWrite(5, HIGH);
    digitalWrite(MODEM_PWR, LOW);
    delay(1000);
    digitalWrite(MODEM_PWR, HIGH);
    delay(2000);
    Serial1.begin(115200, SERIAL_8N1, MODEM_RX, MODEM_TX);
    gpsSerial.begin(9600, SERIAL_8N1, 16, 17);
    modem.restart();
    modem.waitForNetwork(60000);
    modem.gprsConnect(APN, "", "");
}

void loop() {
    while (gpsSerial.available()) gps.encode(gpsSerial.read());
    static unsigned long last = 0;
    if (millis() - last > 300000 || last == 0) {
        sendData(); last = millis();
    }
    delay(100);
}

void sendData() {
    digitalWrite(LED_PIN, HIGH);
    float fuelV = (analogRead(34)/4095.0)*3.3;
    float fuel  = constrain(((fuelV-0.5)/(3.0-0.5))*100, 0, 100);
    float batt  = (analogRead(35)/4095.0)*3.3*2;

    DynamicJsonDocument doc(512);
    doc["device_id"] = DEVICE_ID;
    doc["device_name"] = DEVICE_NAME;
    if (gps.location.isValid()) {
        doc["latitude"]  = gps.location.lat();
        doc["longitude"] = gps.location.lng();
        doc["speed"]     = gps.speed.kmph();
        doc["altitude"]  = gps.altitude.meters();
        doc["satellites"]= gps.satellites.value();
    }
    doc["fuel_level"]      = fuel;
    doc["fuel_voltage"]    = fuelV;
    doc["battery_voltage"] = batt;
    doc["signal_strength"] = modem.getSignalQuality();

    String p; serializeJson(doc, p);
    http.beginRequest();
    http.post(SERVER_PATH);
    http.sendHeader("Content-Type","application/json");
    http.sendHeader("Content-Length", p.length());
    http.beginBody(); http.print(p);
    http.endRequest();
    Serial.printf("[%d] %s\n", http.responseStatusCode(), http.responseBody().c_str());
    digitalWrite(LED_PIN, LOW);
}