T-Shirt Smart

Andrea De Dominicis & Nicolò Miccoli

Sistema di Monitoraggio Biometrico Edge-Cloud

In collaborazione con IIT di Arnesano e IDA Lab dell'Università del Salento

Il sistema T-Shirt Smart rappresenta una soluzione per il monitoraggio continuo e non invasivo dei parametri fisiologici attraverso una t-shirt dotata di sensori biomedici integrati. Il sistema sfrutta modelli di Intelligenza Artificiale per l'esecuzione di tecniche di anomaly detection sui segnali biometrici acquisiti, con l'obiettivo di identificare tempestivamente comportamenti anomali o potenzialmente pericolosi rispetto al profilo fisiologico dell'utente.

L'architettura del sistema è progettata secondo un paradigma edge-cloud, al fine di garantire l'acquisizione in tempo reale dei dati biometrici, una bassa latenza nella rilevazione delle anomalie e una gestione flessibile dei modelli di Intelligenza Artificiale. In particolare, l'elaborazione dei segnali in edge consente di generare meccanismi di allerta verso il paziente e il personale medico in caso di eventi critici, riducendo i tempi di reazione.

Tale approccio permette inoltre di limitare la dipendenza da una connettività continua verso il cloud, ottimizzando le prestazioni complessive del sistema e garantendo la continuità operativa anche in presenza di connettività intermittente, senza compromettere le funzionalità di monitoraggio e segnalazione.

Segnali Biometrici Monitorati

Sensore Descrizione
ECG Segnale elettrocardiografico
Temperatura Temperatura corporea
Piezoelettrico Segnali di movimento e postura
Architettura generale del sistema
Figura 1.1: Architettura generale del sistema T-Shirt Smart

Architettura del Sistema

Il sistema T-Shirt Smart si articola su tre livelli architetturali distinti che collaborano per garantire un flusso continuo ed efficiente dei dati biometrici. Ciascun livello è progettato per operare in modo autonomo, garantendo modularità, scalabilità e continuità operativa anche in scenari di connettività intermittente.

Livello 1 - Acquisizione Dati

Dispositivo indossabile con sensori integrati e trasmissione wireless via Bluetooth Low Energy

Livello 2 - Edge Computing

Gateway Raspberry Pi 5 per elaborazione locale, inferenza ML e comunicazione verso il cloud

Livello 3 - Cloud Computing

Server cloud che riceve i dati dal Raspberry Pi, li visualizza e permette l'addestramento di nuovi modelli

Dispositivo Indossabile

Il dispositivo indossabile è costituito da una t-shirt HiTech nella quale sono integrati sensori biomedici che consentono l'acquisizione continua e non invasiva dei parametri fisiologici dell'utente. I sensori integrati sono collegati a una piattaforma di acquisizione basata sul microcontrollore Nordic nRF5340, che svolge il ruolo di unità di controllo e gestione dei dati.

Architettura Hardware

Il microcontrollore nRF5340 è una piattaforma dual-core composta da:

Application Core

Responsabile della comunicazione con i sensori periferici, della gestione delle interfacce hardware e dell'elaborazione preliminare dei dati acquisiti.

Network Core

Dedicato esclusivamente alla gestione della comunicazione Bluetooth Low Energy (BLE), consentendo una separazione chiara tra logica applicativa e comunicazione wireless.

Questa architettura migliora l'affidabilità del sistema e consente di mantenere prestazioni stabili anche in presenza di flussi di dati continui.

Trasmissione Dati

I dati acquisiti dai sensori vengono organizzati dal microcontrollore in pacchetti binari strutturati, con dimensione massima pari a 240 byte, in conformità con le specifiche dello stack Bluetooth Low Energy. I pacchetti vengono trasmessi via BLE verso un dongle USB ricevente basato sul microcontrollore nRF52840, anch'esso prodotto da Nordic Semiconductors.

Dongle USB con microcontrollore nRF52840
Figura 2.1: Dongle USB BLE basato su microcontrollore nRF52840 utilizzato per la ricezione dei dati biometrici trasmessi dalla T-Shirt Smart

Il dongle riceve i pacchetti trasmessi, li decodifica secondo il protocollo di comunicazione definito e rende i dati disponibili al gateway edge. Dal punto di vista del sistema operativo del gateway, il dongle espone i flussi di dati biometrici tramite porta seriale virtuale.

Stati Operativi

Il dispositivo indossabile fornisce feedback visivo attraverso LED di stato integrati:

Stato LED Significato
Spento Sistema non alimentato
Blu lampeggiante Sistema acceso, pronto alla connessione BLE
Blu fisso Fase di collegamento in corso
Blu + Verde + Rosso Connessione stabilita, trasmissione attiva
Prototipo hardware T-shirt smart
Figura 2.2: Sistema operativo e trasmissione dati attiva - la presenza simultanea dei LED blu, verde e rosso indica che la connessione BLE è stata stabilita correttamente e che la scheda sta trasmettendo i dati biometrici acquisiti

Gateway Edge (Raspberry Pi 5)

Il gateway edge rappresenta un componente centrale nell'architettura del sistema T-Shirt Smart ed è implementato su piattaforma Raspberry Pi 5. Esso svolge il ruolo di nodo di edge computing, fungendo da punto di raccolta, elaborazione, visualizzazione e inoltro dei dati biometrici, provenienti dal dispositivo indossabile, verso il cloud.

La collocazione del gateway a livello edge consente di ridurre la latenza nella gestione dei segnali e di garantire la continuità operativa del sistema anche in presenza di connettività intermittente verso l'infrastruttura cloud.

Elaborazione dei Dati

Il Raspberry Pi riceve i pacchetti trasmessi dalla piattaforma Nordic tramite la connessione seriale virtuale instaurata dal dongle Bluetooth Low Energy collegato via USB. I pacchetti ricevuti vengono sottoposti a una fase di validazione, durante la quale i dati vengono decodificati, verificati e classificati in base alla tipologia di segnale (ECG, temperatura corporea, segnale piezoelettrico).

Dashboard Locale

Una volta elaborati, i dati biometrici vengono resi disponibili a una dashboard locale eseguita direttamente sul gateway edge. La dashboard, sviluppata come applicazione web, consente la visualizzazione in tempo reale dei segnali acquisiti, organizzando i grafici in modo distinto per ciascun sensore. Un aspetto rilevante è che la visualizzazione locale rimane disponibile anche in assenza di connessione verso il server cloud, aumentando l'affidabilità complessiva del sistema.

Dashboard locale per il monitoraggio dei parametri biometrici
Figura 2.3: Dashboard locale eseguita sul gateway edge per la visualizzazione in tempo reale dei segnali ECG, dei canali ADC e dell'andamento della temperatura corporea

Anomaly Detection

Oltre alle funzionalità di acquisizione e visualizzazione, il gateway edge ospita i moduli di inferenza per la rilevazione automatica delle anomalie. I modelli di anomaly detection vengono addestrati lato cloud e successivamente convertiti in formato TensorFlow Lite, ottimizzato per l'esecuzione su dispositivi embedded. I modelli così ottenuti vengono caricati sul Raspberry Pi ed eseguiti direttamente sul gateway, consentendo l'analisi dei segnali biometrici in tempo quasi reale.

Schema elaborazione segnali e anomaly detection
Figura 2.4: Schema di elaborazione dei segnali biometrici acquisiti dalla smart T-shirt e delle relative strategie di rilevazione delle anomalie

Questa scelta architetturale permette di ridurre significativamente la latenza nella rilevazione delle anomalie e di mantenere attivo il sistema di monitoraggio anche in caso di temporanea disconnessione dal cloud.

Infrastruttura Cloud

La componente cloud è implementata, in fase di sviluppo e test, su un PC dedicato. In particolare, per le attività di sperimentazione è stato utilizzato un MacBook Air M1, configurato per ospitare i diversi servizi inclusi nella parte cloud del progetto Smart T-Shirt.

La decisione di adottare una piattaforma locale anziché un'infrastruttura cloud commerciale, come AWS o Microsoft Azure, è stata motivata da esigenze di contenimento dei costi, nonché dalla volontà di mantenere un maggiore controllo sull'ambiente di esecuzione durante le fasi di sviluppo e validazione del sistema. L'architettura del sistema rimane comunque facilmente migrabile verso soluzioni cloud, qualora richiesto da scenari applicativi futuri.

Modulo di Ricezione e Archiviazione

Il modulo di ricezione è responsabile dell'acquisizione dei dati biometrici pubblicati dal gateway edge tramite il protocollo MQTT. Tali dati vengono archiviati in modo persistente secondo una struttura organizzata per sessioni di acquisizione e tipologia di segnale biometrico. Questa organizzazione consente sia la tracciabilità storica delle misurazioni sia l'esecuzione di analisi sui dati raccolti nel tempo.

Dashboard Cloud

La dashboard cloud fornisce un'interfaccia web avanzata per il monitoraggio, l'analisi e la gestione del sistema. Include funzionalità di visualizzazione in tempo reale dei segnali, accesso allo storico delle sessioni, gestione dei modelli di anomaly detection, e configurazione del sistema.

Comunicazione Edge-Cloud

La comunicazione tra il gateway edge e l'infrastruttura cloud avviene tramite il protocollo MQTT (Message Queuing Telemetry Transport), un protocollo leggero progettato per applicazioni IoT che garantisce affidabilità anche in presenza di connettività limitata o intermittente.

Architettura MQTT Publisher-Subscriber
Figura 2.5: Architettura MQTT Publisher-Subscriber - il Raspberry Pi 5 pubblica i dati biometrici verso il cloud che agisce come subscriber

Il Raspberry Pi 5 agisce come publisher MQTT, pubblicando i dati biometrici acquisiti e gli eventi di sistema su topic specifici. Il server cloud opera come subscriber MQTT, iscrivendosi ai topic di interesse e ricevendo i messaggi pubblicati dal gateway edge.

Comunicazione Edge-Cloud tramite MQTT e REST
Figura 2.6: Schema completo della comunicazione Edge-Cloud - utilizzo combinato di MQTT per il flusso dati real-time e REST API per sincronizzazione modelli ML e configurazioni
Struttura topic MQTT
Figura 2.7: Struttura dei topic MQTT utilizzati per la categorizzazione dei dati biometrici, anomalie e eventi di sistema
Flusso dati dalla raccolta all'AI
Figura 2.8: Ciclo completo del flusso dati - dalla raccolta tramite T-Shirt Smart, all'elaborazione edge, all'archiviazione cloud, fino al training dei modelli AI e distribuzione verso il Raspberry Pi

Descrizione dei Componenti

Componente Edge

Il componente Edge implementa tutte le funzionalità del gateway Raspberry Pi 5. È progettato per operare in modo autonomo e resiliente, garantendo la continuità del monitoraggio anche in assenza di connettività cloud.

Core Application

IITdata_acq.py

Script principale di acquisizione dati. Gestisce la comunicazione seriale con il dongle USB BLE, coordina i thread di lettura per shell e data port, e orchestra il flusso completo di acquisizione, storage e pubblicazione MQTT.

dashboard_server.py

Server Flask che implementa la dashboard web locale. Fornisce interfaccia real-time per visualizzazione segnali biometrici, controllo acquisizione, consultazione storico sessioni e gestione modelli ML.

Data Acquisition & Processing

serial_threads.py

Thread worker per comunicazione seriale. Implementa LineReader per shell port (comandi) e data port (stream dati), con gestione eventi e validazione connessione.

handler_data.py

Parser dei pacchetti binari ricevuti dal dispositivo BLE. Decodifica la struttura dei pacchetti (240 byte) ed estrae i campioni per ciascuna tipologia di segnale (ECG, temperatura, piezoelettrico).

channel_manager.py

Gestore delle code temporali dei dati. Mantiene buffer separati per ciascun sensore, gestisce le differenti frequenze di campionamento e fornisce i dati ai moduli di visualizzazione e anomaly detection.

Storage & Persistence

data_storage.py

Modulo di archiviazione persistente. Organizza i dati acquisiti in sessioni strutturate (cartelle per data e sessione), salva metadata JSON e gestisce file JSONL per i campioni.

fix_metadata.py

Script utility per ricalcolo metadata sessioni. Conta campioni effettivi nei file JSONL, ricalcola end_time corretto basandosi su frequenze di campionamento.

Anomaly Detection

ecg_anomaly_detector.py

Detector di anomalie per segnali ECG. Carica modelli TensorFlow Lite, esegue inferenza autoencoder in tempo reale, calcola reconstruction error e applica threshold per classificazione.

piezo_anomaly_detector.py

Detector di anomalie per segnali piezoelettrici. Opera in modo analogo al detector ECG, specializzato per pattern di movimento e postura.

temp_anomaly_detector.py

Detector di anomalie per segnali di temperatura corporea. Monitora trend temporali, rileva ipotermia/ipertermia attraverso threshold fissi e classifica severity basandosi su durata e intensità dell'anomalia.

model_management_api.py

API REST per gestione modelli ML. Fornisce endpoint per listing, attivazione e configurazione modelli, con gestione file active_model.json per selezione runtime.

Cloud Communication

mqtt_publisher.py

Client MQTT per pubblicazione dati verso il cloud. Gestisce topic separati per real-time, storage e anomalie, implementa batching e reconnection automatica.

mqtt_config.py

File di configurazione MQTT centralizzato. Definisce broker address, topic structure, batch sizes, sync intervals e opzioni QoS/TLS.

file_watcher_addon.py

Modulo opzionale basato su watchdog. Monitora cartelle data_storage e anomaly_logs, triggera sync automatico dei file modificati verso MQTT cloud.

Authentication & User Management

auth_db.py

Database SQLite per autenticazione utenti. Implementa hashing password con bcrypt, gestione sessioni con token, e supporto per sincronizzazione con il cloud.

db_sync_module.py

Servizio di sincronizzazione database utenti tra edge e cloud. Confronta timestamp updated_at, risolve conflitti e mantiene coerenza bidirezionale via REST API.

Configuration & Utilities

detect_usb_ports.py

Utility cross-platform per rilevamento automatico porte seriali USB. Scansiona dispositivi disponibili e gestisce configurazione port shell/data persistente.

usb_ports_config.json

File di configurazione JSON per porte seriali USB. Specifica i device path per shell_port e data_port del dongle BLE.

file_log_watcher.py

Esegue un monitoraggio del file system.log. Legge nuove righe, le classifica (MQTT, Dashboard, Anomaly) e le invia via SocketIO per debug live.

simulate_anomaly.py

Generatore di anomalie sintetiche per testing. Crea sample data realistici (forme d'onda ECG, pattern PIEZO) e popola file anomaly_logs per sviluppo/debug.

Frontend - HTML Templates & JavaScript

dashboard.html & dashboard.js

Template HTML e controller JavaScript principale. Struttura la dashboard con sezioni per visualizzazione real-time, storico sessioni, anomalie, gestione modelli, debug e settings.

anomalies.js

Modulo per visualizzazione anomalie rilevate. Implementa filtri per tipologia/data, rendering card anomalie con grafici sample data e funzionalità export JSON/CSV.

history.js

Gestione interfaccia dati storici. Carica elenco sessioni acquisite, visualizza metadata, permette consultazione grafici retrospettivi e download sessioni.

models.js

Interfaccia gestione modelli ML. Visualizza modelli disponibili per ECG/PIEZO, permette selezione modello attivo e configurazione threshold dinamici.

debug.js

Console debug real-time via SocketIO. Riceve log dal server categorizzati per modulo, applica filtri per livello e supporta export.

notifications.js

Sistema notifiche push persistent. Riceve eventi anomalia via SocketIO, mostra toast notification con sample data e gestisce audio alerts.

settings.js

Pannello configurazione porte seriali USB. Rileva automaticamente porte disponibili e permette assegnazione shell_port/data_port.

user_management.js

Interfaccia admin per gestione utenti. Lista utenti registrati, permette creazione/modifica/eliminazione account e gestione ruoli.

Componente Cloud

Il componente Cloud implementa tutte le funzionalità del server centralizzato. È progettato per la ricezione dati MQTT dal Raspberry Pi, archiviazione persistente, training modelli ML computazionalmente onerosi e distribuzione automatica verso edge.

Core Application

dashboard_server_cloud.py

Server Flask principale per dashboard web cloud. Gestisce API REST per consultazione dati storici, visualizzazione anomalie, training modelli ML, gestione utenti e deploy automatico modelli verso Raspberry Pi via HTTP.

receiver.py

Client MQTT subscriber che riceve dati dal Raspberry Pi. Ascolta topic per stream real-time, sessioni complete, anomalie rilevate e salva tutto in storage persistente cloud per analisi retrospettive.

Machine Learning Training

model_trainer_ecg.py

Script training autoencoder per anomaly detection ECG. Carica dati da sessioni selezionate, costruisce architettura encoder-decoder TensorFlow/Keras, esegue training con early stopping e genera grafici loss/reconstruction.

model_trainer_piezo.py

Script training autoencoder per anomaly detection PIEZO. Implementa architettura analoga a ECG ma specializzata per pattern piezoelettrici, gestisce normalizzazione dati e export TensorFlow Lite.

training_manager.py

Manager orchestrazione job training modelli ML. Gestisce lifecycle completo training, tracking metadata, organizzazione directory modelli e indicizzazione trainings per UI dashboard.

data_loader.py

Modulo caricamento dati per training modelli. Scansiona cartelle data_storage, carica sessioni JSONL, estrae campioni ECG/PIEZO e gestisce aggregazione multi-sessione.

Cloud Communication & Sync

db_sync_module.py

Servizio sincronizzazione database utenti bidirezionale edge-cloud. Confronta timestamp updated_at e risolve conflitti (last-write-wins).

Authentication & User Management

auth_db.py

Database SQLite per autenticazione utenti. Implementa hashing password con bcrypt, gestione sessioni con token, supporto per sincronizzazione con edge e gestione ruoli.

Configuration & Utilities

raspberry_config.json

File configurazione deployment automatico modelli. Specifica IP Raspberry Pi, porta API, chiave autenticazione e flag auto_upload per trigger automatico post-training.

file_log_watcher.py

Monitor real-time file system.log. Legge nuove righe via polling, categorizza per modulo e streama log alla dashboard via SocketIO per console debug live.

fix_metadata.py

Utility manutenzione metadata sessioni. Ricalcola total_samples contando righe effettive JSONL, corregge end_time basandosi su frequenze campionamento.

Frontend - HTML Templates & JavaScript

dashboard_cloud.html & dashboard.js

Template HTML principale e controller JavaScript dashboard cloud. Struttura interfaccia con sezioni storico sessioni, visualizzazione anomalie aggregate, training modelli ML, gestione utenti admin e console debug.

history.js

Modulo consultazione storico sessioni acquisite. Carica elenco sessioni da storage cloud, visualizza metadata e permette selezione multi-sessione per training.

models.js

Interfaccia completa training modelli ML cloud. Gestisce selezione tipo modello, configurazione parametri training, selezione sessioni dataset, monitoring progress real-time e gestione deployment automatico a Raspberry Pi.

anomalies.js

Modulo visualizzazione storico anomalie cloud. Carica date disponibili, filtra per tipologia, rendering card con mini-grafici Plotly e export JSON multi-sessione.

debug.js

Console debug real-time via SocketIO. Riceve log dal server categorizzati per modulo, applica filtri per livello e supporta export e clear.

notifications.js

Sistema notifiche push persistent. Riceve eventi anomalia via SocketIO, mostra toast notification con sample data e gestisce audio alerts opzionali.

user_management.js

Interfaccia admin per gestione utenti. Lista utenti registrati, permette creazione/modifica/eliminazione account e gestione ruoli.

auth.js

Modulo autenticazione client-side. Gestisce login/logout, storage token localStorage e verifica sessioni valide.

Avvio del Sistema

Configurazione Iniziale

1. Collegamento Hardware

Collegare il dongle USB al Raspberry Pi

2. Configurazione Porte Seriali

Esistono due modalità per configurare le porte seriali:

Modalità Manuale

  • Aprire il file usb_ports_config.json presente sul Raspberry Pi
  • Modificare il file inserendo le porte seriali corrette

Modalità con Interfaccia Grafica

  • Avviare IITdata_acq.py
  • Eseguire l'accesso
  • Dal menu Impostazioni, selezionare le porte seriali corrette
  • Salvare la configurazione
  • Fermare IITdata_acq.py
Configurazione porte seriali tramite interfaccia grafica
Figura 5.1: Interfaccia di configurazione delle porte seriali USB per la comunicazione con il dongle BLE

3. Avvio della T-Shirt Smart

T-Shirt pronta per la connessione
Figura 5.2: T-Shirt Smart pronta per la connessione (LED blu lampeggiante)

4. Avvio dei Servizi

Avviare i seguenti componenti nell'ordine indicato:

1. receiver.py (sul cloud)

Avvia il subscriber MQTT per la ricezione dei dati

2. dashboard_server_cloud.py (sul cloud)

Avvia il server web della dashboard cloud

3. IITdata_acq.py (sul Raspberry Pi)

Avvia l'acquisizione dati e la pubblicazione MQTT

Verifica della Connessione: Una volta stabilita la connessione, i LED verde e blu sulla T-Shirt saranno entrambi accesi.

T-Shirt in modalità acquisizione
Figura 5.3: T-Shirt Smart connessa e in modalità acquisizione (LED blu e verde accesi)

Riavvio del Sistema

In caso sia necessario riavviare il sistema:

Autori

Progetto sviluppato nell'ambito del corso di Internet of Things, A.A. 2024/2025, presso l'Università del Salento.

In collaborazione con l'Istituto Italiano di Tecnologia (IIT) e IDA Lab Unisalento