Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ESP32 Arduino Day School

ESP32 Next.js Firebase MQTT HiveMQ ApexCharts

Sistema de monitoreo de signos vitales en tiempo real. Un ESP32 lee temperatura corporal, frecuencia cardíaca y saturación de oxígeno (SpO₂) y los publica vía MQTT sobre TLS a un broker HiveMQ Cloud. Un dashboard Next.js suscripto al broker visualiza los datos en gráficas en vivo y los persiste en Firebase Firestore.


Arquitectura del sistema

┌──────────────────────────────────────────────────────────────────────┐
│                          HARDWARE (ESP32)                            │
│                                                                      │
│  ┌─────────────┐   I²C    ┌──────────┐                              │
│  │  MAX30102   │ ────────► │          │  WiFi + TLS (MQTTS :8883)   │
│  │ HR / SpO₂  │          │  ESP32   │ ──────────────────────────►  │
│  └─────────────┘          │          │                              │
│  ┌─────────────┐  1-Wire  │          │                              │
│  │   DS18B20   │ ────────► │          │                              │
│  │    Temp     │          └──────────┘                              │
│  └─────────────┘               ▲                                    │
│  ┌─────────────┐               │                                    │
│  │   Botón     │ GPIO 33 ──────┘                                    │
│  └─────────────┘                                                    │
└──────────────────────────────────────────────────────────────────────┘
                                 │
                    MQTT over TLS (HiveMQ Cloud)
                                 │
              ┌──────────────────┴──────────────────┐
              │        Tópico: esp32/telemetry        │
              │   { bpm, spo2, temp, status }         │
              └──────────────────┬──────────────────┘
                                 │
                                 ▼
┌──────────────────────────────────────────────────────────────────────┐
│                        WEB DASHBOARD (Next.js)                       │
│                                                                      │
│   MQTT Client (WebSocket) ──► Estado React ──► ApexCharts (live)    │
│                                    │                                 │
│                                    ▼                                 │
│                         Firebase Firestore                           │
│                      (persistencia histórica)                        │
└──────────────────────────────────────────────────────────────────────┘

Flujo de datos

  1. El ESP32 muestrea el MAX30102 en ventanas de 100 muestras a 400 Hz.
  2. Aplica el algoritmo de Maxim para calcular BPM y SpO₂.
  3. Filtra los resultados con un EMA (α = 0.30) y validación fisiológica.
  4. Cada 5 segundos (o al presionar el botón) publica el JSON al tópico esp32/telemetry.
  5. El dashboard recibe el mensaje vía MQTT-WS, actualiza las gráficas en tiempo real y guarda la lectura en Firestore.
  6. Al recargar la página, el dashboard pre-carga el historial desde Firestore.

Estructura del repositorio

ESP32 Arduino Day School/
├── esp32/                   # Firmware Arduino para ESP32
│   ├── esp32.ino            # Sketch principal
│   ├── secrets.h            # Credenciales (ignorado por git)
│   └── README.md            # Guía de hardware, pines y librerías
│
├── web/                     # Dashboard Next.js
│   ├── src/
│   │   └── app/             # App Router de Next.js
│   ├── .env.example         # Variables de entorno de ejemplo
│   └── README.md            # Guía de instalación y configuración web
│
├── screenshots/             # Capturas del dashboard
│   ├── Dashboard.jpeg
│   └── History.jpeg
│
└── README.md                # Este archivo

Componentes del sistema

ESP32 — Firmware

Aspecto Detalle
Lenguaje C++ (Arduino framework)
Sensores MAX30102 (HR/SpO₂ vía I²C), DS18B20 (temperatura vía 1-Wire)
Pin temperatura GPIO 32
Pin botón GPIO 33 (INPUT_PULLUP)
I²C GPIO 21 (SDA) / GPIO 22 (SCL)
Filtro EMA α=0.30 + ventana deslizante 100 muestras
Protocolo IoT MQTTS (TLS, puerto 8883)
Publicación Cada 5 s o al presionar el botón

📄 Ver esp32/README.md para la guía completa de pines, librerías y flasheo.


Web — Dashboard

Aspecto Detalle
Framework Next.js (App Router)
Runtime Bun
Gráficas ApexCharts (tiempo real)
Auth & BD Firebase Authentication + Firestore
MQTT HiveMQ Cloud vía WebSocket seguro (WSS :8884)
Lenguaje TypeScript

📄 Ver web/README.md para instalación, variables de entorno y configuración MQTT.


Tópicos MQTT

Tópico Dirección Descripción
esp32/telemetry ESP32 → Dashboard Temperatura, BPM, SpO₂ y estado
app/commands Dashboard → ESP32 Comandos (ej. { "minutes": 5 })

Capturas de pantalla

Dashboard en tiempo real

Historial de lecturas


Inicio rápido

1 — Firmware ESP32

# 1. Abre esp32/esp32.ino en Arduino IDE
# 2. Crea secrets.h con tus credenciales:
#    WiFi SSID, WiFi Password, HiveMQ host/user/pass
# 3. Instala las librerías (OneWire, DallasTemperature, MAX30102, ArduinoJson, PubSubClient)
# 4. Selecciona tu placa ESP32 y sube el sketch

2 — Dashboard Web

cd web
cp .env.example .env.local   # Edita con tus credenciales
bun install
bun dev                       # Abre http://localhost:3000

Prerrequisitos globales

About

Sistema IoT de monitoreo médico: un ESP32 captura signos vitales y los envía de forma segura vía MQTT/TLS a HiveMQ. Un dashboard en Next.js visualiza los datos en tiempo real y los almacena en Firebase.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages