Skip to content

saiprashanth802/fleet-tracking

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fleet Tracking System

Self-hosted fleet tracking for bus/car fleets. Runs on a personal laptop with no cloud costs.

Stack: ESP32 + NEO-6M GPS + SIM800L (hardware) · Node.js + Express (server) · SQLite (database) · PWA (driver app) · Cloudflare Tunnel (remote access)


Quick Start

1. Server Setup

npm install
node server/server.js
# → Running at http://localhost:3000
# → Dashboard at http://localhost:3000/dashboard

2. Cloudflare Tunnel (drivers & ESP32 access from anywhere)

# Download cloudflared from https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/

# Testing (random URL, no account needed):
cloudflared tunnel --url http://localhost:3000

# Production (permanent URL):
cloudflared login
cloudflared tunnel create fleet
cloudflared tunnel run --url http://localhost:3000 fleet

3. Driver PWA

Drivers open the Cloudflare URL on their phone. Tap "Add to Home Screen" for an app-like experience. Works offline — trips queue and sync automatically.

4. ESP32 Firmware

  1. Open firmware/fleet_tracker.ino in Arduino IDE
  2. Install libraries: TinyGPS++ (via Library Manager)
  3. Edit the config block at the top of the file:
    • WIFI_SSID / WIFI_PASS — depot WiFi
    • SERVER_URL — your Cloudflare tunnel URL
    • VEHICLE_ID — e.g. BUS-01
    • APN — your SIM card APN (Airtel: airtelgprs.com, BSNL: bsnlnet)
  4. Flash to ESP32 (board: ESP32 Dev Module)

Hardware Wiring

Component Pin ESP32 Pin
NEO-6M TX GPIO 16
NEO-6M RX GPIO 17
SIM800L TX GPIO 26
SIM800L RX GPIO 27
Trip button Signal GPIO 0
Status LED Anode (+) GPIO 2

⚠️ SIM800L power: Must be powered from a dedicated 4.1V regulator (e.g. AMS1117-4.0) capable of 2A. Do NOT power from ESP32's 3.3V rail.

Optional OBD-II (ELM327 UART)

ELM327 ESP32
TX GPIO 18
RX GPIO 19

Connect to vehicle OBD-II port (usually under dashboard near steering column).


API Reference

Method Endpoint Description
POST /api/trip/start Begin a trip, returns trip_id
POST /api/trip/hardware ESP32 GPS + OBD payload
POST /api/trip/manual Driver PWA form (fuel, score, etc.)
GET /api/trips All trips (filterable)
GET /api/stats Today's summary stats
GET /api/vehicles Vehicle registry
GET /api/drivers Driver list with aggregated stats
GET /api/report Fleet efficiency report
GET /api/export/csv Full CSV export

Project Structure

fleet-tracking/
├── server/
│   └── server.js         # Express API + DB setup
├── public/
│   ├── index.html        # Driver PWA
│   ├── dashboard.html    # Owner dashboard
│   ├── manifest.json     # PWA manifest
│   ├── sw.js             # Service Worker (offline support)
│   ├── css/
│   │   ├── pwa.css
│   │   └── dashboard.css
│   └── js/
│       ├── pwa.js
│       └── dashboard.js
├── firmware/
│   └── fleet_tracker.ino # ESP32 Arduino sketch
├── docs/
│   └── fleet_tracking_spec.md
├── package.json
└── README.md

Adding Vehicles & Drivers

Edit the seed block in server/server.js, or insert directly into SQLite:

# Using sqlite3 CLI:
sqlite3 server/fleet.db

INSERT INTO vehicles VALUES ('BUS-03','bus','Tata','LP 913',2021,'diesel',200,1,datetime('now'));
INSERT INTO drivers  VALUES ('DRV-04','Sunil Verma',NULL,1,datetime('now'));

Extending to Cars

The schema already supports cars. Just add vehicles with type = 'car':

INSERT INTO vehicles VALUES ('CAR-01','car','Maruti','Swift',2022,'petrol',37,1,datetime('now'));

The dashboard filters by type automatically. OBD-II fuel data is significantly more reliable on cars.


Backup

Your entire database is one file: server/fleet.db

Simple backup:

cp server/fleet.db backups/fleet-$(date +%Y%m%d).db

Set this as a daily scheduled task (Windows Task Scheduler / Linux cron / Mac launchd).


Upgrade Paths

When Upgrade
Laptop reliability is poor Migrate to Supabase (swap SQLite driver)
Fleet > 30 vehicles Migrate to PostgreSQL
Need live map Add Leaflet.js + GPS stream endpoint
Need SMS alerts Use SIM800L AT+CMGS for delay alerts
Need better fuel accuracy Add fuel float sensor or OBD PID 0x5E

License

MIT — free to use, modify, and deploy.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors