L’architettura Sentinel risolve alla radice le criticità del monitoraggio IoT industriale: la corruzione dei filesystem su schede SD, il degrado da scrittura della EEPROM e i blocchi del firmware per failover di rete non gestiti.

Version

Specifiche del nodo operativo

TARGET_CPU
ESP32-WROVER-E
STORAGE_TECH
FRAM (ZERO_SD)
SURGE_PROTECTION
PASS (14.89V)

La centralina Sentinel Node è l’hardware edge progettato per operare in ambienti industriali severi (cantine, celle frigorifere, linee di processo). L’architettura è rigorosamente Local-First: processa, valida e notarizza i dati direttamente sul campo in totale autonomia, garantendo la continuità operativa anche in caso di blackout prolungati dell’infrastruttura di rete.


La scheda inferiore con la Mini 560 per ricavare i 5V e 3.3V.

La scheda inferiore con ESP32 e Mini 560 per ricavare i 5V e 3.3V per la Sentinel.


La scheda superiore con MB85RC256V, RTC DS3231 e modulo ADS1115.

La scheda superiore con MB85RC256V, RTC DS3231 e modulo ADS1115.


Architettura del buffer e persistenza dati

1. Ring buffer persistente su memoria FRAM

L’unità integra una memoria FRAM MB85RC256V (32 KB) su bus I2C (0x50). A differenza della memoria Flash o SD-Card:

  • Scrittura byte-per-byte a latenza zero: Nessun tempo di attesa o ciclo di cancellazione pagina.
  • Resistenza meccanica ed elettrica: Fino a 10¹² cicli di scrittura/lettura, eliminando il problema dell’usura fisica (wear-out).
  • Struttura record validata: Ogni misurazione archiviata nel buffer circolare è preceduta da una signature di integrità (0xDEADBEEF) e protetta da un algoritmo di checksum custom a 16-bit per prevenire la lettura di dati parziali dovuti a interruzioni di alimentazione.

2. Supervisor FreeRTOS e Watchdog multilivello

Il firmware esegue un task dedicato (vSupervisorTask) pinnato sul Core 0 con monitoraggio attivo su tre vettori di blocco indipendenti:

CheckpointTimeout criticoVettore monitorato
last_loop_tick10 secondiStarvation del ciclo principale loop()
last_i2c_read45 secondiBlocco del bus I2C o stallo dei sensori
last_net_sync180 secondiFreeze dello stack di rete TCP/IP o del client HTTP

In caso di mancato aggiornamento di uno qualsiasi dei checkpoint, il Supervisor inibisce il reset del Watchdog hardware (WDT_TIMEOUT = 30s), forzando un reset pulito dell’ESP32. Durante le operazioni OTA, il supervisor entra in stato passivo per prevenire reboot indesiderati.

3. Autenticazione temporale deterministica

  • RTC DS3231 su bus I2C (0x68): Garantisce la marcatura oraria precisa anche senza connessione internet.
  • Controllo flag OSF (Oscillator Stop Flag): Se l’oscillatore viene azzerato (es. batteria tampone scarica), il nodo segnala la perdita di sincronia (0x08) e forza la riconnessione alla rete.
  • Gestione fuso orario POSIX: Sincronizzazione automatica dell’ora solare e legale tramite regola POSIX (CET-1CEST,M3.5.0,M10.5.0/3).

Sequenza diagnostica all’avvio (POST)

All’accensione, la centralina esegue un collaudo hardware automatico a 6 fasi con output diagnostico su display LCD 1602 (0x27):

  1. KERNEL CORE: Verifica della causa del reset e disponibilità heap RAM (>100 KB).
  2. I2C RECOVERY: Iniezione di impulsi di clock su SCL per lo sblocco di eventuali slave rimasti appesi.
  3. DS3231 RTC: Validazione registro di stato e carica della batteria di backup.
  4. FRAM SECTOR: Scrittura e rilettura di un test pattern (0xAA) sulla memoria fisica.
  5. MAX31865 PT1000: Verifica dei registri di fault e coerenza del range termico.
  6. 1-WIRE BUS: Scansione dell’integrità del bus e rilevamento corto-circuiti verso GND su GPIO 33.

Sincronizzazione asincrona e protocollo SaaS

In condizioni operative standard o al ripristino della connettività, il nodo comunica con il backend Kaspian Engine tramite protocollo Store-and-Forward:

  1. Svuotamento buffer sequenziale: Il nodo invia primariamente i record registrati in FRAM durante il periodo di offline.
  2. Handshake ACK: Il puntatore di lettura della FRAM (FRAM_READ_PTR_LOC) viene avanzato solo quando il server remoto risponde con codice di stato HTTP 201 Created.
  3. Notarizzazione real-time: Esauriti i dati pendenti, il nodo riprende l’invio diretto delle telemetrie aggiornate ogni 15 secondi.
{
  "version": 924,
  "status": 0,
  "drift": 0,
  "timestamp": "2026-08-15T09:55:59+02:00",
  "timestamp_utc": 1786780559,
  "voltage_0": 18.46,
  "voltage_1": 13.74,
  "ads_ch0": 1.245,
  "ads_ch1": 0.002
}

Mappatura dei bus di campo

Dispositivi mappati su bus I2C (GPIO 21 SDA / GPIO 22 SCL)

IndirizzoDispositivoFunzione operativaTensione
0x27LCD 1602HMI locale / diagnostica POST3.3 V
0x48ADS1115Bus analogico 4 canali 16-bit3.3 V
0x50MB85RC256VFRAM ring buffer (32 KB)3.3 V
0x68DS3231Real-time clock hardware3.3 V

Bus SPI dedicato per acquisizione PT1000 (MAX31865)

Pin ESP32Segnale SPIConfigurazione hardware
GPIO 25MISOInterfaccia dati MAX31865
GPIO 26MOSIInterfaccia dati MAX31865
GPIO 27SCKClock di sistema SPI
GPIO 32CSChip Select dedicato
Rref-4300 Ω (0.1%) per sonde PT1000

Bus 1-Wire (GPIO 33)

  • Sensore ambientale: DS18B20 con resistenza di pull-up da 4.7 kΩ integrata.
  • Diagnostica fault: Gestione valori sentinella (-99.0) per cavo scollegato, disconnessione della sonda o guasto elettrico.

SENTINEL NODE CORE V3.8
Sorgenti firmware C++ e documentazione hardware
[ CLONA SORGENTI ]