Aziz Bench

Primi passi con ESPHome

ESPHome trasforma un breve file YAML nel firmware di un ESP32 o di un ESP8266 e collega la scheda a Home Assistant, senza scrivere C++. Questa guida ti porta dall’installazione di ESPHome fino a un sensore di temperatura, umidità e pressione nella tua dashboard, con ogni riga della configurazione spiegata.

Di AzizPubblicata il 11 min di lettura

Verificata il 4 novembre 2026 su ESPHome 2026.10.2, l’ultima versione: ogni configurazione di questa guida supera il controllo di esphome config in quella versione. I nomi dei menu seguono la documentazione di ESPHome e di Home Assistant alla stessa data.

Cos’è ESPHome

Descrivi il dispositivo in un file YAML: quale scheda, quali sensori su quali pin, come si collega alla tua rete. ESPHome trasforma questa descrizione in un firmware, lo compila e lo installa sulla scheda. Home Assistant poi comunica con il dispositivo attraverso l’API nativa di ESPHome, un collegamento diretto sulla porta TCP 6053 che si può cifrare con una chiave da 32 byte.

YAMLil tuo fileESPHomecrea il firmwareESP32la tua schedaHome Assistantdashboardprima: cavo USBpoi: via Wi-FiAPI cifrataYAMLil tuo fileESPHomecrea il firmwareESP32la tua schedaHome Assistantdashboardprima: cavo USBpoi: via Wi-FiAPI cifrata
Da un file YAML a un dispositivo in Home Assistant. La prima installazione richiede un cavo; dopo, gli aggiornamenti passano dal Wi-Fi.

Per le parti più comuni non c’è codice da scrivere. Quando modifichi lo YAML, reinstalli e il dispositivo usa il nuovo firmware.

Installare ESPHome

Lo strumento in cui lavori si chiama ESPHome Device Builder: una dashboard web che conserva i tuoi file YAML, li compila e installa il firmware. Scegli come farla girare:

  • In Home Assistant. Vai in Impostazioni → App, installa ESPHome Device Builder, avvialo e apri la sua interfaccia web. Home Assistant oggi chiama “app” i suoi componenti aggiuntivi; se l’app non compare, aggiungi il repository https://github.com/esphome/home-assistant-addon dal menu ⋮.
  • Come app desktop. La pagina di installazione offre ESPHome Device Builder per macOS (un .dmg), per Windows e per Linux (un .deb o un AppImage). Su Linux, se le porte seriali non compaiono, aggiungi il tuo utente al gruppo dialout.
  • In Docker. La stessa dashboard risponde sulla porta 6052. Avvia il container con la rete dell’host (--net=host), così può trovare i dispositivi via mDNS; con Docker Desktop pubblica invece la porta 6052.
  • Da riga di comando. pip install esphome (se puoi, in un ambiente virtuale), poi esphome run soggiorno.yaml controlla, compila, installa e mostra i log in un solo passaggio.

Per il primissimo flash puoi usare anche ESPHome Web, su web.esphome.io, che scrive il firmware sulla scheda direttamente dal browser. Serve un browser con Web Serial: Chrome, Edge e, secondo la documentazione di ESP Web Tools, Firefox; su iOS non funziona.

Scegliere la scheda

Va bene qualsiasi scheda di sviluppo con ESP32 o ESP8266. Queste quattro sono diffuse, economiche e ben supportate; l’ID della scheda è quello che va nello YAML.

SchedaYAMLAdatta aPin
ESP32 DevKitesp32: board: esp32devQuasi tutti i tutorial e gli esempi, tanti pinpinout ESP32
ESP32-C3 SuperMiniesp32: board: esp32-c3-devkitm-1Sensori piccoli, economici e a basso consumopinout C3 SuperMini
ESP32-S3 DevKitC-1esp32: board: esp32-s3-devkitc-1Più memoria, USB nativa, fotocamere e displaypinout S3 DevKitC-1
Wemos D1 miniesp8266: board: d1_miniSensori e relè semplici, su un chip più vecchio e piccolopinout D1 mini

ID delle schede verificati con esphome config su ESPHome 2026.10.2. Il nostro confronto ESP32 elenca le differenze tra i chip.

Se sei indeciso, parti da un ESP32 DevKit: è quello di questa guida, e la maggior parte delle risposte che troverai online lo dà per scontato.

Una prima configurazione, riga per riga

Nel Device Builder, Create device avvia una procedura guidata che scrive quasi tutto per te. Ecco il file completo di un dispositivo chiamato soggiorno, prima di aggiungere sensori:

esphome:
  name: soggiorno              # nome host: minuscole, cifre, trattini
  friendly_name: Soggiorno     # il nome che mostra Home Assistant

esp32:
  board: esp32dev              # la tua scheda
  framework:
    type: esp-idf              # il predefinito dalla 2026.1

logger:                        # log via USB e Wi-Fi

api:                           # il collegamento a Home Assistant
  encryption:
    key: !secret api_key

ota:
  - platform: esphome          # aggiornamenti via Wi-Fi
    encryption:                # riusa la chiave dell’API

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  ap:                          # hotspot di riserva
    password: !secret ap_password

captive_portal:                # pagina di configurazione dell’hotspot
  • esphome: → name è il nome host in rete, soggiorno.local: al massimo 31 caratteri, lettere minuscole, cifre e trattini. friendly_name è quello che mostra Home Assistant.
  • esp32: → board dice a ESPHome il chip e la dimensione della flash. Da ESPHome 2026.1 il framework predefinito sull’ESP32 è ESP-IDF; indicarlo esplicitamente rende il file più chiaro. Arduino resta supportato con type: arduino.
  • logger: → i log via USB e via rete, di default a livello DEBUG e a 115200 baud.
  • api: → l’API nativa che usa Home Assistant, con la sua chiave di crittografia. Senza chiave il collegamento non è cifrato.
  • ota: → gli aggiornamenti via Wi-Fi. Da ESPHome 2026.9 un encryption: vuoto li cifra con la chiave dell’API.
  • wifi: → la tua rete, letta da secrets.yaml. ap: attiva un hotspot di riserva, con il nome del dispositivo, se per 90 secondi la scheda non riesce a collegarsi.
  • captive_portal: → una pagina su quell’hotspot in cui inserire le nuove credenziali del Wi-Fi.

I valori !secret vengono da un secondo file, secrets.yaml, nella stessa cartella:

wifi_ssid: "MyNetwork"
wifi_password: "MyWiFiPassword"
api_key: "…"                   # openssl rand -base64 32
ap_password: "…"

La chiave dell’API è composta da 32 byte casuali codificati in base64: la genera la procedura guidata, oppure il comando nel commento. Non pubblicare mai secrets.yaml.

Un primo sensore: BME280 su I²C

Il BME280 misura temperatura, umidità e pressione e comunica su I²C, quindi gli bastano due fili di segnale. Su un ESP32 DevKit i pin I²C che ESPHome usa di solito sono GPIO21 per SDA e GPIO22 per SCL.

ESP32 DevKitBME2803V3VINGNDGNDGPIO21SDAGPIO22SCLESP32 DevKitBME2803V3VINGNDGNDGPIO21SDAGPIO22SCL
Quattro fili: alimentazione a 3,3 V, massa e le due linee I²C. La maggior parte delle schedine BME280 ha già le resistenze di pull-up, ed ESPHome di default attiva anche quelle interne dell’ESP32.

Aggiungi questo in fondo al file:

i2c:
  sda: GPIO21
  scl: GPIO22
  scan: true                   # elenca gli indirizzi trovati

sensor:
  - platform: bme280_i2c
    address: 0x76              # o 0x77, guarda il log
    temperature:
      name: Temperatura
    pressure:
      name: Pressione
    humidity:
      name: Umidità
    update_interval: 60s
  • i2c: → il bus e i suoi pin. scan: true, il valore predefinito, scrive nel log gli indirizzi che trova.
  • platform: bme280_i2c → il driver del BME280. Il suo indirizzo predefinito è 0x77; molte schedine economiche rispondono a 0x76, come qui. La nostra pagina sull’indirizzo del BME280 spiega come il pin SDO sceglie tra i due.
  • Ogni misura ha un name, che diventa un’entità in Home Assistant. update_interval: 60s legge il sensore una volta al minuto.

Preferisci cliccare? Il nostro generatore crea un file equivalente, con questo BME280 già aggiunto, e prepara le chiavi per te. Mette la chiave dell’API direttamente nel file invece che in secrets.yaml e aggiunge i sensori di segnale Wi-Fi e di tempo di attività.Apri il generatore ESPHome

Vuoi un sensore diverso? Il nostro confronto sensori mette fianco a fianco i più comuni, dal DHT22 agli SHT4x.

Il primo flash via USB, poi via Wi-Fi

La primissima installazione deve passare da un cavo USB. Nel Device Builder clicca Install nel riquadro del dispositivo e scegli il metodo:

  • Plug into this computer scrive il firmware dal tuo browser. Usa Web Serial, che richiede una pagina sicura: la dashboard aperta in HTTPS, oppure su localhost, come con l’app desktop.
  • Plug into the computer running ESPHome Device Builder lo scrive dalla macchina su cui gira la dashboard, per esempio il tuo server Home Assistant.
  • Manual download, poi Factory format, ti dà un file .bin da scrivere con ESPHome Web: Connect, scegli la porta, Install.

Da riga di comando, esphome run soggiorno.yaml ti chiede quale porta seriale usare. Se non compare nessuna porta:

  • Prova un altro cavo USB: quelli di sola ricarica non hanno i fili dei dati.
  • Installa il driver del chip USB-seriale della scheda, di solito un CH34x o un CP2102.
  • Tieni premuto il pulsante BOOT della scheda mentre la colleghi, poi rilascialo: così il chip parte in modalità download.

Una volta che il dispositivo si è collegato al tuo Wi-Fi, ogni Install successivo propone Wirelessly, ed esphome run carica il firmware via rete.

Aggiungerlo a Home Assistant

Se l’mDNS funziona sulla tua rete, Home Assistant trova da solo il nuovo dispositivo. Vai in Impostazioni → Dispositivi e servizi: tra i dispositivi Rilevati vedrai un riquadro ESPHome con il suo nome. Clicca Configura, inserisci la chiave di crittografia quando te la chiede (se il Device Builder gira come app di Home Assistant, spesso è già inserita) e scegli un’area.

Se non viene rilevato nulla, clicca Aggiungi integrazione, scegli ESPHome e inserisci soggiorno.local o l’indirizzo IP del dispositivo. Le tre misure del sensore compaiono come entità, pronte per la dashboard.

Tra le opzioni dell’integrazione c’è quella che permette al dispositivo di eseguire azioni di Home Assistant, disattivata di default. Attivala solo per dispositivi di cui ti fidi, e solo se il tuo YAML ne ha bisogno.

Leggere i log

Ogni problema si vede prima di tutto nel log. Nel Device Builder, Logs lo legge via USB se la scheda è collegata, altrimenti via rete; da riga di comando, esphome logs soggiorno.yaml. Quando ti colleghi, il dispositivo stampa la sua configurazione, compresa la scansione I²C:

[C][i2c:113]: Results from bus scan:
[C][i2c:119]: Found device at address 0x76

Il numero dopo i2c indica la riga del codice sorgente di ESPHome, quindi cambia da una versione all’altra. “Found no devices” indica un problema di collegamenti o di alimentazione, non di YAML. Una misura ogni minuto, nelle righe [D], vuol dire che il sensore funziona.

Errori comuni

SintomoCausa probabileCosa fare
Non compare nessuna porta serialeCavo di sola ricarica o driver mancanteUsa un cavo dati; installa il driver CH34x o CP2102; tieni premuto BOOT mentre colleghi la scheda
Si installa, poi si riavvia di continuoScheda sbagliata nello YAML, o un pin di strapping tirato nel verso sbagliato all’avvioControlla l’ID della scheda; sull’ESP32 sposta su altri pin ciò che è collegato a GPIO0, 2, 5, 12 e 15 (il nostro pinout ESP32 li segnala). Dopo 10 avvii falliti ESPHome parte in modalità provvisoria, solo con Wi-Fi e aggiornamenti
“Found no devices”, o il sensore non viene trovatoSDA e SCL invertiti, indirizzo sbagliato, niente alimentazione, o un BMP280Controlla i quattro fili; imposta l’indirizzo che mostra la scansione; vedi il consiglio qui sopra
Letture ADC bloccate o in erroreUn pin dell’ADC2, che l’ESP32 originale condivide con il Wi-FiUsa un pin dell’ADC1: da GPIO32 a 39 sull’ESP32
Non si collega mai al Wi-Fi e compare l’hotspot di riservaUna rete solo a 5 GHz, o un errore di battitura in secrets.yamlUsa una rete a 2,4 GHz: in ESPHome solo l’ESP32-C5 può usare i 5 GHz, con l’opzione band_mode
Si riavvia ogni 15 minutiIl reboot_timeout dell’API: Home Assistant non è collegatoAggiungi il dispositivo a Home Assistant, oppure imposta reboot_timeout: 0s sotto api:

I pin di strapping decidono come parte il chip: un sensore o un LED che ne tiene uno alto o basso può impedirne l’avvio.

Sicurezza

  • Cifratura dell’API. Imposta sempre una chiave: senza, il collegamento non è né cifrato né autenticato, e qualsiasi dispositivo della tua rete può collegarsi.
  • Aggiornamenti cifrati. Con encryption: sotto ota: (ESPHome 2026.9 e successivi) il dispositivo accetta solo firmware cifrato con la tua chiave. Le guide più vecchie usano password:; oggi ESPHome avverte che occupa flash e RAM e consiglia la cifratura; le due opzioni non si possono combinare.
  • Una password sull’hotspot di riserva. La sua pagina permette a chi si collega di cambiare le impostazioni del Wi-Fi e di caricare un firmware.
  • Custodisci i segreti. Non condividere secrets.yaml e fanne una copia di backup: senza la chiave non puoi aggiornare il dispositivo via Wi-Fi.

Tenerlo aggiornato

ESPHome pubblica una nuova versione ogni mese. Aggiornare il Device Builder (o pip install --upgrade esphome) non cambia i tuoi dispositivi: ognuno mantiene il firmware con cui è stato compilato finché non clicchi di nuovo Install. Leggi prima le modifiche incompatibili nelle note di rilascio, poi prova l’aggiornamento su un solo dispositivo prima di passare agli altri.

A batteria: il deep sleep

Un sensore che deve trasmettere solo a intervalli di qualche minuto può dormire nel frattempo con il componente deep_sleep:, regolato da run_duration e sleep_duration. Mentre dorme, Home Assistant lo mostra come non disponibile, e il dispositivo può ricevere aggiornamenti solo quando è sveglio. Scheda, batteria, regolatore e consumi reali sono trattati nella nostra guida per alimentare un ESP32 a batteria.

Domande frequenti

Serve Home Assistant per usare ESPHome?

No. Il Device Builder gira anche come app desktop, in Docker o da riga di comando, e i dispositivi ESPHome possono pubblicare i dati via MQTT o mostrare una pagina web locale. L’API nativa, però, è fatta per Home Assistant.

Quale versione di ESPHome usa questa guida?

ESPHome 2026.10.2, l’ultima versione al 4 novembre 2026. Tutte le configurazioni mostrate superano il controllo di esphome config in questa versione.

ESP32 o ESP8266?

Un ESP32 per ogni nuovo progetto: più memoria e più pin, ed è la scheda della maggior parte degli esempi. Un ESP8266 come il D1 mini va ancora bene per sensori e relè semplici.

Arduino o ESP-IDF?

Da ESPHome 2026.1 l’ESP32 usa ESP-IDF, a meno che tu non indichi altro. Arduino resta supportato con framework: type: arduino, per librerie o componenti che lo richiedono.

Per l’OTA meglio una password o la cifratura?

La cifratura, da ESPHome 2026.9 in poi: encryption: sotto ota: riusa la chiave dell’API. ESPHome ora segnala password: con un avviso, e non puoi usarle insieme.

Perché il dispositivo si riavvia ogni 15 minuti?

Con api: e senza Home Assistant collegato, il dispositivo si riavvia dopo reboot_timeout, 15 minuti di default, pensando che la rete sia bloccata. Aggiungilo a Home Assistant, oppure imposta reboot_timeout: 0s.

Il mio BME280 non dà letture e il log dice “Wrong chip ID or no response”. Perché?

Probabilmente è un BMP280, che non ha il sensore di umidità: il driver del BME280 si aspetta l’ID chip 0x60, il BMP280 ne restituisce un altro e il driver si ferma. Usa platform: bmp280_i2c; il nostro confronto BME280 e BMP280 spiega come distinguerli.

Posso fare il flash da uno smartphone?

Non con ESPHome Web: Web Serial non esiste su iOS, e secondo la documentazione di ESP Web Tools Android non è ancora supportato. Usa un computer per il primo flash; dopo, gli aggiornamenti passano dal Wi-Fi.

Fonti

  1. ESPHome: installare ESPHome
  2. ESPHome: primi passi
  3. ESPHome: collegare fisicamente il dispositivo
  4. ESP Web Tools (ESPHome Web)
  5. ESPHome: guida al passaggio da Arduino a ESP-IDF su ESP32
  6. ESPHome 2026.9.0: note di rilascio (aggiornamenti cifrati)
  7. ESPHome su PyPI (versione attuale)
  8. ESPHome: componente API nativa
  9. ESPHome: componente WiFi
  10. ESPHome: captive portal
  11. ESPHome: modalità provvisoria (safe mode)
  12. ESPHome: bus I²C
  13. ESPHome: messaggi di log della scansione I²C (sorgente, 2026.10.2)
  14. ESPHome: sensore BME280
  15. ESPHome: controllo dell’ID chip del BME280 (sorgente, 2026.10.2)
  16. ESPHome: sensore ADC
  17. ESP-IDF: driver ADC oneshot (ADC2 e Wi-Fi)
  18. Home Assistant: integrazione ESPHome
  19. Apollo Automation: collegare un dispositivo ESPHome a Home Assistant
  20. Waveshare: il primo dispositivo ESPHome (opzioni di installazione)