Built to order

Bus Occupancy Display System using ESP32

This project tells waiting passengers whether the approaching bus has seats: an ESP32 on the bus counts boardings and alightings with IR break-beam pairs at the door, snaps the counts to stops with GPS geofencing, corrects drift with a terminus reset, and drives a P10 LED matrix at the bus stop showing seats free and the next stop. A fleet dashboard tracks every bus's occupancy along its route, flags full and offline buses, and keeps an event log. Suitable for B.E./B.Tech final-year projects in IoT & Embedded Systems, Electronics and Computer Science.

Bus Occupancy Display System using ESP32 — project thumbnail preview
More project photos (2)

The problem

Nobody likes watching a packed bus roll past the stop — and transport operators have no live view of which buses are full, where the load builds up, or which unit went offline. This project closes that loop. An ESP32 on the bus counts passengers through IR break-beam pairs at the door (in/out), a GPS module geofences the route so counts snap to stops, and a terminus reset zeroes the counters at the depot to correct drift. At the bus stop, a P10 LED matrix shows what passengers actually need: "12A · SEATS FREE: 6 · NEXT: SHIVAJINAGAR · ARRIVING ~4 MIN · STANDEES: 8". The BusSeat Live fleet dashboard shows occupancy along today's route for each bus (a 40-seat bus climbing 0→12→28→34→31→9 across stops), fleet-wide occupancy bars, offline units, and an event log — e.g. "Bus 03C reached seated capacity at Market stop — display shows FULL, 6 standees counted."

How it works

  1. IR break-beam pairs at the bus door detect each crossing; the break order distinguishes boarding from alighting, and the ESP32 keeps a running net count.
  2. A GPS module reports position continuously; when the bus enters a stop's geofence, the current count is snapped to that stop for the route chart.
  3. At the depot terminus, a geofence reset zeroes the counters and re-syncs the door sensors, correcting any drift from missed or double counts.
  4. The ESP32 publishes occupancy, GPS and stop events to the cloud; the stop-side P10 LED matrix subscribes and scrolls the live seats-free message.
  5. The fleet dashboard renders each bus's occupancy bar, the along-route chart with the capacity line, offline flags, and the timestamped event log.
  6. When seated capacity is reached, the bus is marked FULL with standees counted separately; the stop display shows this so passengers can decide.

Tech stack:

  • ESP32 firmware (door unit + stop display unit)
  • IR break-beam sensor pairs
  • GPS module (geofencing)
  • P10 LED matrix display
  • Cloud dashboard (fleet, routes, events)
  • MQTT telemetry
  • Git
Parameter Value
Controller ESP32 (bus unit + stop display unit)
Counting IR break-beam pair per door, in/out (expected behavior)
Display P10 LED matrix, scrolling text (route, seats, ETA)
Positioning GPS geofence per stop; drift corrected at terminus reset (design)
Demo fleet 4 buses (12A City loop, 07B Campus, 03C Depot–Market, 21D Ring road)
Seating 40 seats per bus (demo); standees counted separately
Dashboard Fleet occupancy, along-route chart, event log
Update Live occupancy + GPS coordinates (design behavior)

Project features

  • [Door counting] IR break-beam pairs at each bus door count boardings and alightings; net occupancy = boardings minus alightings.
  • [P10 LED stop display] Scrolls the live message passengers need: route, seats free, next stop, arrival estimate, standees.
  • [GPS geofencing] Counts snap to stops (Depot, College, Majestic, Shivajinagar, Market); the dashboard shows live GPS coordinates per bus.
  • [Terminus reset] Counters zero at the depot and door sensors re-sync, correcting the drift that accumulates over a day.
  • [Fleet dashboard] Every bus gets an occupancy bar (34/40, 12/40, 40/40 + 6 standees) with next stop and ETA; offline buses are flagged with last-seen data.
  • [Occupancy-along-route chart] Per-stop passenger counts for a bus across its whole route, with the 40-seat capacity line drawn.
  • [Event log] Full-bus events, boarding/alighting deltas per stop, resets and offline flags — the operator's audit trail.

What is included

  • Complete bus-side ESP32 prototype (door IR sensors, GPS, wiring diagram)
  • Stop-side P10 LED matrix display unit
  • Counting and display firmware (geofencing, terminus reset, telemetry)
  • Fleet dashboard (occupancy bars, route charts, event log)
  • Installation guide (door sensor mounting, geofence setup, display wiring)
  • Project report PDF (background, counting theory, methodology)
  • PPT presentation for final review
  • Viva Q&A preparation document (IR sensing, GPS, LED matrix, MQTT)

Limitations & prerequisites

  • IR door counts drift over a day (missed or double counts in crowds); the terminus reset bounds this but between resets the count is an estimate — stated as a design behavior, not a measured accuracy.
  • GPS geofences need tuning per route; urban canyons degrade position fixes and stop-snapping can lag.
  • The dashboard figures (occupancy curves, ETAs, event log entries) are illustrative simulation data from the demo app, not measurements from a running fleet.
  • The demo stop display shows one route; a real stop serving many routes needs a larger matrix and a route-selection scheme.
  • An offline bus (power cycled, no GPS) is flagged from last-seen data — the system cannot track a unit that has no power.

Frequently Asked Questions

How are passengers counted?

IR break-beam pairs at the door: the break order gives boarding vs alighting, and the ESP32 keeps the net count. No cameras, no ticketing integration needed.

What corrects counting drift?

A terminus reset — when the bus reaches the depot geofence, counters zero and door sensors re-sync. Between resets the count is a running estimate.

What does the stop display show?

Route number, seats free, next stop, arrival estimate and standees — e.g. "12A · SEATS FREE: 6 · NEXT: SHIVAJINAGAR · ARRIVING ~4 MIN · STANDEES: 8", scrolling on a P10 LED matrix.

How does GPS fit in?

Geofences around each stop snap the live count to stops for the along-route chart, and the dashboard shows each bus's live coordinates and next-stop ETA.

What happens when a bus goes offline?

The dashboard flags it with last-seen GPS and a likely cause (e.g. "power cycled") so the operator knows it is a data gap, not an empty bus.

Is this project suitable for a final-year project?

Yes — for IoT & Embedded, Electronics and Computer Science programs. It is a real public-transport application combining embedded sensing, GPS, LED displays and fleet telemetry. Suitable for B.E./B.Tech final-year projects in IoT & Embedded Systems, Electronics and Computer Science.

Components & software requirements
  • ESP32 firmware (door unit + stop display unit)
  • IR break-beam sensor pairs
  • GPS module (geofencing)
  • P10 LED matrix display
  • Cloud dashboard (fleet, routes, events)
  • MQTT telemetry
  • Git
Delivery information

Built-to-order project. Delivery timeline is shared after order confirmation based on current queue.

Support terms

Complete documentation, setup guide, and viva preparation included. Support for setup and explanation provided.

Download abstract (PDF)

Related guides

All guides
Blueprint-style technical illustration of an ESP32 development board at the centre, with sensor nodes, data-flow arrows and a circuit-brain motif representing an AI agent reasoning and sending decisions back.Engineering students building IoT or embedded final-year projects who want to add local AI agent behaviour with ESP32, MQTT and a small language model.

AI Agents on ESP32: Agentic IoT Final-Year Projects

An agentic IoT system observes, reasons, acts, remembers and explains. On ESP32 that means a split architecture: the chip senses and acts while a small local model (Ollama on your laptop) reasons over MQTT — a full LLM needs gigabytes of RAM the chip doesn't have. This guide covers three working patterns (host-reasoned agent, on-device tinyML on ESP32-S3, and a hybrid of both), plus Wi-Fi CSI presence sensing, parts and budget for India, code shapes, and honest limits to state in your report.

Read guide
Technical illustration of three electronic control units linked by a twisted-pair CAN bus cable carrying signal pulses between them.Electronics, E&TC, IoT and robotics students who keep hearing “CAN bus” in EV, automotive and industrial project ideas and want to understand it properly before wiring anything

CAN Bus Basics for Students: How ECUs Communicate

CAN bus is the shared network that lets dozens of controllers in a car, EV or robot communicate over two wires. This guide explains message IDs, arbitration, the physical layer, frame structure, error handling and CAN FD, then walks through building a working two-node bench network with an ESP32 and a transceiver.

Read guide
Illustration of a quadcopter drone build showing labeled parts including frame, motors, propellers, ESCs, flight controller, and battery.B.E./B.Tech Electronics, Mechanical, and Computer Science students planning to build a quadcopter drone who need to select compatible parts without wasting money on mismatched

Drone Build: Parts Selection Guide

Picking drone parts that actually work together is a sizing problem, not a shopping problem. This guide walks the compatibility chain — frame to props to motors to ESCs to battery — with the thrust math, firmware choices, LiPo safety, and the bench-test order that prevents disasters.

Read guide
Get a quotation