Vai al contenuto
QuinciSoft

// ESP32 · Firmware C++ · Circuiti di potenza

Domotica Casa

Un sistema di automazione domestica basato su microcontrollori ESP32, progettato e costruito a scopo didattico, sia per il codice sia per l’elettronica.

  • Hardware
  • Codice
  • Tensione di rete

Attenzione: tensione di rete. Alcuni nodi (nodo_fuori, nodo_boiler) comandano carichi collegati alla rete a 230 V: un errore può causare folgorazione e incendio. Lavora sempre a circuito scollegato dalla rete, usa un contenitore isolante e un fusibile adatto, e non toccare nulla mentre è alimentato. Se non hai esperienza con la tensione di rete, non realizzarli. Il progetto è descritto a scopo didattico: la realizzazione è sotto la responsabilità di chi la esegue.

Il progetto

Il sistema è composto da più nodi distribuiti in casa, ciascuno con un compito preciso (luce esterna, luce del bagno, campanello, boiler), coordinati da un server centrale con dashboard web. Ogni scelta, dal firmware al circuito di potenza, viene documentata passo per passo, perché il valore del progetto sta nel capire come e perché funziona.

Ogni nodo e il server hanno una pagina dedicata, con la descrizione del progetto e il materiale da scaricare (schemi, sorgenti, file di supporto): le trovi nell’elenco I nodi.

Architettura

Schema dell’architettura: il browser mostra la dashboard del server_s3; il server_s3 comunica via WebSocket con nodo_bagno, nodo_boiler e nodo_fuori; il nodo_cancello invia un messaggio ESP-NOW in broadcast a nodo_fuori e nodo_suoneria.
Architettura del sistema: server, nodi e campanello.

Il server S3 raccoglie telemetria e comandi dei nodi via WebSocket, una connessione bidirezionale che resta aperta e permette al server di inviare dati senza che il browser li richieda. Il pulsante del nodo cancello raggiunge nodo_fuori e nodo_suoneria con un messaggio ESP-NOW in broadcast: ESP-NOW è un protocollo di Espressif che mette in comunicazione le schede ESP32 senza router, e con l’indirizzo di broadcast il messaggio arriva a tutti i nodi in ascolto.

I nodi del sistema

Il server e ogni nodo hanno la propria pagina: apri quella che ti interessa per leggere la descrizione e scaricare il materiale.

server_s3

  • Hardware
  • Codice

ESP32-S3-Zero (Waveshare). Il cuore del sistema: raccoglie telemetria e comandi dei nodi e li mostra in un’unica dashboard web.

Apri la pagina: server_s3

nodo_fuori

  • Hardware
  • Codice
  • Tensione di rete

ESP32-C6-Zero (Waveshare). Comanda la luce esterna a 230 V con un triac, rileva la presenza con il radar e gestisce il campanello.

Apri la pagina: nodo_fuori

nodo_bagno

  • Hardware
  • Codice

ESP32-C3 SuperMini. Gestisce la luce del bagno in base alla presenza rilevata dal radar.

Apri la pagina: nodo_bagno

nodo_boiler

  • Hardware
  • Codice
  • Tensione di rete

ESP32-C3 SuperMini. Controlla il boiler con sensore di temperatura, orologio e display, e commuta il relè in sincronia con la rete.

Apri la pagina: nodo_boiler

nodo_cancello

  • Hardware
  • Codice

ESP32-C3-Zero (Waveshare). Trasmette la pressione del pulsante del campanello agli altri nodi con un messaggio ESP-NOW.

Apri la pagina: nodo_cancello

nodo_suoneria

  • Hardware
  • Codice

ESP32-C3-Zero (Waveshare). Riceve il messaggio del campanello e lo segnala con il modulo musicale.

Apri la pagina: nodo_suoneria

Hardware

Il sistema usa schede ESP32 di diverse famiglie, scelte in base ai pin e alle funzioni richieste da ciascun nodo.

Nodi, schede e funzioni
NodoSchedaFunzione
server_s3ESP32-S3-Zero (Waveshare)Server WebSocket (porta 8080) e dashboard web
nodo_fuoriESP32-C6-Zero (Waveshare)Luce esterna, campanello, radar, sensore di temperatura
nodo_bagnoESP32-C3 SuperMiniLuce del bagno con radar
nodo_boilerESP32-C3 SuperMiniControllo boiler con sensore di temperatura, RTC e display
nodo_cancelloESP32-C3-Zero (Waveshare)Pulsante campanello, trasmettitore
nodo_suoneriaESP32-C3-Zero (Waveshare)Modulo musicale, ricevitore

I componenti principali

  • Radar di presenza HLK-LD2410C: collegato in UART a 256000 baud con protocollo binario.
  • LED RGB WS2812: indicatore di stato, con ordine colori GRB.
  • Uscite di potenza a 230 V: triac MAC97 con optoisolatore MOC3021 su nodo_fuori (l’optoisolatore tiene separato il microcontrollore dalla rete mentre pilota il triac); sul boiler, rilevamento del passaggio per lo zero con H11AA1 e relè meccanico.
  • Sensori di temperatura DS18B20 e orologio DS3231 (RTC).
  • Radiocomandi a 433 MHz per i nodi fuori e suoneria.

Firmware e principi di progetto

Il firmware è scritto in C++ con framework Arduino e ESPAsyncWebServer; ogni nodo salva la propria configurazione su LittleFS (ArduinoJson v7). Lo sviluppo avviene con Arduino IDE, con PlatformIO (piattaforma pioarduino) per le schede C3 e C6.

Alcune regole rigorose valgono per tutti i nodi:

  1. Nessun codice bloccante fuori dalla funzione setup(): il nodo deve restare sempre reattivo.
  2. La funzionalità prevale sull’interfaccia: la logica di controllo non dipende mai dalla pagina web.
  3. Modi AUTO e MANUAL: in AUTO decidono radar e timer; passando da manuale ad automatico l’uscita viene riportata a livello basso.
  4. Callback ESP-NOW leggere: impostano soltanto un flag volatile, senza operazioni lente.
  5. Sicurezza dell’uscita: un timeout massimo di accensione blocca l’uscita in AUTO e richiede il ripristino manuale dell’operatore; sul boiler la protezione termica ha due livelli (WARNING e CRITICAL).

Sul boiler il relè viene commutato in sincronia con il passaggio per lo zero della rete: l’optoisolatore H11AA1 genera un interrupt, e se la tensione di rete risulta assente il firmware ricorre a una commutazione di riserva.

Interfaccia web e protocollo

Ogni nodo espone una pagina web locale con WebSocket su /wsLocal (porta 80); il server S3 raccoglie lo stato di tutti i nodi in un’unica dashboard. I messaggi sono in formato JSON:

Messaggi scambiati
DirezioneEsempio
Nodo → browser (telemetria){"type":"telemetry","node":"nodo_fuori","presence":true}
Browser → nodo (comando){"cmd":"mode","value":"AUTO"}
Evento campanello{"type":"event","node":"nodo_fuori","event":"bell"}

Sviluppi futuri

  • Display touch per il boiler (migrazione a ESP32-C6-Zero) e per il server (Nextion NX4024T032).
  • Spegnimento del triac su sovratemperatura nel nodo esterno, dopo la raccolta di dati reali.
  • Doppia protezione del nodo cancello contro falsi impulsi all’accensione (finestra software e resistenza di pulldown).

Hai domande sul progetto?

Scrivimi dalla pagina Contatti: ti rispondo appena possibile.

← Torna alla sezione Domotica