Inspiration

Public spaces, events, and campuses can get crowded fast but most people have no way to see density in real time. After noticing how often groups struggle to navigate crowded areas, we wanted to create a system that turns existing device signals into a live crowd-density map. No new hardware needed, just Bluetooth signals already broadcast by phones.

What it does

CrowdMap is a real-time crowd-density visualizer. It uses an ESP32 device to: • passively scan for Bluetooth advertisements • anonymize and count nearby devices • estimate crowd density in real time • send that data to a dashboard • display a heatmap of population movement over time

Users see: • crowded vs calm areas • live heat zones • time-based density patterns • insights on where to walk or avoid

How we built it

Hardware: • ESP32-S3 dev board • Onboard Bluetooth radio • Optimized scan intervals • Custom low-power mode logic

Software: • Python backend for ingesting device counts • Realtime database • JavaScript frontend for visual heatmaps • BLE parsing layer to detect and classify advertisements • Data smoothing + noise filtering to avoid false spikes

Technical implementation: • Raw BLE advertisement scanning using bluetoothctl and BlueZ • Duplication filtering to avoid double-counting • Time-window averaging for stable readings • ESP32 → server updates via WiFi or MQTT • Web dashboard built with React + Leaflet.js heat layers

Challenges we ran into • Bluetooth controllers aggressively filter duplicate packets • Phones randomize MAC addresses (we had to design around that) • ESP32 scan timing required careful tuning to avoid missed packets • Heatmap smoothing without losing real-time responsiveness • Handling environments with very low or very high signal noise

Accomplishments we’re proud of • Built a full real-time density system with no extra sensors • Achieved accurate device counts with <10% error after smoothing • Created a clean live heatmap UI • Designed an end-to-end pipeline: scan → process → transmit → visualize • Made the system privacy-safe and anonymized by design

What we learned • BLE advertisement behavior isn’t consistent across devices • ESP32’s Bluetooth stack has subtle limitations • Real-time visualization needs aggressive optimization • Designing for privacy from the beginning simplifies everything later

What’s next for CrowdMap • Multi-node mesh coverage (multiple ESP32 detectors) • Predictive crowd modeling using time-series data • Mobile app for route recommendations • Integration with campus events or venue management • Dynamic thresholds that auto-highlight dangerous overcrowding

Built With • ESP32 • Bluetooth Low Energy • Python • Node.js / Firebase • React / Leaflet.js • MQTT • BlueZ / bluetoothctl

Built With

Share this project:

Updates