Leggere è la metà facile. Comandare qualcosa introduce due problemi che i sensori non hanno: la corrente, perché un pin dell’ESP32 eroga 20-40 mA e qualsiasi cosa si muova o scaldi ne vuole molti di più, e lo stato sicuro, perché un sensore che si riavvia perde una lettura mentre un relè che si riavvia può lasciare accesa una stufa.

In questo capitolo vediamo relè, uscite PWM, LED indirizzabili, motori e trasmettitori infrarossi: cosa serve per pilotarli, come si configurano in ESPHome, e soprattutto come si decide cosa deve succedere quando il chip si riavvia o il Wi-Fi cade.

Relè: accendere e spegnere qualcosa

Il relè è un interruttore comandato elettricamente, ed è l’attuatore più comune. Un pin dell’ESP32 non può pilotarlo direttamente (una bobina vuole 60-100 mA), quindi si compra un modulo relè, che è il relè più il transistor di pilotaggio più il diodo di protezione, per 2-5 €.

switch:
  - platform: gpio
    pin: GPIO7
    name: "Presa scrivania"
    id: presa_scrivania
    restore_mode: RESTORE_DEFAULT_OFF

Tre cose da sapere prima di comprare.

La tensione di comando. Molti moduli sono nati per Arduino e vogliono 5 V sull’ingresso di controllo. A 3,3 V spesso “quasi” funzionano, cioè scattano in modo inaffidabile e a volte non si diseccitano. Compra moduli dichiarati 3,3 V, oppure alimenta il modulo a 5 V e usa un transistor per il comando.

La logica invertita. La maggior parte dei moduli relè cinesi è attiva a livello basso: il relè si chiude quando il pin va a massa. Se il tuo si comporta al contrario di come lo comandi, aggiungi inverted: true nella definizione del pin. È normale, non è rotto.

La corrente della bobina. Un modulo a otto relè con tutti i relè eccitati assorbe mezzo ampere solo di bobine. Non alimentarlo dal pin 3V3 della board: serve un’alimentazione propria, come detto in 3 Pin bus e alimentazione.

Cosa succede dopo un blackout

Il restore_mode è il parametro più importante di tutto il capitolo, e quello che la gente scopre nel modo peggiore. Dice cosa fa l’uscita quando il chip si riavvia:

ValoreComportamento
RESTORE_DEFAULT_OFFRipristina l’ultimo stato salvato; se non c’è, resta spento
RESTORE_DEFAULT_ONRipristina l’ultimo stato; se non c’è, si accende
ALWAYS_OFFParte sempre spento, qualunque cosa fosse prima
ALWAYS_ONParte sempre acceso

La scelta non è tecnica, è di sicurezza, e va fatta pensando al caso peggiore. Una stufetta deve essere ALWAYS_OFF: se manca la corrente a casa vuota e torna alle tre di notte, non deve riaccendersi da sola. Una pompa di ricircolo o un frigorifero vogliono RESTORE_DEFAULT_ON, perché il danno è nel restare spenti. Una luce di solito ALWAYS_OFF, per non svegliare tutti quando torna la corrente.

Il valore predefinito di ESPHome è RESTORE_DEFAULT_OFF, che è ragionevole ma non è sempre quello che vuoi. Deciderlo esplicitamente per ogni relè è due secondi di lavoro che evitano una brutta sorpresa.

Interlock: due relè che non devono mai stare insieme

Quando comandi un motore reversibile (una tapparella, una valvola, un cancello), i due relè “su” e “giù” non devono mai essere chiusi contemporaneamente, perché metteresti in corto le due fasi. ESPHome ha una protezione dichiarativa:

switch:
  - platform: gpio
    pin: GPIO7
    id: tapparella_su
    interlock: [tapparella_giu]
    interlock_wait_time: 500ms
  - platform: gpio
    pin: GPIO8
    id: tapparella_giu
    interlock: [tapparella_su]
    interlock_wait_time: 500ms

L’interlock garantisce che accendendone uno l’altro si spenga; l’interlock_wait_time aggiunge una pausa fra i due, perché i contatti meccanici impiegano qualche decina di millisecondi ad aprirsi davvero. Non fidarti di gestirlo via automazione in Home Assistant: se il Wi-Fi cade a metà manovra, la protezione deve stare sul chip.

IL 230 V NON PERDONA

Tutto quello che sta oltre il relè, se è alimentato dalla rete, è un impianto elettrico e va trattato come tale. Le regole minime: alimentatore certificato (non il modulino AC-DC da 2 €), contenitore chiuso con separazione fisica netta fra la parte a bassa tensione e quella a 230 V, distanze di isolamento rispettate, e sezione dei conduttori adeguata al carico. I moduli relè cinesi dichiarano “10 A” sul contatto: sono valori di targa ottimistici, per un carico continuo non superare la metà.

E la regola che vale più di tutte: se devi intervenire nel quadro elettrico o su circuiti fissi, chiama un elettricista. Un progetto ESPHome dentro una scatola 503 è un lavoro elettrico a tutti gli effetti, non un esperimento su breadboard. Se preferisci non toccare il 230 V, la strada sicura è comandare una presa smart commerciale da Home Assistant e tenere l’ESP32 sui segnali a bassa tensione.

PWM: regolare invece di accendere

Il PWM accende e spegne l’uscita migliaia di volte al secondo variando la proporzione: al carico arriva una potenza media regolabile. Serve per le strisce LED monocolore, i ventilatori e tutto quello che ha un’intensità.

Un pin non regge una striscia LED, quindi serve un MOSFET (un IRLZ44N o un modulo pronto da 1-2 €) che faccia passare la corrente vera.

output:
  - platform: ledc
    pin: GPIO5
    id: uscita_led
    frequency: 1000Hz
 
light:
  - platform: monochromatic
    output: uscita_led
    name: "Striscia scrivania"
    default_transition_length: 500ms

Dichiarandola come light invece che come output grezzo, Home Assistant la vede come una luce vera con il cursore della luminosità, e il default_transition_length le fa fare le dissolvenze invece degli scatti.

Sulla frequenza: sotto i 500 Hz certe strisce LED sfarfallano in modo visibile in video (anche se l’occhio non lo nota), sopra i 20 kHz alcuni MOSFET scaldano. Mille hertz è un buon compromesso.

LED indirizzabili

Le strisce WS2812B (o SK6812, o NeoPixel) hanno un chip per LED: un solo filo dati controlla ogni LED individualmente per colore e luminosità.

light:
  - platform: esp32_rmt_led_strip
    rgb_order: GRB
    pin: GPIO6
    num_leds: 30
    chipset: WS2812
    name: "Striscia salotto"
    effects:
      - pulse:
      - rainbow:

Due avvertenze pratiche. La prima è la corrente: ogni LED a piena luminosità bianca assorbe circa 60 mA, quindi trenta LED fanno quasi 2 A e cento ne fanno 6. Serve un alimentatore dedicato dimensionato sul totale, e per strisce lunghe l’alimentazione va portata anche a metà e in fondo, altrimenti il colore degrada verso il rosa.

La seconda è il livello logico: le WS2812 vogliono un segnale dati a 5 V e l’ESP32 ne dà 3,3. Spesso funziona lo stesso (per fortuna, non per progetto), ma se hai sfarfallii o colori sbagliati la causa è quella e si risolve con un level shifter da 1 €.

Motori: servo, stepper, tapparelle

I servo sono il modo più semplice di ottenere un movimento angolare: tre fili, un segnale PWM, e vanno da 0° a 180°. Servono per valvole, sportelli, deviatori d’aria.

output:
  - platform: ledc
    pin: GPIO4
    id: pwm_servo
    frequency: 50Hz
 
servo:
  - id: valvola
    output: pwm_servo

Anche qui, alimentazione separata: un servo piccolo assorbe picchi di mezzo ampere allo spunto, e se lo alimenti dalla board mandi il chip in brownout.

Per le tapparelle ESPHome ha il componente cover, che è meglio di due switch grezzi perché espone in Home Assistant un’entità con apri/chiudi/ferma e una posizione stimata sul tempo di corsa. Sotto usa comunque due relè con l’interlock di cui sopra.

Infrarossi e radio 433 MHz

Un LED infrarosso da pochi centesimi trasforma l’ESP32 in un telecomando universale, il che è il modo più economico di rendere smart un condizionatore.

remote_transmitter:
  pin: GPIO14
  carrier_duty_percent: 50%
 
climate:
  - platform: daikin
    name: "Clima camera"

ESPHome ha componenti climate già pronti per decine di marche (Daikin, Mitsubishi, Toshiba, Gree, e generici Tuya): dichiari la marca e ottieni in Home Assistant un termostato completo con modalità, temperatura e velocità ventola. Se la tua marca non c’è, si può registrare il codice del telecomando con un ricevitore IR e ritrasmetterlo grezzo.

Il 433 MHz funziona allo stesso modo per vecchie prese telecomandate, sensori economici e alcuni cancelli. Costa 2 € di moduli TX/RX.

Il limite dell’infrarosso è che è cieco: trasmetti e speri. Il chip non sa se il condizionatore ha ricevuto il comando o se qualcuno ha usato il telecomando fisico. Per sapere davvero lo stato serve un sensore di temperatura di riscontro, o accettare che ogni tanto l’entità in Home Assistant dica una cosa e la realtà un’altra.

Lo stato sicuro quando il server sparisce

Il tema che attraversa tutto il capitolo: cosa fa l’attuatore se Home Assistant non c’è più?

Un chip ESPHome continua a funzionare senza Home Assistant. Le automazioni scritte nel YAML girano, i pulsanti fisici funzionano, i relè restano nello stato in cui erano. Quello che si perde sono le automazioni che stanno in Home Assistant.

Tre accorgimenti che rendono un attuatore adulto:

Il pulsante fisico va sul chip, non in Home Assistant. Se la luce del bagno si accende solo passando dal server, il giorno che il server è in aggiornamento la famiglia resta al buio. Ne parliamo diffusamente in 12 Automazioni on-device e deep sleep.

Metti un timeout di sicurezza sui carichi pericolosi. Un relè che comanda una stufa può avere sul chip una regola “spegniti comunque dopo due ore”, indipendente da qualsiasi automazione remota.

Scegli il restore_mode pensando al guasto, non all’uso normale. È la stessa domanda del capitolo: se questo dispositivo si riavvia da solo alle tre di notte mentre non sono in casa, cosa preferisco che faccia?

Ricapitolando

  • Un pin eroga 20-40 mA: qualsiasi attuatore vuole un modulo di potenza (relè, MOSFET, driver) e spesso un’alimentazione propria.
  • I moduli relè cinesi sono spesso a logica invertita e a 5 V: verifica prima di comprare, inverted: true dopo.
  • Il restore_mode è una scelta di sicurezza: ALWAYS_OFF per stufe e luci, RESTORE_DEFAULT_ON per pompe e frigo.
  • Per i motori reversibili usa l’interlock sul chip, mai una protezione affidata alle automazioni di Home Assistant.
  • Col 230 V servono alimentatori certificati, separazione fisica e competenze: in dubbio, comanda una presa smart commerciale.
  • PWM + MOSFET per le strisce monocolore, dichiarate come light per avere il cursore in Home Assistant.
  • Le WS2812 vogliono 60 mA per LED e un segnale dati a 5 V: alimentatore dedicato e level shifter.
  • Un LED infrarosso da pochi centesimi rende smart un condizionatore, ma è cieco: nessuna conferma di ricezione.
  • Il pulsante fisico deve funzionare anche senza Home Assistant; sui carichi pericolosi metti un timeout sul chip.