Aziz Bench

Primeros pasos con ESPHome

ESPHome convierte un archivo YAML corto en el firmware de un ESP32 o un ESP8266 y conecta la placa con Home Assistant, sin escribir C++. Esta guía va desde la instalación de ESPHome hasta un sensor de temperatura, humedad y presión en tu panel, con cada línea de la configuración explicada.

Por AzizPublicada el 12 min de lectura

Comprobada el 4 de noviembre de 2026 con ESPHome 2026.10.2, la versión más reciente: todas las configuraciones de esta guía se validan sin errores con esphome config en esa versión. Los nombres de los menús siguen la documentación de ESPHome y de Home Assistant de esa fecha.

Qué es ESPHome

Describes el dispositivo en un archivo YAML: qué placa, qué sensores en qué pines y cómo se conecta a tu red. ESPHome convierte esa descripción en firmware, lo compila y lo graba en la placa. Después, Home Assistant se comunica con el dispositivo mediante la API nativa de ESPHome, una conexión directa por el puerto TCP 6053 que se puede cifrar con una clave de 32 bytes.

YAMLtu archivoESPHomecrea el firmwareESP32tu placaHome Assistantpanelprimero: USBluego: por Wi-FiAPI cifradaYAMLtu archivoESPHomecrea el firmwareESP32tu placaHome Assistantpanelprimero: USBluego: por Wi-FiAPI cifrada
De un archivo YAML a un dispositivo en Home Assistant. La primera instalación necesita un cable; después, las actualizaciones van por Wi-Fi.

Para lo habitual no hay que escribir código. Cuando cambias el YAML, vuelves a instalar y el dispositivo pasa a usar el nuevo firmware.

Instalar ESPHome

La herramienta con la que trabajas se llama ESPHome Device Builder: un panel web que guarda tus archivos YAML, los compila e instala el firmware. Elige cómo ejecutarlo:

  • En Home Assistant. Ve a Configuración → Aplicaciones → Instalar aplicación (Home Assistant llama ahora «aplicaciones» a sus complementos), busca ESPHome Device Builder y pulsa Instalar, Iniciar y Open Web UI. Si no aparece, añade el repositorio https://github.com/esphome/home-assistant-addon desde el menú ⋮.
  • Como app de escritorio. La página de instalación ofrece ESPHome Device Builder para macOS (un .dmg), para Windows y para Linux (un .deb o un AppImage). En Linux, si no aparecen los puertos serie, añade tu usuario al grupo dialout.
  • En Docker. El mismo panel escucha en el puerto 6052. Arranca el contenedor con la red del host (--net=host) para que encuentre los dispositivos por mDNS; con Docker Desktop, publica el puerto 6052.
  • Desde la línea de comandos. Instala con pip install esphome (en un entorno virtual si puedes) y luego usa esphome run salon.yaml, que valida, compila, graba y muestra el registro en un solo paso.

Para la primera grabación también puedes usar ESPHome Web, en web.esphome.io, que graba el firmware en la placa desde el navegador. Necesita Web Serial: Chrome, Edge y, según la documentación de ESP Web Tools, Firefox; no funciona en iOS.

Elegir la placa

Sirve cualquier placa de desarrollo con ESP32 o ESP8266. Estas cuatro son comunes, baratas y están bien soportadas; el identificador de la placa es lo que va en el YAML.

PlacaYAMLIdeal paraPines
ESP32 DevKitesp32: board: esp32devSeguir la mayoría de los tutoriales y ejemplos; muchos pinespinout del ESP32
ESP32-C3 SuperMiniesp32: board: esp32-c3-devkitm-1Sensores pequeños, baratos y de bajo consumopinout de la C3 SuperMini
ESP32-S3 DevKitC-1esp32: board: esp32-s3-devkitc-1Más memoria, USB nativo, cámaras y pantallaspinout de la S3 DevKitC-1
Wemos D1 miniesp8266: board: d1_miniSensores y relés sencillos, con un chip más antiguo y pequeñopinout de la D1 mini

Identificadores comprobados con esphome config en ESPHome 2026.10.2. Nuestra comparativa ESP32 recoge las diferencias entre los chips.

Si dudas, empieza con un ESP32 DevKit: es el de esta guía, y la mayoría de las respuestas que encontrarás en internet dan por hecho que lo usas.

Una primera configuración, línea a línea

En el Device Builder, Create device abre un asistente que escribe casi todo por ti. Este es el archivo completo de un dispositivo llamado salon, antes de añadir sensores:

esphome:
  name: salon                  # nombre de host: minúsculas, cifras, guiones
  friendly_name: Salón         # el nombre que muestra Home Assistant

esp32:
  board: esp32dev              # tu placa
  framework:
    type: esp-idf              # el predeterminado desde 2026.1

logger:                        # registro por USB y Wi-Fi

api:                           # la conexión con Home Assistant
  encryption:
    key: !secret api_key

ota:
  - platform: esphome          # actualizaciones por Wi-Fi
    encryption:                # reutiliza la clave de la API

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  ap:                          # punto de acceso de reserva
    password: !secret ap_password

captive_portal:                # su página
  • esphome: → name es el nombre de host en tu red, salon.local: hasta 31 caracteres, letras minúsculas, cifras y guiones. friendly_name es lo que muestra Home Assistant.
  • esp32: → board le indica a ESPHome el chip y el tamaño de la flash. Desde ESPHome 2026.1 el framework predeterminado en el ESP32 es ESP-IDF; indicarlo de forma explícita deja el archivo más claro. Arduino sigue soportado con type: arduino.
  • logger: → el registro por USB y por la red, por defecto en nivel DEBUG y a 115200 baudios.
  • api: → la API nativa que usa Home Assistant, con su clave de cifrado. Sin clave, la conexión no va cifrada.
  • ota: → las actualizaciones por Wi-Fi. Desde ESPHome 2026.9, un encryption: vacío las cifra con la clave de la API.
  • wifi: → tu red, leída de secrets.yaml. ap: activa un punto de acceso de reserva, con el nombre del dispositivo, si este no consigue conectarse en 90 segundos.
  • captive_portal: → una página en ese punto de acceso donde introducir los nuevos datos del Wi-Fi.

Los valores !secret salen de un segundo archivo, secrets.yaml, en la misma carpeta:

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

La clave de la API son 32 bytes aleatorios en base64: la crea el asistente, o puedes generarla con el comando del comentario. No publiques nunca secrets.yaml.

Un primer sensor: BME280 por I²C

El BME280 mide temperatura, humedad y presión y se comunica por I²C, así que le bastan dos cables de señal. En un ESP32 DevKit, los pines I²C que ESPHome suele usar son GPIO21 para SDA y GPIO22 para SCL.

ESP32 DevKitBME2803V3VINGNDGNDGPIO21SDAGPIO22SCLESP32 DevKitBME2803V3VINGNDGNDGPIO21SDAGPIO22SCL
Cuatro cables: alimentación a 3,3 V, masa y las dos líneas I²C. La mayoría de las placas BME280 llevan sus propias resistencias de pull-up, y ESPHome activa además por defecto las internas del ESP32.

Añade esto al final del archivo:

i2c:
  sda: GPIO21
  scl: GPIO22
  scan: true                   # lista las direcciones que encuentra

sensor:
  - platform: bme280_i2c
    address: 0x76              # o 0x77, mira el registro
    temperature:
      name: Temperatura
    pressure:
      name: Presión
    humidity:
      name: Humedad
    update_interval: 60s
  • i2c: → el bus y sus pines. scan: true, el valor predeterminado, escribe en el registro las direcciones que encuentra.
  • platform: bme280_i2c → el controlador del BME280. Su dirección predeterminada es 0x77; muchas placas baratas responden en 0x76, como aquí. Nuestra página sobre la dirección del BME280 explica cómo se elige una u otra con el pin SDO.
  • Cada medida lleva un name, que se convierte en una entidad de Home Assistant. update_interval: 60s lee el sensor una vez por minuto.

¿Prefieres hacer clic? Nuestro generador crea un archivo equivalente, con este BME280 ya añadido, y te prepara las claves. Pone la clave de la API directamente en el archivo, no en secrets.yaml, y añade sensores de señal Wi-Fi y de tiempo encendido.Abrir el generador de ESPHome

¿Quieres otro sensor? Nuestra comparativa de sensores compara los más comunes, del DHT22 a los SHT4x.

Grabar el firmware: primero por USB, luego por Wi-Fi

La primera instalación tiene que hacerse con un cable USB. En el Device Builder, pulsa Install en la tarjeta del dispositivo y elige cómo:

  • Plug into this computer graba desde tu navegador. Usa Web Serial, que necesita una página segura: el panel abierto por HTTPS, o en localhost, como con la app de escritorio.
  • Plug into the computer running ESPHome Device Builder graba desde el equipo en el que corre el panel, por ejemplo tu servidor de Home Assistant.
  • Manual download y después Factory format te dan un archivo .bin que grabas con ESPHome Web: Connect, eliges el puerto, Install.

Desde la línea de comandos, esphome run salon.yaml te pregunta qué puerto serie usar. Si no aparece ninguno:

  • Prueba otro cable USB: los que solo cargan no llevan los hilos de datos.
  • Instala el controlador del chip USB-serie de la placa, normalmente un CH34x o un CP2102.
  • Mantén pulsado el botón BOOT de la placa mientras la conectas y suéltalo después: así el chip arranca en modo de descarga.

En cuanto el dispositivo se une a tu Wi-Fi, cada Install posterior ofrece Wirelessly, y esphome run sube el firmware por la red.

Añadirlo a Home Assistant

Si el mDNS funciona en tu red, Home Assistant encuentra el dispositivo nuevo por sí solo. Ve a Configuración → Dispositivos y servicios: en el apartado Descubierto verás una tarjeta de ESPHome con su nombre. Pulsa Configurar, introduce la clave de cifrado cuando te la pida (si el Device Builder corre como app de Home Assistant, a menudo ya viene rellena) y elige un área.

Si no se descubre nada, pulsa Añadir integración, elige ESPHome e introduce salon.local o la dirección IP del dispositivo. Las tres medidas del sensor aparecen como entidades, listas para el panel.

Entre las opciones de la integración está la que permite al dispositivo ejecutar acciones de Home Assistant, desactivada por defecto. Actívala solo en dispositivos de confianza, y solo si tu YAML la necesita.

Leer el registro

El registro es donde aparece primero cualquier problema. En el Device Builder, Logs lo lee por USB si la placa está conectada y, si no, por la red; en la línea de comandos, esphome logs salon.yaml. Al conectarte, el dispositivo imprime su configuración, incluido el escaneo I²C:

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

El número que sigue a i2c indica la línea del código fuente de ESPHome, así que cambia de una versión a otra. «Found no devices» indica un problema de cableado o de alimentación, no del YAML. Una lectura cada minuto, en las líneas [D], significa que el sensor funciona.

Errores comunes

SíntomaCausa probableQué hacer
No aparece ningún puerto serieCable solo de carga o falta el controladorUsa un cable de datos; instala el controlador CH34x o CP2102; mantén pulsado BOOT al conectar
Se instala y luego se reinicia sin pararPlaca equivocada en el YAML, o un pin de arranque (strapping) en el nivel equivocado al arrancarRevisa el identificador de la placa; pasa a otros pines lo que tengas en GPIO0, 2, 5, 12 y 15 del ESP32 (nuestro pinout del ESP32 los marca). Tras 10 arranques fallidos, ESPHome entra en modo seguro, solo con Wi-Fi y actualizaciones
«Found no devices», o no encuentra el sensorSDA y SCL cruzados, dirección equivocada, sin alimentación, o un BMP280Revisa los cuatro cables; pon la dirección que muestra el escaneo; mira el consejo de arriba
Lecturas del ADC fijas o con erroresUn pin del ADC2, que el ESP32 original comparte con el Wi-FiUsa un pin del ADC1: del GPIO32 al 39 en el ESP32
Nunca se conecta al Wi-Fi y aparece el punto de acceso de reservaUna red solo de 5 GHz, o una errata en secrets.yamlUsa una red de 2,4 GHz: en ESPHome solo el ESP32-C5 puede usar 5 GHz, con su opción band_mode
Se reinicia cada 15 minutosEl reboot_timeout de la API: Home Assistant no está conectadoAñade el dispositivo a Home Assistant, o pon reboot_timeout: 0s en api:

Los pines de arranque deciden cómo se inicia el chip: un sensor o un LED que mantenga uno de ellos a nivel alto o bajo puede impedir que arranque.

Seguridad

  • Cifrado de la API. Pon siempre una clave: sin ella, la conexión no va cifrada ni pide ninguna clave, y cualquier equipo de tu red puede conectarse.
  • Actualizaciones cifradas. Con encryption: en ota: (ESPHome 2026.9 y posteriores), el dispositivo solo acepta firmware cifrado con tu clave. Las guías antiguas usan password:; ESPHome avisa ahora de que la contraseña gasta flash y RAM y recomienda el cifrado, y las dos opciones no se pueden combinar.
  • Una contraseña en el punto de acceso de reserva. Su página permite a quien se conecte cambiar el Wi-Fi y subir un firmware.
  • Mantén secrets.yaml en privado, y guarda una copia: sin la clave no podrás actualizar el dispositivo por Wi-Fi.

Mantenerlo al día

ESPHome publica una versión nueva cada mes. Actualizar el Device Builder (o pip install --upgrade esphome) no cambia tus dispositivos: cada uno sigue con el firmware que le instalaste hasta que vuelvas a pulsar Install. Lee antes los cambios incompatibles de las notas de la versión y actualiza un dispositivo antes que el resto.

Con batería: deep sleep

Un sensor que solo tiene que informar cada pocos minutos puede dormir entre medias con el componente deep_sleep:, que se ajusta con run_duration y sleep_duration. Mientras duerme, Home Assistant lo muestra como no disponible, y solo admite una actualización cuando está despierto. La elección de placa, batería y regulador, con consumos reales, está en nuestra guía para alimentar un ESP32 con batería.

Preguntas frecuentes

¿Necesito Home Assistant para usar ESPHome?

No. El Device Builder también funciona como app de escritorio, en Docker o desde la línea de comandos, y los dispositivos ESPHome pueden publicar por MQTT o mostrar una página web local. Eso sí, la API nativa está pensada para Home Assistant.

¿Qué versión de ESPHome usa esta guía?

ESPHome 2026.10.2, la más reciente el 4 de noviembre de 2026. Todas las configuraciones que aparecen se validan sin errores con esphome config en esa versión.

¿ESP32 o ESP8266?

Un ESP32 para cualquier proyecto nuevo: más memoria y más pines, y es la placa de la mayoría de los ejemplos. Un ESP8266 como la D1 mini sigue valiendo para sensores y relés sencillos.

¿Arduino o ESP-IDF?

Desde ESPHome 2026.1 el ESP32 usa ESP-IDF salvo que indiques otra cosa. Arduino sigue soportado con framework: type: arduino, para bibliotecas o componentes que lo necesiten.

¿Contraseña o cifrado para la OTA?

Cifrado, desde ESPHome 2026.9: encryption: en ota: reutiliza la clave de la API. ESPHome avisa ahora si usas password:, y no puedes usar las dos cosas a la vez.

¿Por qué se reinicia mi dispositivo cada 15 minutos?

Con api: y sin Home Assistant conectado, el dispositivo se reinicia al cumplirse reboot_timeout, 15 minutos por defecto, porque supone que la red se ha quedado colgada. Añádelo a Home Assistant o pon reboot_timeout: 0s.

Mi BME280 no da lecturas y el registro dice «Wrong chip ID or no response». ¿Por qué?

Seguramente es un BMP280, que no tiene sensor de humedad: el controlador del BME280 espera el ID de chip 0x60, el BMP280 devuelve otro y el controlador se detiene. Usa platform: bmp280_i2c; nuestra comparativa BME280 frente a BMP280 explica cómo distinguirlos.

¿Puedo grabarlo desde el móvil?

Con ESPHome Web no: Web Serial no existe en iOS, y, según la documentación de ESP Web Tools, Android aún no está soportado. Usa un ordenador para la primera grabación; después, las actualizaciones van por Wi-Fi.

Fuentes

  1. ESPHome: instalar ESPHome
  2. ESPHome: primeros pasos
  3. ESPHome: conectar físicamente el dispositivo
  4. ESP Web Tools (ESPHome Web)
  5. ESPHome: guía para pasar de Arduino a ESP-IDF en el ESP32
  6. ESPHome 2026.9.0: notas de la versión (actualizaciones cifradas)
  7. ESPHome en PyPI (versión actual)
  8. ESPHome: componente API nativa
  9. ESPHome: componente WiFi
  10. ESPHome: portal cautivo
  11. ESPHome: modo seguro
  12. ESPHome: bus I²C
  13. ESPHome: mensajes de registro del escaneo I²C (código fuente, 2026.10.2)
  14. ESPHome: sensor BME280
  15. ESPHome: comprobación del ID de chip del BME280 (código fuente, 2026.10.2)
  16. ESPHome: sensor ADC
  17. ESP-IDF: controlador ADC oneshot (ADC2 y Wi-Fi)
  18. Home Assistant: integración ESPHome
  19. Apollo Automation: conectar un dispositivo ESPHome a Home Assistant
  20. Waveshare: tu primer dispositivo ESPHome (opciones de instalación)