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
| Componente | Perché | Costo indicativo |
|---|---|---|
| ESP32-C3 SuperMini | piccolo, WiFi, due seriali hardware libere | circa 4 € |
| Sonda SHT30 o SHT31 su cavo, IP65 o IP67 | testa in acciaio: regge il vapore del bagno | circa 4 € |
| Radar LD2410C (facoltativo) | vede anche chi sta fermo, a differenza di un PIR | circa 6 € |
| Alimentatore 230 V → 5 V da incasso | uno per stanza, nella scatola del vecchio termostato | circa 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
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:
- Un componente mancante non è un errore. Se un nodo non ha la sonda, all’avvio ESPHome scrive che il sensore è marked FAILED: vuol dire solo che non risponde, e quelle entità non vengono pubblicate. Così lo stesso firmware va bene per nodi con la sola sonda, con il solo radar o con tutti e due.
- Se usi solo MQTT, spegni il riavvio dell’API. Di serie l’API di ESPHome riavvia il nodo se per 15 minuti nessun client si collega, e con i dati su MQTT quel client non arriva mai. Il sintomo è un nodo che si riavvia ogni quarto d’ora con
No clients; rebootingnel log. Si risolve conreboot_timeout: 0ssottoapi:.
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:
- 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.
- 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.
- 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
- Nodi ESP32-C3 con sonda SHT3x e radar LD2410C: provati su hardware, compresi i due radar sullo stesso nodo e la taratura della distanza.
- ESP8266 con radar: la configurazione passa i controlli di ESPHome, ma non è mai stata provata su un modulo vero.
- Collegamento a intervalli (il nodo di sola temperatura si collega ogni tre minuti, manda i valori e stacca, per non occupare connessioni sul broker): compilato, non ancora provato su un nodo acceso.
I file ESPHome completi, il disegno per l’ESP8266 e la guida all’installazione sono nel repository di ORFHAn.