# NEST Firmware - Arduino Version (Prototipo Wearable)
Este repositorio contiene el firmware para el proyecto **NEST (Non-intrusive dEviceS for Telemedicine)**, desarrollado para un **prototipo wearable** en la plataforma **Arduino**. El firmware controla el monitoreo de **frecuencia cardíaca (BPM)** mediante el sensor **MAX30102** y el microcontrolador **nRF52840** con **Bluetooth Low Energy (BLE)** integrado. Este repositorio incluye el bootloader y las bibliotecas necesarias para compilar y programar el código.
Este repositorio contiene el firmware para el proyecto **NEST (Non-intrusive dEviceS for Telemedicine)**, desarrollado para un **prototipo wearable** en la plataforma **Arduino**. El firmware controla el monitoreo de **frecuencia cardíaca (BPM)** y **saturación de oxígeno (SpO2)** mediante el sensor **MAX30102** y el microcontrolador **nRF52840** con **Bluetooth Low Energy (BLE)** integrado. También incluye una interfaz táctil para interactuar con las funcionalidades del dispositivo, como la confirmación de rescates, monitoreo, y envío de datos a través de BLE.
## Descripción del Firmware
Este firmware está diseñado para un wearable médico que permite el monitoreo de signos vitales y la interacción con el usuario a través de una pantalla táctil. Las principales funcionalidades del firmware incluyen:
1.**Monitoreo de BPM y SpO2**: Utiliza el sensor **MAX30102** para medir la frecuencia cardíaca (BPM) y la saturación de oxígeno (SpO2). Los datos se procesan y se muestran en la pantalla TFT.
2.**Pantalla TFT y Control Táctil**: La interfaz de usuario incluye un menú principal con opciones para monitorear los signos vitales, interactuar con un diario de dolor, y confirmar el envío de datos de rescate. Todo esto se controla mediante una pantalla TFT manejada con la biblioteca **Ucglib.h** y un sistema táctil basado en la biblioteca **TouchScreen.h**.
3.**Conectividad Bluetooth**: Implementa BLE usando **Bluefruit.h** para enviar notificaciones y datos de monitoreo a dispositivos conectados. Incluye características BLE personalizadas para enviar alertas.
4.**Iluminación de Pantalla Controlada**: El pin de iluminación de la pantalla está controlado con PWM, lo que permite ajustar el brillo de la pantalla en función del estado del dispositivo.
5.**Actualización Dinámica de Frecuencia Cardíaca**: El valor de BPM se actualiza en tiempo real y se muestra en la pantalla, y también puede ser enviado vía BLE si hay un dispositivo conectado.
## Funciones Principales
-**Pantalla Principal**: Presenta tres opciones: **Diario de Dolor**, **Rescate**, y **Monitoreo**.
-**Confirmación de Rescate**: Permite al usuario confirmar o cancelar el envío de datos de rescate.
-**Envío de Datos**: Muestra una animación de envío y notifica cuando los datos se han enviado correctamente a través de BLE.
-**Monitoreo de Frecuencia Cardíaca**: Muestra el valor actual de BPM en la pantalla y permite volver al menú principal tocando la pantalla.
### Bibliotecas Incluidas en el Proyecto
## Estructura del repositorio
El proyecto incluye las siguientes bibliotecas personalizadas que se encuentran en el directorio `/libraries`:
-**/bootloader**: Archivos del bootloader para el nRF52840.
-**/firmware**: Código fuente del firmware desarrollado en Arduino.
-**/libraries**: Biblioteca necesaria, como **Ucglib.h**, utilizada para controlar la pantalla TFT.
-**Ucglib.h**: Utilizada para controlar la pantalla TFT e implementar las interfaces gráficas.
-**algorithm_by_RF.h**: Procesa los datos del sensor **MAX30102** para calcular la frecuencia cardíaca y la saturación de oxígeno.
-**max30102.h**: Controla las operaciones del sensor **MAX30102** para la lectura de datos biométricos.
Otras bibliotecas necesarias, como **Adafruit_TinyUSB.h**, **TouchScreen.h**, **Bluefruit.h** y **SPI.h**, se pueden instalar directamente desde el gestor de bibliotecas del **Arduino IDE**.
## Requisitos para Programar en Arduino
...
...
@@ -23,53 +43,11 @@ Este repositorio contiene el firmware para el proyecto **NEST (Non-intrusive dEv
## Bootloader
El bootloader puede actualizarse mediante un archivo UF2 o DFU si ya existe uno. También es posible cargarlo en un chip nuevo en blanco siguiendo la guía a continuación.
### Actualización del Bootloader con UF2 (Solo para nRF52840 y requiere versión 0.4.0+)
Esto solo funciona con nRF52840 y requiere que el bootloader existente tenga al menos la versión 0.4.0:
1. Haz doble clic rápidamente en el botón de reinicio para poner la placa en modo bootloader. Aparecerá un dispositivo de almacenamiento masivo llamado `FTHR840BOOT`.
2. Descarga el último archivo UF2 para tu placa, por ejemplo, `update-{BOARD}-{version}_nosd.uf2` desde la [página de lanzamientos del Bootloader Adafruit nRF52](https://github.com/adafruit/Adafruit_nRF52_Bootloader/releases).
3. Arrastra y suelta el archivo UF2 en la unidad `FTHR840BOOT` para realizar la actualización, luego espera hasta que la placa se reinicie automáticamente.
### Actualización del Bootloader con DFU
Para actualizar al último Bootloader + Softdevice usando el puerto serie desde el IDE de Arduino:
4.**ESPERA** hasta que el proceso termine (~30 segundos).
**Nota:** Cierra el Monitor Serial antes de hacer clic en "Grabar Bootloader". Después, no debes cerrar el IDE de Arduino, desconectar la placa, abrir el Monitor Serial, etc., ya que hay un alto riesgo de dañar el dispositivo. Haz esto con precaución.
### Grabar un nuevo Bootloader
Para grabar el bootloader desde el IDE de Arduino, necesitarás tener instaladas las siguientes herramientas en tu sistema y que estén disponibles en la ruta del sistema:
-[Segger JLink Software and Documentation Pack](https://www.segger.com/downloads/jlink)
-[Nordic nRF5x Command Line Tools](https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-Command-Line-Tools)
Verifica que puedas ejecutar `nrfjprog` desde tu terminal o símbolo del sistema.
**Nota para macOS:** Actualmente, necesitarás crear un enlace simbólico en `/usr/local/bin` hacia la herramienta `nrfjprog` en la ubicación donde la hayas instalado. Puedes ejecutar el siguiente comando:
2. Selecciona **Herramientas > Programador > J-Link for Feather52**.
3. Selecciona **Herramientas > Grabar Bootloader** con la placa y el J-Link conectados.
Si deseas modificar el bootloader para tus propias necesidades, puedes consultar su repositorio [Adafruit_nRF52_Bootloader](https://github.com/adafruit/Adafruit_nRF52_Bootloader).
El bootloader debe cargarse manualmente. En este repositorio, en el directorio `/bootloader`, encontrarás el archivo que debe cargarse en el nRF52840. Sigue las instrucciones a continuación para realizar la grabación del bootloader.
#### Grabar el Bootloader manualmente con nrfjprog
### Grabar el Bootloader manualmente con nrfjprog
El archivo hex del bootloader se puede encontrar en `bin/bootloader`. Ejecuta el siguiente comando:
El archivo hex del bootloader se puede encontrar en la carpeta `/bootloader`. Ejecuta los siguientes comandos desde la carpeta donde se encuentra el bootloader: