Inspiration
Getting lost, falling, or having a health issue happens fast—and calling for help isn’t always possible. We wanted a simple, wearable-ish safety device that can notice danger and share useful info automatically.
What it does
SafetyBeacon reads heart rate + motion + temperature/humidity on an ESP32, detects risky events (impact / abnormal HR / overheating), switches to WARNING, beeps until acknowledged, and sends compact JSON over BLE to an Android app. In WARNING it also includes GPS info (satellites + lat/lon) when available.
How we built it
ESP32 + MAX30100 + MPU6050 + DHT11 + DFR1103 GPS + I2S speaker
ESP32 code: state machine (NORMAL/WARNING), sensor sampling, threshold logic, snapshot + GPS polling, BLE notify JSON
Android (Kotlin + Jetpack Compose): BLE scan/connect/subscribe, parse JSON, display live cards + raw JSON debug window
Challenges we ran into
BLE notifications were the biggest pain: permissions, MTU/fragmentation, CCCD subscription reliability, and parsing partial packets. Also, heart-rate stabilization + “finger not detected” handling needed debouncing so it wouldn’t false-trigger.
Accomplishments that we're proud of
A full end-to-end pipeline: real sensors → real detection logic → BLE streaming → live mobile UI. WARNING mode is clear, logged, and includes extra context (GPS + reason) instead of just “something happened.”
What we learned
BLE is deceptively tricky—getting “connected” doesn’t mean you’re actually subscribed to notifications. Also, sensor data needs smoothing and gating (validity checks) before it’s usable for safety decisions.
What's next for SafetyBeacon
Better detection (fall model + activity context), background alerts (SMS/cloud relay), map view for GPS, persistent logs, battery/power optimization, and a cleaner hardware form factor.
Built With
- ble
- bluetoothgatt
- bluetoothlescanner
- c++
- esp32
- gatt
- i2c
- i2s
- jetpack
- kotlin
Log in or sign up for Devpost to join the conversation.