Hoy vamos a aprender a hacer algo tan práctico como integrar botones con ESPHome, y asignarles las funciones que queramos.
🥑 Si estás empezando con ESPHome, te recomiendo que veas el taller de la academia para sacarle el máximo partido!
Índice
Requisitos previos
Para integrar botones con ESPHome necesitas lo siguiente:
- Una placa ESP32 o ESP8266. En mi caso voy a utilizar una placa ESP8266 por su pequeño tamaño que me va a permitir crear un dispositivo más compacto.
- Unos botones. Creo que no hace falta explicar qué es un botón. Sólo te diré que creo que es el componente más sencillo, barato y útil que puedes encontrar.
- Un cable USB-C para alimentar la placa de DATOS (con un cable de carga no vas a poder instalar el software).
- Haber instalado ESPHome en Home Assistant.




Conexión de los botones
Como puedes observar, los botones son un componente muy sencillo. Básicamente se componen de dos patillas (aunque visualmente te puedan parecer 4). Por una de las patillas entrará la corriente (la roja) y por la otra saldrá hacia un pin de la placa (la verde). El botón funciona como un interruptor, ya que mientras no está pulsado el circuito esta abierto. Cuando lo pulsamos se cierra el circuito y la corriente llega hasta el pin «lector».

💡 El dibujo es un esquema para que entiendas el funcionamiento, pero puedes utilizarlas insdistintamente ya que no están asignadas.
Como siempre te digo, es importante que consultes el ‘pinout’ (o distribución de pines) de la placa. En este caso, usaremos la ESP8266 (WeMos D1 Mini) cuyo ‘pinout’ es el siguiente.

Aunque en la introducción te decía que para integrar botones con ESPHome puedes utilizar tanto una placa ESP32 como una ESP8266, y es cierto, hay algo que debes tener en cuenta. Como verás a continuación, vamos a configurar una resistencia virtual (o «pulldown») para que el botón funcione correctamente. Mientras que en las placas ESP32 puedes utilizar distintos pines, en las ESP8266 sólo puedes utilizar el D0 / GPIO16. En la práctica, esto significa que con las ESP8266 sólo podrás usar un botón, mientras que en las ESP32 podrás añadir más. Es algo a tener en cuenta en la elección de tu placa.
Dicho esto, el esquema de conexiones sería el siguiente:
- Conecta una de las patillas del botón (por cualquiera de sus extremos) al pin 3V3 de la placa para suministrar la alimentación.
- Conecta la otra patilla del botón (por cualquiera de sus extremos) a un pin que no esté en uso si usas una ESP32 (o al D0 /GPIO16 si estás usando una ESP8266) que va a leer el estado del botón.

Configuración de ESPHome
Ahora tenemos que ‘flashear’ la placa con ESPHome y la configuración correspondiente, que vamos a extraer directamente de la documentación ESPHome sobre el componente GPIO Binary Sensor. Para ello sigue estos pasos:
- Conecta la placa a tu ordenador a través del puerto USB-C.
- En Home Assistant, accede al complemento de ESPHome desde el menú lateral y pulsa en “New device”. Pulsa en “Continue” y dale un nombre (por ejemplo, “Botón”).
- Pulsa en “Next” y a continuación selecciona la opción “ESP8266” como tipo de dispositivo. Verás que en el fondo se ha creado un nuevo dispositivo.
- Pulsa en “Skip” y haz clic en el enlace “Edit” del bloque correspondiente al dispositivo que acabas de crear.
- Añade las siguientes líneas al final del código.
captive_portal: binary_sensor: - platform: gpio name: Boton 1 pin: number: GPIO16 mode: input_pulldown
- Cuando hayas terminado de editar el código pulsa en “Save” e “Install”. Selecciona la opción “Manual download” y espera a que el código se compile.
- Cuando termine, selecciona la opción “Modern format” para descargar el fichero ‘.bin’ correspondiente.
- Ahora ve a la página de ESPHome y pulsa en “Connect”. En la ventana emergente selecciona tu placa y pulsa en “Conectar”.
- Ahora pulsa en “Install” y selecciona el fichero ‘.bin’ obtenido en el paso 7.
- Vuelve a Home Assistant y ve a Configuración > Dispositivos y servicios. Lo normal es que tu dispositivo haya sido descubierto y aparezca en la parte superior, esperando únicamente a que pulses el botón de “Configurar”. De lo contrario pulsa en el botón de “Añadir integración”, busca “ESPHome” e introduce la IP de tu placa en el campo ‘Host’.
Control de dispositivos desde Home Assistant
Comprobarás que si accedes al dispositivo desde Home Assistant, se ha creado una entidad (‘binary_sensor.boton’) que te informa de si este botón está pulsado. Como te puedes imaginar, al integrar botones con ESPHome puedes utilizarlos literalmente para cualquier cosa (por ejemplo, para encender la calefacción o emitir una notificación por tus altavoces).
Para ello sólo tienes que crear una automatización y añadir un disparador de tipo «Estado», selecciona la entidad del botón (‘binary_sensor.boton’) y en el campo «A» indica «Encendido». A partir de aquí sólo tienes que añadir las acciones que quieras generar al pulsar el botón.
Control de dispositivos desde ESPHome
Si bien lo anterior te puede parecer lo más sencillo e intuitivo, hay veces que va a resultar más práctico provocar las acciones directamente desde el código de ESPHome. Por ejemplo, para controlar otros dispositivos que están conectados a la misma placa (como una tira LED). De esta forma crearás un dispositivo totalmente independiente de Home Assistant y la conexión WiFi, haciéndolo más estable.
Por ejemplo, modificando el código de esta manera, podrías encender y apagar una luz conectada a la placa usando el desencandenante ‘on_click’.
binary_sensor: - platform: gpio name: Power pin: number: GPIO16 mode: input_pulldown on_click: min_length: 50ms max_length: 350ms then: - light.toggle: bombilla
Otro motivo interesante es que puedes darle más funciones al botón. Por ejemplo, la doble pulsación con el desencadenante ‘on_double_click‘ o crear tus propias combinaciones de pulsaciones con ‘on_multi_click‘ (añadiendo, por ejemplo, la función de pulsación prolongada).
binary_sensor: - platform: gpio name: Power pin: number: GPIO16 mode: input_pulldown on_click: min_length: 50ms max_length: 350ms then: - light.turn_on: bombilla on_double_click: min_length: 50ms max_length: 350ms then: - light.turn_off: bombilla
Agradecimientos
Para elaborar esta entrada hemos seguido este video de nuestro amigo Miguel Ángel de La Choza Digital, canal que te recomiendo totalmente! 😎
♥️ ¿Eres YouTuber y quieres aparecer en nuestras entradas? Únete a nuestros canales amigos!