Aggiungere un Pulsante di Riavvio Manuale in ESPHome per ESP32

🔧 Come aggiungere un pulsante di riavvio manuale in ESPHome

In molte installazioni basate su ESP32 può essere utile avere un modo semplice e immediato per riavviare il dispositivo direttamente da Home Assistant.

ESPHome mette a disposizione un componente dedicato che permette di creare un pulsante virtuale capace di eseguire un reboot del microcontrollore con un solo clic.

In questo articolo vediamo come aggiungerlo al tuo file YAML in modo rapido e sicuro.

🧩 Perché aggiungere un pulsante di riavvio?

Un pulsante di riavvio manuale è utile quando:

  • vuoi riavviare l’ESP32 senza scollegare l’alimentazione
  • stai testando nuove configurazioni
  • un sensore o il BLE si blocca e vuoi ripristinare il dispositivo
  • desideri un controllo immediato da Home Assistant

È una soluzione semplice ma molto pratica, soprattutto in installazioni remote o difficili da raggiungere fisicamente.

✅ Codice YAML del pulsante di riavvio

Aggiungi questo blocco nel tuo file ESPHome:

button:
  - platform: restart
    id: riavvia_esp
    name: "Riavvia ESP32"

Questo crea un pulsante visibile in Home Assistant che, quando premuto, riavvia immediatamente il dispositivo.

🔍 Come funziona?

  • platform: restart è un componente ufficiale ESPHome
  • il pulsante appare automaticamente tra i dispositivi dell’ESP32 in Home Assistant
  • premendolo, l’ESP esegue un reboot pulito
  • non richiede configurazioni aggiuntive o dipendenze

È uno dei metodi più affidabili e compatibili con tutte le versioni moderne di ESPHome.

🎯 Conclusione

Aggiungere un pulsante di riavvio manuale è un modo semplice per migliorare la gestione del tuo ESP32.

È immediato, stabile e perfettamente integrato con Home Assistant, ideale sia per debugging che per manutenzione ordinaria.

🖥️ ESP32 + OLED

🖥️ ESP32 + OLED: Notifiche visive intelligenti con ESPHome

🔎 Descrizione del progetto

Questo progetto trasforma un microcontrollore ESP32 in un pannello di notifica visiva, utilizzando un display OLED SSD1306 da 128×64 pixel. È pensato per integrarsi con Home Assistant e mostrare messaggi testuali dinamici, come avvisi di sicurezza, stato degli elettrodomestici, promemoria o notifiche personalizzate.

Il cuore del sistema è un’entità input_text in Home Assistant: ogni volta che viene aggiornata, il messaggio appare sul display OLED. Il messaggio rimane visibile finché non ne arriva uno nuovo. Non c’è più alcun timeout automatico: il display mostra sempre l’ultimo messaggio ricevuto.

È una soluzione elegante, modulare e facilmente estendibile per chi vuole aggiungere un feedback visivo alle automazioni domestiche.

🔌 Collegamenti hardware

ComponentePin ESP32Pin periferica
Display OLED SSD1306GPIO 21SDA
Display OLED SSD1306GPIO 22SCL
Alimentazione3.3V / GNDVCC / GND

Il display comunica via I²C, usando i pin GPIO 21 (SDA) e GPIO 22 (SCL). L’indirizzo I²C del display è 0x3C (standard per SSD1306). Non sono richieste resistenze di pull-up esterne: ESPHome le gestisce automaticamente.

📄 Spiegazione riga per riga del file YAML

⚙️ Configurazione generale

esphome:
  name: esphome-web-33da74
  friendly_name: Esp32 LCD
  min_version: 2025.5.0
  name_add_mac_suffix: false
  • name: nome tecnico del dispositivo
  • friendly_name: nome leggibile in Home Assistant
  • min_version: versione minima di ESPHome richiesta
  • name_add_mac_suffix: se false, evita di aggiungere il MAC al nome

🧠 Specifiche hardware

esp32:
  board: esp32dev
  framework:
    type: arduino
  • board: modello della scheda ESP32
  • framework: usa il linguaggio Arduino per la compilazione

🛠️ Servizi di base

logger:
api:
ota:
  - platform: esphome
  • logger: abilita il log seriale per il debug
  • api: consente la comunicazione diretta con Home Assistant
  • ota: permette aggiornamenti firmware via Wi-Fi

📶 Connessione Wi-Fi

wifi:
  networks:
    - ssid: "TechLab_Guest"
      password: "connect1234"
    - ssid: "HomeSecure_5G"
      password: "safezone9876"

Il dispositivo proverà a connettersi alla prima rete disponibile tra quelle elencate.

🔌 Bus I²C per il display

i2c:
  sda: 21
  scl: 22
  scan: true
  • sda e scl: pin di comunicazione I²C
  • scan: true: rileva automaticamente i dispositivi collegati

🔤 Font per il display

font:
  - file: "gfonts://Roboto"
    id: my_font
    size: 12
  • file: scarica il font Roboto da Google Fonts
  • id: nome interno del font
  • size: altezza dei caratteri in pixel

🧾 Sensore testuale da Home Assistant

text_sensor:
  - platform: homeassistant
    name: "Messaggio OLED"
    entity_id: input_text.lcd_message
    id: lcd_text
  • Importa l’entità input_text.lcd_message da Home Assistant
  • Ogni volta che il valore cambia, il display si aggiorna
  • Non c’è più alcun timeout: il messaggio resta finché non ne arriva uno nuovo

🖥️ Display OLED SSD1306

display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x64"
    address: 0x3C
    lambda: |-
      if (!id(lcd_text).state.empty()) {
        std::string msg = id(lcd_text).state;
        int line = 0;
        const int max_chars = 20;

        while (msg.length() > 0 && line < 4) {
          std::string segment = msg.substr(0, max_chars);
          msg = msg.length() > max_chars ? msg.substr(max_chars) : "";
          it.printf(0, line * 16, id(my_font), "%s", segment.c_str());
          line++;
        }
      }
  • platform: tipo di display usato
  • model: risoluzione del display
  • address: indirizzo I²C del display
  • lambda: codice inline in C++ che:
    • Verifica se il messaggio è vuoto
    • Divide il testo in righe da 20 caratteri
    • Le stampa verticalmente con spaziatura di 16 pixel
    • Mostra massimo 4 righe (limite del display)

✅ Conclusione

Questo progetto è una soluzione compatta e potente per creare un pannello di notifica visiva con ESP32 e OLED. È perfettamente integrato con Home Assistant, facile da modificare e ideale per chi vuole un feedback immediato e visivo delle proprie automazioni.

Il comportamento è ora più naturale: il messaggio resta visibile finché non viene aggiornato. Nessun timeout, nessuna cancellazione automatica. Il display è sempre sincronizzato con l’ultimo stato dell’automazione.

Aggiungo …

Ecco una spiegazione semplificata del codice fornito:


Funzionamento generale

Il codice gestisce la visualizzazione di un testo su uno schermo LCD (es. 20 caratteri x 4 righe) in ESPHome.


Passaggi principali

  1. Controllo inputif (!id(lcd_text).state.empty())
    • Verifica che il contenuto da visualizzare non sia vuoto (es. “Ciao mondo!” invece di “”).
  2. Inizializzazione variabilistd::string msg = id(lcd_text).state; int line = 0; const int max_chars = 20;
    • msg: memorizza il testo da visualizzare.
    • line: indica la riga corrente (da 0 a 3).
    • max_chars: numero massimo di caratteri per riga (es. 20).
  3. Loop per suddivisione del testowhile (msg.length() > 0 && line < 4)
    • Continua finché ci sono caratteri da visualizzare e non si superano le 4 righe.
  4. Suddivisione in segmentistd::string segment = msg.substr(0, max_chars); msg = msg.length() > max_chars ? msg.substr(max_chars) : "";
    • Estrae i primi max_chars caratteri (es. “Ciao mondo!” → “Ciao mondo” in prima riga).
    • Rimuove il segmento già visualizzato dal testo originale.
  5. Visualizzazione su schermoit.printf(0, line * 16, id(my_font), "%s", segment.c_str());
    • it: riferimento all’oggetto LCD.
    • printf(...): stampa il testo in posizione (0, line*16) (spaziatura tra righe).
    • id(my_font): font utilizzato per la visualizzazione.
  6. Avanzamento rigaline++;
    • Passa alla riga successiva per il prossimo segmento.

Esempio concreto

Se msg = "Questo è un testo lungo", il codice:

  1. Stampa “Questo è un t” (20 caratteri) sulla riga 0.
  2. Stampa “esto lungo” (rimanenti) sulla riga 1.

Perché funziona?

  • Gestisce testi lunghi suddividendoli in segmenti compatibili con le dimensioni dell’LCD.
  • Evita errori di sovraccarico o troncamento non previsto del messaggio.

Come collegare un sensore di livello liquido all’ESP32 e visualizzarlo in Home Assistant


1. Introduzione

Questo articolo descrive la procedura per integrare un sensore analogico di livello liquido con un ESP32, utilizzando ESPHome per la configurazione firmware e l’integrazione nativa con Home Assistant. L’approccio non richiede MQTT; i dati vengono trasmessi tramite il protocollo API di ESPHome.


2. Materiale necessario

ElementoQuantitàNote
Scheda ESP32 dev board1Modello “esp32dev” o equivalente
Sensore analogico di livello liquido1(es. sensore a resistenza variabile)
Cavi jumper3Collegamenti VCC, GND e OUT
Resistor divider (opzionale)2Se il sensore opera a 5 V
Breadboard (facoltativa)1Per prototipare

3. Collegamento hardware

Nota di sicurezza: se il sensore è alimentato a 5 V, utilizzare un divider di tensione per ridurre la tensione di uscita a 3,3 V, valore massimo accettabile dall’ESP32.

Sensore   →   ESP32
--------------------
VCC       →   3.3 V (o 5 V con divider)
GND       →   GND
OUT (analogico) → GPIO34 (ADC1_CH6)

Il pin ADC scelto, GPIO34, è un ingresso analogico non condiviso da altre funzioni critiche.


4. Configurazione ESPHome

Salvare il seguente contenuto in un file liquid_level_sensor.yaml e caricarlo con l’interfaccia di ESPHome.

esphome:
  name: liquid_level_sensor
  platform: ESP32
  board: esp32dev

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

api:

ota:

logger:

sensor:
  - platform: adc
    pin: GPIO34
    name: "Livello Liquido"
    unit_of_measurement: "%"
    accuracy_decimals: 2
    filters:
      - lambda: |-
          return clamp((x / 4095.0f) * 100.0f, 0.0f, 100.0f);

Il filtro lambda converte la lettura ADC (intervallo 0‑4095) in una percentuale di livello.


5. Verifica in Home Assistant

  1. Riavvia l’ESP32 (tramite OTA o collegamento USB).
  2. Accedi a Developer Tools → States e cerca sensor.liquid_level_sensor_livello_liquido.
  3. Il valore percentuale dovrebbe aggiornarsi automaticamente.

6. Possibili estensioni

FunzioneImplementazione
DebounceAggiungere un filtro throttle in ESPHome.
AllarmiCreare automazioni in Home Assistant basate su soglie percentuali.
GraficiInserire l’entità nel dashboard Lovelace per visualizzare la cronologia.

7. Conclusioni

Utilizzando ESPHome e l’API di Home Assistant, è possibile trasformare un semplice sensore analogico in una fonte di dati affidabile senza ricorrere a MQTT. Il procedimento descritto garantisce un’integrazione pulita e facilmente estendibile.


🛠️ Configurazione del Sensore HC-SR04 con ESPHome su ESP32 WROOM: Guida Tecnica per l’Automazione Domotica

Introduzione
Nel panorama delle soluzioni IoT, l’integrazione di sensori a basso costo come il HC-SR04 rappresenta un’opportunità per implementare sistemi di misurazione della distanza in tempo reale. Questo articolo fornisce una guida tecnica per configurare il sensore con ESPHome su un ESP32 WROOM, garantendo una implementazione ottimizzata per l’automazione domestica e l’efficienza energetica.


🔌 Connessione Fisica: Tabella di Riferimento

Per garantire una corretta integrazione elettronica, è fondamentale verificare la corretta connessione tra il sensore e il modulo ESP32. Ecco la tabella di riferimento:

Pin del SensorePin ESP32 (WROOM-32)Funzione
VCC3.3VAlimentazione (3.3V)
GNDGNDGround (0V)
TriggerGPIO12Attivazione (50μs)
EchoGPIO13Rilevamento risposta (risposta)

💡 Attenzione: Evita di utilizzare pin già assegnati a funzioni critiche (es. I²C, UART). Il WROOM-32 supporta GPIO12 e GPIO13 come pin disponibili per il sensore.


📝 Configurazione in ESPHome: Esempio Minimale

La configurazione del sensore HC-SR04 in ESPHome richiede un file YAML minimale. Ecco l’esempio ottimizzato:

esphome:
  name: "hc_sr04"
  platform: esp32
  board: esp32dev

sensor:
  - platform: ultrasonic
    name: "Distanza HC-SR04"
    trigger_pin: GPIO12
    echo_pin: GPIO13
    update_interval: 10s

Parametri Critici:
Ecco la tabella che riassume i parametri essenziali per una configurazione affidabile:

ParametroValoreDescrizione
trigger_pinGPIO12Pin utilizzato per attivare il sensore
echo_pinGPIO13Pin per ricevere il feedback del sensore
update_interval10sFrequenza di aggiornamento (riduce il consumo energetico)

🔍 Note Tecniche:

  • Il componente ultrasonic gestisce automaticamente il ciclo di attivazione (50μs) del trigger.
  • L’intervallo update_interval è impostato a 10s per minimizzare il consumo energetico, ideale per applicazioni a basso traffico.

🧪 Verifica e Test

Per validare la corretta funzionalità del sistema, segui questi passi:

  1. Conferma connessione: Esegui esphome --scan per verificare il rilevamento del sensore.
  2. Monitoraggio: Verifica il valore della distanza tramite l’interfaccia web di ESPHome o tramite il canale MQTT.
  3. Ottimizzazione: Utilizza il parametro deep_sleep per ridurre il consumo energetico in modalità standby (es. deep_sleep: 10s nel file YAML).

🌟 Consiglio: Testa con un valore di update_interval inferiore (es. 5s) per verificare la risposta del sensore in condizioni di alta frequenza.


🎯 Conclusioni

Con questa configurazione, è possibile implementare un sistema di misurazione della distanza in tempo reale, ideale per applicazioni come:

  • Automazione di porte e serrande
  • Monitoraggio ambientale (es. distanza da ostacoli)
  • Sistemi di sicurezza basati su distanza

Importante: La scelta dei pin e l’ottimizzazione dell’intervallo di aggiornamento sono fondamentali per garantire un’efficienza energetica e una corretta integrazione del sensore nel contesto IoT.

Prossimo passo: Aggiungi il sensore al tuo sistema ESPHome per integrarlo con altri dispositivi (es. Home Assistant) tramite il canale MQTT.


Articolo realizzato con precisione tecnica e adattato alle specifiche del WROOM-32. Per ulteriori dettagli, consulta il datasheet del HC-SR04 e la documentazione ufficiale di ESPHome. 🚀

DHT22 + ESP32: Come trasformare un semplice sensore in una “smart zone”

1️⃣ Materiale necessario

ElementoQuantitàNote
ESP32 (es. esp32dev o nodemcu‑32s)1Assicurati di avere i driver installati sul PC.
DHT22 (temperatura + umidità)1Più preciso del DHT11.
Resistor 10 kΩ1Pull‑up per il pin DATA.
Condensatore 100 nF (opzionale)1Filtra eventuali rumori sulla linea di alimentazione.
Cavi jumperVariPer collegamenti in breadboard o direttamente ai pin.

2️⃣ Schema di collegamento

🔌 DHT22 → ESP32

DTH22ESP32Commento
VCC3V3Alimentazione a 3,3 V (compatibile con ESP32).
GNDGNDTerra comune.
DATAGPIO4Pin digitale libero; scegli un altro se preferisci.

Pull‑up: collega il resistore 10 kΩ tra VCC e il pin DATA per stabilizzare la linea.
Condensatore (opzionale): posizionalo vicino al DHT22, dal GND a VCC.


3️⃣ Configurazione ESPHome (YAML)

esphome:
  name: dth22_esp32
  platform: ESP32
  board: esp32dev   # cambia se usi un altro modello

wifi:
  ssid: "NOME_Rete"
  password: "PASSWORD"

api:
ota:

logger:

sensor:
  - platform: dht
    pin: GPIO4          # stesso pin usato nel collegamento
    temperature:
      name: "Temperatura DTH22"
      unit_of_measurement: °C
      accuracy_decimals: 1
    humidity:
      name: "Umidità DTH22"
      unit_of_measurement: "%"
      accuracy_decimals: 0
    update_interval: 60s   # lettura ogni minuto

Come procedere

  1. Crea un nuovo file dth22_esp32.yaml nella cartella ESPHome del tuo progetto.
  2. Inserisci le tue credenziali Wi‑Fi al posto di NOME_Rete e PASSWORD.
  3. Carica il firmware: esphome run dth22_esp32.yaml.

4️⃣ Visualizzare i dati in tempo reale

Una volta che l’ESP32 sta inviando le letture, puoi mostrarle ovunque tu voglia:

  • Home Assistant: aggiungi un sensore via API o MQTT.

5️⃣ Consigli pratici

ProblemaSoluzione
Letture errateVerifica la connessione GND; senza terra condivisa il sensore non funziona correttamente.
Rumore di lineaAggiungi un condensatore da 100 nF tra VCC e GND vicino al DHT22.
Pin occupatoSe GPIO4 è già in uso, scegli un altro pin digitale libero (ad es. GPIO5).

🎉 Conclusioni

Con pochi componenti, qualche riga di YAML e la potenza dell’ESP32, hai trasformato un semplice sensore DHT22 in una fonte affidabile di dati ambientali. Ora puoi monitorare temperatura e umidità ovunque tu voglia – dalla tua cucina al tuo laboratorio IoT!