
Il pulsante è uno strumento molto pratico per creare automazioni con diversi scenari, programmandolo affinché reagisca a pressioni singole, doppie o prolungate
Configurare un pulsante fisico con un microcontrollore come l’ESP32 e integrarlo in Home Assistant apre la strada a un’infinità di automazioni personalizzate. Dalla gestione dell’illuminazione alla creazione di scenari complessi, il pulsante diventa un’interfaccia semplice e affidabile per controllare la smart home. In questo articolo mostriamo come impostare un sistema in grado di distinguere tra click singolo, doppio click e pressione prolungata, fornendo la base per creare automazioni flessibili e intuitive.
Acquista su Amazon:
- ESP32: https://amzn.to/4n2EybS
- Pulsante: https://amzn.to/4ny02gJ
Acquista su Aliexpress:
- ESP32: https://s.click.aliexpress.com/e/_oCguon1
- Pulsante: https://s.click.aliexpress.com/e/_on1p8HH
Specifiche tecniche
Il progetto si basa su un ESP32 programmato tramite ESPHome, una piattaforma che consente di definire il comportamento dei dispositivi direttamente in YAML senza scrivere codice complesso in C o C++. Il pulsante viene collegato a un pin GPIO configurato come ingresso con pull-up interno, in modo che lo stato sia stabile e interpretabile dal firmware. Gli eventi generati vengono esposti come entità testuali in Home Assistant, permettendo di distinguere chiaramente le tre tipologie di interazione: singolo click, doppio click e pressione lunga. Questa struttura garantisce una comunicazione diretta e immediata tra hardware e software, lasciando al sistema domotico il compito di associare azioni specifiche a ogni tipo di evento.
Potremmo adoperare qualsiasi tipo di pulsante, anche i semplicissimi pulsanti presenti in tanti tutorial su Arduino. Noi però abbiamo voluto adoperare un pulsante per computer, dotato anche di anello LED integrato.
Collegamenti
Il collegamento del pulsante è estremamente semplice. È sufficiente collegare il Normalmente Aperto (NO) al pin GPIO13 e il Comune (COM) al GND, sfruttando la resistenza di pull-up già attiva all’interno del microcontrollore. Questa configurazione evita l’uso di componenti aggiuntivi e assicura un comportamento stabile senza rimbalzi indesiderati. Grazie alla flessibilità dell’ESP32, è possibile replicare lo stesso schema su più pulsanti o integrare altre periferiche senza modifiche sostanziali al circuito.
La comunicazione con Home Assistant avviene tramite rete Wi-Fi, garantendo tempi di risposta rapidi e affidabilità nella gestione degli input. Colleghiamo poi il LED+ ai 3,3V ed il LED- al GND.
Codice
Andiamo a creare un nuovo device su ESPHome e chiamiamolo Pulsante. Saltiamo per il momento la connessione e selezioniamo la scheda che dobbiamo programmare (ESP32).
Una volta creato, clicchiamo su EDIT per modificare il codice.
Questo è il codice per configurare una ESP32 per leggere lo stato del pulsante e inviarli a Home Assistant tramite ESPHome. Il dispositivo sarà accessibile in rete tramite Wi-Fi e potrà essere aggiornato via OTA (Over-The-Air) senza bisogno di connessione fisica. Potete scaricarlo a questo LINK.
All’inizio, il codice definisce il nome del dispositivo, sia quello tecnico (“pulsante”) che quello più leggibile per Home Assistant (“Pulsante”).
esphome:
name: pulsante
friendly_name: Pulsante
Poi si specifica che il microcontrollore utilizzato è un ESP32 e che il firmware verrà compilato usando il framework Arduino, che è più semplice e supportato rispetto ad altre alternative come ESP-IDF.
esp32:
board: esp32dev
framework:
type: arduino
Il codice attiva il logger, che serve a registrare gli eventi e inviare messaggi di debug. Inoltre, viene attivata l’API di ESPHome, che permette a Home Assistant di comunicare con il dispositivo in modo sicuro grazie a una chiave di crittografia.
logger:
api:
encryption:
key: "vHO6i0mxLvZrvlQ4BN6Pth7f3ggcHTACBfR5Hn2Xt4A="
Per evitare di dover collegare il dispositivo fisicamente ogni volta che si vuole aggiornare il firmware, viene attivata la modalità OTA (Over-The-Air), con una password di sicurezza. Inoltre, è presente la funzione captive portal, che permette di riconfigurare il Wi-Fi direttamente da un browser in caso di problemi di connessione.
ota:
- platform: esphome
password: "8b9e6eaff7c986c865a4912294f4c9d4"
captive_portal:
Per collegarsi alla rete, il codice usa le credenziali Wi-Fi salvate nei secrets di ESPHome (file separato non visibile nel codice). Se la connessione fallisce, il dispositivo crea un hotspot Wi-Fi di emergenza (“Pulsante Fallback Hotspot”) con una password predefinita, in modo che sia possibile riconfigurarlo.
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "Pulsante Fallback Hotspot"
password: "V4zTkJyydloY"
Adesso andiamo a vedere la parte più importante del codice. Con binary_sensor definiamo un sensore binario che ha solo due stati: acceso/spento, premuto/rilasciato, dopodiché specifichiamo un pin fisico (GPIO13) per leggere il valore del sensore. Con mode: INPUT_PULLUP attiviamo la resistenza di pull-up interna al pin, così da mantenere il livello HIGH quando il pulsante non è premuto, mentre con inverterd: true invertiamo la logica, poiché quando il pulsante è premuto, il valore sarà considerato true (attivo). Questo è necessario perché premendo il pulsante, il pin viene collegato a GND (LOW). Forniamo un nome all’entità che comparirà in ESPHome e Home Assistant e generiamo un identificatore interno (id: raw_button) che permette di fare riferimento al sensore nel codice.
binary_sensor:
- platform: gpio
pin:
number: GPIO13
mode: INPUT_PULLUP
inverted: true
name: "Raw Button"
id: raw_button
Passiamo ora al rilevamento dei click; on_multi_click ci permette di programmare la sezione che rileva il click, impostando il limite di tempo della pressione (tra 50 millisecondi e 350 millisecondi) per considerarlo come click valido. Se il click è considerato valido, allora verrà rilevato un singolo click ed il valore single_click sarà visibile in Home Assistant.
on_multi_click:
- timing:
- ON for 50ms to 350ms
- OFF for at least 100ms
then:
- text_sensor.template.publish:
id: button_event
state: "single_click"
In alternativa, specificando che l’azione si attiva solo con un doppio click, entro l’intervallo stabilito, il valore double_click sarà visibile in Home Assistant.
- timing:
- ON for 50ms to 350ms
- OFF for 50ms to 350ms
- ON for 50ms to 350ms
then:
- text_sensor.template.publish:
id: button_event
state: "double_click"
Per programmare la pressione prolungata, passiamo ad utilizzare on_press che viene eseguito quanto il pulsante viene premuto e tramite lambda fa partire un timer che, se non viene interrotto, eseguirà un’azione dopo 1,5 secondi.
on_press:
- script.execute: long_press_script
Al rilascio del pulsante, viene eseguito on_release che interromperà il timer del long press e se il pulsante è rilasciato prima di 1.5s, non verrà considerata una long press.
on_release:
- script.stop: long_press_script
script:
- id: long_press_script
mode: restart
then:
- delay: 1.5s
- text_sensor.template.publish:
id: button_event
state: "long_press"
In ultimo, creiamo il sensore di testo che andrà a comunicare con Home Assistant, cambiando il proprio stato solamente a seguito della pressione del pulsante.
text_sensor:
- platform: template
name: "Button Event"
id: button_event
update_interval: never
Salvate e verificate con Validate se il codice è stato scritto correttamente.
Collegate la ESP32 al computer tramite cavo USB, e cliccate su Install.
Conclusa l’installazione, integriamo il device su Home Assistant. Dovrebbe essere arrivata una notifica sulla plancia. In ogni caso, per integrarlo andate su Impostazioni -> Dispositivi e servizi e apparirà il dispositivo Pulsante da integrare.
Autorizzate la configurazione ed otterrete quanto segue. Ad ogni tipologia di click, il sensore mostrerà se si tratta di singolo click, doppio click o click prolungato, permettendo all’utente di creare automazioni da associare a questa entità.