Un nodo di temperatura e presenza con ESP32-C3, SHT30 e radar LD2410C

Un termostato commerciale con il WiFi costa una trentina di euro, spesso dipende da un’app e da un cloud, e in bagno soffre l’umidità. Con un ESP32-C3 SuperMini, una sonda SHT30 su cavo e, se vuoi, un radar LD2410C si costruisce un nodo che misura temperatura e umidità, sa se nella stanza c’è qualcuno e parla con Home Assistant in MQTT o con l’API di ESPHome. Sono i nodi sensore di ORFHAn, ma funzionano anche da soli, con qualsiasi sistema domotico.

Che cosa serve

ComponentePerchéCosto indicativo
ESP32-C3 SuperMinipiccolo, WiFi, due seriali hardware liberecirca 4 €
Sonda SHT30 o SHT31 su cavo, IP65 o IP67testa in acciaio: regge il vapore del bagnocirca 4 €
Radar LD2410C (facoltativo)vede anche chi sta fermo, a differenza di un PIRcirca 6 €
Alimentatore 230 V → 5 V da incassouno per stanza, nella scatola del vecchio termostatocirca 15 €

Le sonde con la sigla -F hanno una membrana in PTFE che protegge il sensore senza rallentare la lettura. I moduli di marca costano parecchio di più delle sonde generiche su cavo, e in casa non danno niente in più.

I collegamenti

Collegamenti del nodo: sonda SHT3x in I²C e radar LD2410C sulla seriale dell’ESP32-C3

La sonda va sull’I²C: VCC al 3V3, GND a massa, SDA al GPIO8, SCL al GPIO9. I colori dei fili cambiano da un produttore all’altro: valgono le sigle.

Il radar va su una seriale: VCC al 5V, GND a massa, il TX del radar al GPIO4 (l’ingresso dell’ESP32) e l’RX del radar al GPIO5. TX e RX si incrociano: collegarli dritti è l’errore più comune, e il sintomo è un radar che sembra acceso ma non manda niente. Il radar vuole 5 V di alimentazione, ma i suoi segnali seriali sono a 3,3 V e vanno direttamente all’ESP32. Se vuoi esserne sicuro, misura col tester il piedino TX del radar acceso: deve dare circa 3,3 V.

Un’avvertenza sui piedini 8 e 9. Sull’ESP32-C3 sono piedini di avvio: il chip li legge all’accensione per decidere come partire, ed ESPHome lo segnala in compilazione. Con l’I²C sopra funziona, ma va provato nel modo giusto: dopo aver caricato il firmware, stacca la USB, togli e ridai corrente dall’alimentatore e guarda che il nodo riparta. Se a freddo non riparte, sposta l’I²C su un’altra coppia di piedini.

L’alimentazione, nella scatola a muro

La scatola da incasso del vecchio termostato è il posto naturale del nodo, ma lì dentro convivono i 230 V e l’elettronica a 5 V. Usa un modulo certificato, con isolamento galvanico dichiarato, fissalo bene e controlla che nessun conduttore a 230 V possa toccare la scheda. Il nodo consuma pochissimo: qualunque modulo da 5 W basta.

Spesso nella scatola arriva già un cavo a quattro fili della vecchia centralina. Si può riusare, ma prima va staccato dalla centralina, va misurata la tensione (non è detto che siano 12 o 24 V) e va capito dove finisce l’altro capo.

La configurazione in ESPHome

L’essenziale sta in poche righe. Questo è uno scheletro minimo, da completare con WiFi, MQTT o API:

esp32:
  board: esp32-c3-devkitm-1

i2c:
  sda: GPIO8
  scl: GPIO9

uart:
  rx_pin: GPIO4      # dal TX del radar
  tx_pin: GPIO5      # al RX del radar
  baud_rate: 256000
  parity: NONE
  stop_bits: 1

ld2410:

sensor:
  - platform: sht3xd
    temperature:
      name: "Temperatura"
    humidity:
      name: "Umidità"
    update_interval: 60s

binary_sensor:
  - platform: ld2410
    has_target:
      name: "Presenza"

Nel progetto i file sono divisi in tre: il modello della scheda (solo la piedinatura), alcuni pacchetti con la logica comune (rete, clima, presenza) e un file per ogni nodo, con il nome, la stanza e poco altro. Per un nodo nuovo si copia solo il file del nodo; per un modulo diverso si copia il modello e si cambiano i piedini.

Due consigli che ci sono costati tempo:

Per caricarlo la prima volta basta la USB. Alcuni cloni del SuperMini non hanno il riavvio automatico e si fermano su Connecting…: tieni premuto BOOT, premi e rilascia RESET, poi rilascia BOOT. Dalla seconda volta il firmware si aggiorna via rete.

La presenza: insegnare al radar dove finisce la stanza

Un radar a 24 GHz vede attraverso porte e pareti sottili: chi passa in corridoio, per lui, è nella stanza. Per questo il nodo non manda a Home Assistant le distanze grezze, ma una sola informazione già pulita: c’è qualcuno dentro (Presence) e si sta muovendo (Motion). Il filtro scarta i bersagli più lontani di una soglia, che si misura con il nodo già montato al suo posto definitivo, dal telefono, sulla pagina web del nodo:

  1. Centro: ti metti in piedi sotto il sensore e avvii il primo passo. Il nodo misura per dieci secondi e ti dice a che distanza ti vede. Serve a capire se ti vede davvero.
  2. Confine: ti metti sull’ultimo punto che deve contare come “dentro”, per esempio sulla soglia della porta, e avvii il secondo passo. La soglia diventa la distanza misurata più una tolleranza, di serie 30 cm, e resta salvata anche dopo un riavvio.
  3. Verifica: esci dalla porta, e la presenza deve spegnersi entro cinque secondi; rientra, e deve tornare accesa.

Se la presenza resta accesa con te fuori, abbassa la tolleranza e ripeti il secondo passo. Se si spegne mentre sei seduto vicino alla porta, alzala. In una stanza grande controlla anche fin dove guarda il radar: ogni gate del LD2410C vale 75 cm, e con il gate 4 si arriva a 3,75 m.

Il nodo assorbe già i rimbalzi del radar: aspetta due secondi prima di cambiare stato e cinque prima di dichiarare la stanza vuota. Non aggiungere in Home Assistant un altro ritardo di pochi secondi: si sommerebbe. I tempi legati all’uso, come spegnere la luce dopo dieci minuti di assenza, restano invece giustamente nelle automazioni. E se il radar non risponde, la presenza resta sconosciuta, non spenta: un’automazione che deve reggere un guasto va scritta su “è acceso”, non su “non è spento”.

Due radar, e l’ESP8266

Un ESP32-C3 può reggere due radar, per esempio in un soggiorno da guardare in due direzioni: il secondo va sui GPIO20 (dal suo TX) e GPIO21 (al suo RX). ESPHome lo supporta e nel progetto ha funzionato, ma in rete c’è chi segnala instabilità, con errori status != 0x01 nel log. Se li vedi, la soluzione pratica è un secondo nodo: costa pochi euro.

Un ESP8266 va bene per la sola sonda. Di radar ne regge al massimo uno, sulla sua unica seriale hardware spostata su altri piedini: a 256000 baud una seriale software perde i dati appena il WiFi la interrompe. Attenzione: ESPHome accetta lo stesso una configurazione con due radar su ESP8266, perché controlla lo schema e non la fisica.

Che cosa è provato

I file ESPHome completi, il disegno per l’ESP8266 e la guida all’installazione sono nel repository di ORFHAn.