Bluetooth Proximity Monitoring System
A two-device embedded system that uses Bluetooth to detect when a wearable bracelet moves too far from a base station and triggers alarms on base device.
Author: Ioan-Vlad Moise
GitHub Project Link: link_to_github
Description
The Bluetooth Proximity Monitoring System is a two-device embedded application built in Rust using the Embassy async framework on two STM32 Nucleo-U545RE-Q microcontrollers. One device acts as a fixed base station and the other as a wearable bracelet.
Each device is paired with an HM-10 BLE 4.0 module communicating over UART. The base station continuously monitors the Bluetooth signal strength (RSSI) received from the bracelet to estimate inter-device distance. When the estimated distance exceeds approximately 20 meters, base station device trigger their passive buzzer as an alarm. The base station displays the live estimated distance on an SSD1306 OLED display over I2C. A physical button on station device allows the user to acknowledge and reset the alarm. The bracelet is powered by a portable USB powerbank/phone, making it wearable, while the base station is powered via USB.
Motivation
I chose this project because it has a concrete real-world application: preventing loss of personal items, children, or pets in crowded environments. It covers multiple embedded communication protocols (UART, I2C, GPIO, PWM) and introduces challenges around wireless signal processing and async embedded Rust, making it both technically meaningful and practically useful.
Architecture
The system is divided into two independent embedded devices:
- Base station: reads RSSI from the HM-10 module via UART, estimates distance, drives the OLED display over I2C, triggers the buzzer via PWM, and handles button input via GPIO.
- Bracelet: transmits a continuous Bluetooth signal via the HM-10 module over UART.
Log
Week 20 - 26 April
Researched project requirements and finalized the hardware component list. Ordered all hardware components (HM-10 modules, buzzers, OLED display, buttons, breadboards, wires).
Week 27 April - 4 May
Week 5 - 11 May
I finished the hardware part of the project.
Week 12 - 18 May
Week 19 - 25 May
Hardware
The project uses two STM32 Nucleo-U545RE-Q boards as the main processing units: one for the base station and one for the bracelet. Each board is connected to one HM-10 BLE 4.0 module via UART for Bluetooth communication. One device includes one passive 3.3V buzzer for audio alerts and two physical button for alarm reset and stopping the alarm to get out of the zone, for a total of 1 buzzers and 2 buttons in the full system. The base station additionally drives one SSD1306 OLED display over I2C to show live distance estimates. The bracelet is powered by a USB powerbank/phone for portability.

Schematics

Bill of Materials
| Device | Usage | Price |
|---|---|---|
| STM32 Nucleo-U545RE-Q | Main microcontroller (x2) | provided by lab |
| HM-10 BLE 4.0 Module | Bluetooth communication via UART (x2) | 59.98 RON |
| OLED Display 0.96" SSD1306 | Shows live distance on base station | 30.00 RON |
| Yellow Button with Round Cover | Alarm reset input — 2 per device | 4 RON |
| Passive Buzzer 3V/3.3V | Audio alarm on device (x1) | 2 RON |
| Female-Male Wires 20cm | Component wiring (x2) | 14.90 RON |
| Breadboard | Prototyping | 5.35 RON |
| USB Powerbank | Portable power for bracelet | ~50.00 RON |
| Total | ~150.15 RON |
Software
| Library | Description | Usage |
|---|---|---|
| embassy-rs | Async embedded framework for STM32 | Task scheduling and async execution |
| embassy-stm32 | STM32 HAL | UART, I2C, GPIO, and PWM peripheral access |
| ssd1306 | OLED display driver over I2C | Displaying the estimated distance |
| embedded-graphics | Text and graphics rendering on OLED | Drawing text and UI elements on the display |
| heapless | Fixed-size data structures for embedded systems | UART parsing buffers without dynamic allocation |