T-Shirt Smart
Andrea De Dominicis & Nicolò Miccoli
Sistema di Monitoraggio Biometrico Edge-Cloud
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 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.
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 |
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.
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.
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.
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.
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.jsonpresente 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
3. Avvio della T-Shirt Smart
- Tenere premuto il pulsante sulla T-Shirt per 3 secondi
- Verificare che il LED blu lampeggi, indicando il corretto avvio
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.
Riavvio del Sistema
In caso sia necessario riavviare il sistema:
- Fermare i servizi:
receiver.py,dashboard_server_cloud.py,IITdata_acq.py - Spegnere la T-Shirt Smart tenendo premuto il pulsante per 3 secondi
- Attendere lo spegnimento completo e riaccendere la scheda
- Ripetere la procedura dal punto 3 della sezione "Avvio del Sistema"
Link
Repository GitHub
Edge Component - Raspberry Pi
Repository contenente il codice per il componente Edge implementato su Raspberry Pi 5.
Vai al repository Edge →Cloud Component - Server
Repository contenente il codice per il componente Cloud con dashboard e training modelli ML.
Vai al repository Cloud →Risorse Aggiuntive
Video Demo
Dimostrazione pratica del funzionamento completo del sistema T-Shirt Smart.
Guarda video demo →Documentazione Completa
Documentazione tecnica dettagliata del progetto con specifiche e guide di implementazione.
Link da inserire →Autori
Progetto sviluppato nell'ambito del corso di Internet of Things, A.A. 2024/2025, presso l'Università del Salento.