Overview

A real-time biosignal platform. A wearable ESP32 device streams nine sensor channels over BLE, a C++ backend bridges them to WebSocket clients, and InfluxDB with Grafana keeps the history.

Core features

  • Nine biosignal channels in one 36-byte BLE notification, including ECG, pulse rate, SpO2 and body temperature
  • Unavailable channels filtered out, using the 32767.0f sentinel value
  • C++20 backend that subscribes to the device over BlueZ and processes each characteristic in its own thread
  • Live React dashboard fed by WebSocket frames
  • Long-term storage in InfluxDB, read back through Grafana
  • One command deployment: four services start with docker compose up -d
  • You own your data: every frame is written to an InfluxDB bucket on your own machine, behind your own credentials, with no third-party service in the path
  • Nothing leaves your network: the wearable, the backend, the dashboard and the database all run on hardware you control, so a session can be recorded, inspected, exported and deleted at any time
  • Open building blocks: NimBLE, oatpp, React, InfluxDB and Grafana are all inspectable and replaceable, so no part of the pipeline is a black box

In this project

ChapterWhat it covers
Source repositoryrepository link, monorepo layout, run command
System architectureblock diagram, from wearable to Grafana
Hardwaresensor set, the nine channels, outstanding work
ESP32 firmware architectureGATT service, notification layout, build
C++ high-performance backendBlueZ, per-characteristic threads, WebSocket
React 19 frontend dashboardlive charts over WebSocket
InfluxDB time-series storageline protocol writes, retention
Grafana analytics and telemetryprovisioned dashboards
Docker Compose deploymentthe four services and their configuration
Resultswhat works end to end, and what is unmeasured
Diagnostics and troubleshootingD-Bus, frame and container checks