A real-time IoT wearable safety system that continuously monitors firefighters' physical condition, location, and environment — keeping commanders informed and firefighters safe in the most hazardous conditions.
The Firefighter Safety Device (FSD) is a wearable IoT safety solution that collects critical telemetry — motion, temperature, gas/smoke levels, and GPS location — and transmits it over Wi-Fi to a Firebase backend. A live web dashboard and an Android companion app give fire commanders instant, situational awareness across any device.
Comprehensive IoT ecosystem: Wearable Device → Firebase Cloud Backend → Web Dashboard & Android App. Data flows continuously over secure HTTPS to multiple platforms simultaneously.
{
"temperature": 42.5,
"gas_level": 350,
"total_acc": 0.98,
"movement": "MOVING",
"status": "NORMAL",
"mpu_status": "OK",
"dht_status": "OK",
"mq2_status": "OK",
"gps_status": "OK",
"system_status": "OK",
"latitude": 17.385044,
"longitude": 78.486671,
"timestamp": 154823
}
All components are mounted to the ESP32 and powered by a single HW battery, keeping the device lightweight and wearable for firefighters.
| # | Component | Purpose | Interface |
|---|---|---|---|
| 1 | ESP32 | Main microcontroller — Wi-Fi, I2C, UART, GPIO | Core |
| 2 | MPU-6050 | 3-axis accelerometer & gyroscope — motion & fall detection | I²C |
| 3 | DHT11 | Ambient temperature sensor | 1-Wire |
| 4 | MQ-2 | Gas & smoke sensor — detects LPG, CO, methane, and smoke for toxic environment alerting | Analog |
| 5 | Neo-6M GPS | Latitude/longitude tracking | UART |
| 6 | Push Button | Manual SOS trigger (GPIO 14 input / GPIO 27 simulated GND) | GPIO |
| 7 | Buzzer | Local audible alerts for the firefighter | GPIO |
| 8 | Battery | Primary power source — 5V | Power |
| ESP32 Pin | Connected To | Notes |
|---|---|---|
| GPIO 21 (SDA) | MPU-6050 SDA | I²C data line |
| GPIO 22 (SCL) | MPU-6050 SCL | I²C clock line |
| GPIO 4 | DHT11 Data | Single-wire; 10 kΩ pull-up to 3.3 V |
| GPIO 34 (ADC) | MQ-2 AO (Analog Out) | Analog read — gas/smoke concentration level |
| GPIO 35 (ADC) | MQ-2 DO (Digital Out) | Threshold-triggered digital alert output |
| GPIO 16 (RX1) | Neo-6M TX | HW Serial 1 RX |
| GPIO 17 (TX1) | Neo-6M RX | HW Serial 1 TX |
| GPIO 14 | SOS Button (signal) | Active LOW, INPUT_PULLUP |
| GPIO 27 | SOS Button (GND leg) | Driven LOW — simulated ground |
| GPIO 13 | Buzzer (+) | Active HIGH |
The device runs a non-blocking state machine. Sensor values are read every loop
iteration and the system state is updated in real time — no delay()
calls that could stall GPS parsing.
The MPU-6050 computes movement = |√(Ax²+Ay²+Az²) − 1.0 g|.
If movement drops below 0.07 g the no-motion timer starts.
Thresholds of 10 s and 30 s trigger WARNING and EMERGENCY respectively.
| Temperature Range | State | Buzzer Behaviour |
|---|---|---|
| < 25 °C | NORMAL | Silent |
| 25 – 30 °C | NORMAL | 1 ambient beep / min |
| 30 – 35 °C | NORMAL | 2 ambient beeps / min |
| 35 – 40 °C | NORMAL | 3 ambient beeps / min |
| > 40 °C | WARNING → | Escalates to WARNING / EMERGENCY |
The FSD ecosystem spans multiple platforms — a live web command center and a native Android companion app — giving commanders real-time visibility from any device, anywhere.
A full-featured Next.js command-center application. Connects to Firebase Realtime Database for live streaming and Firestore for historical analytics.
Comprehensive mission-control capabilities integrated directly into the operations dashboard and companion app, providing unparalleled situational awareness, resilience, and analytical depth.
Physical hardware builds, demonstration prototypes, and visual design materials produced during the project.
A blend of embedded C++ firmware and a modern JavaScript web stack, unified by Firebase as the real-time data backbone.
The Next.js server exposes a REST route for alternative HTTP-based ingestion and for writing to the Firestore historical collection.
POST /api/data
Receives sensor data from ESP32 (or any HTTP client) and stores it in Firestore.
Request Body
{
"device_id": "FF_001",
"temperature": 42.5,
"movement": "MOVING",
"status": "NORMAL",
"latitude": 17.385044,
"longitude": 78.486671
}
Response Codes
200 { "success": true }
400 { "error": "device_id is required" }
503 { "error": "Firebase not initialized" }
500 { "error": "Internal server error" }
This is a functional prototype. The following constraints are acknowledged and are planned to be addressed in future production versions.
| Area | Detail |
|---|---|
| GPS indoors | Neo-6M signal degrades inside buildings. Dashboard retains last known location. |
| DHT11 accuracy | ±2 °C — suitable for prototypes. Production should use DHT22 or SHT31. |
| Single firefighter | Firmware hardcoded for device ID FF_001. Multi-device support is planned. |
| Firebase auth | Uses legacy Database Secret. Should use Firebase Auth tokens in production. |
| SSL verification | client.setInsecure() disables cert verification. Production must verify the server cert. |
| Timestamp | ESP32 sends millis() (uptime), not wall-clock time. Dashboard uses server local time. |
| Connectivity | Wi-Fi range ~50–100 m indoors. LoRa / GSM upgrades planned for larger deployments. |
This project was brought to life by a team of dedicated engineers. FSD is the output of their sleepless nights and efforts.
Developed the software stack, logic, and dashboard.
Handled presentations and assisted with hardware.
Assembled hardware connections for the prototype.
The mastermind behind the companion APP.
The mastermind behind the new website.