Home ESP32, ESPHome y Home Assistant (pero todo junto)
Post
Cancel

ESP32, ESPHome y Home Assistant (pero todo junto)

Instalamos ESPHome en Home Assistant y flasheamos un microcontrolador ESP32 con firmware personalizado para añadir sensores personalizados a Home Assistant.

Los ESP32 son un modelo de chips SoC desarrollados por Espressif muy baratos, de bajo consumo y que incorporan Wifi & Bluetooth. El ESP32 es el hermano mayor del ESP8266; amplía su capacidad de procesamiento y mantiene su reducido precio.

Aunque podemos usarlo en proyectos de Arduino (por ejemplo, para aportar cobertura wifi a un proyecto de hardware), también podemos flashear el firmware alternativo ESPHome. Este proyecto nos permite conectar los ESP32 de forma nativa al ecosistema de Home Assistant y poder hacer uso así de sus caracteristicas.

¿Qué vamos a ver?

  • Instalar las herramientas necesarias.
  • Generar un binario desde ESPHome.
  • Flashear un ESP32.
  • Integrar sensores (en mi caso será un DHT11).
  • Conectar un ESP32 con ESPHome a Home Assistant.

Componentes

Instalar las herramientas necesarias

Antes que nada vamos a aclarar que podemos ejecutar ESPHome en nuestro ordenador (necesitamos Python instalado) o podemos usar su extensión oficial para Home Assistant.

Si vamos a instalar ESPHome en nuestro ordenador tendremos que hacerlo desde PIP (el gestor de paquetes de Python) siguiendo las instrucciones que se muestran en la web oficial. Una vez instalado ESPHome se ejecuta desde la interfaz web. En mi caso, me voy a decantar por el add-on de Home Assistant que, considero, es más sencillo de instalar / utilizar para todo el mundo. Instrucciones a continuación.

Desde la ventana del Supervisor > Add-ons (como vimos en ESTE tutorial) seleccionamos ESPHome (que ya viene includo en la lista de Add-ons https://addons.community) y hacemos click en Instalar. Alternativamete, si queremos instalar una versión beta o dev de ESPHome (cosa que haré, pero que no es necesaria) tenemos que añadir el repositorio. Hacemos click en los tres puntos de la esquina superior derecha y luego en Repositorios. Añadimos el siguiente enlace y refrescamos; ahora deberían salirnos las versiones beta y dev del add-on.

Add-on store

ESPHome Add-on

Una vez instalada alguna de estas tres versiones, solo tenemos que abrir su interfaz web desde homeassistant:6052 o haciendo click en el acceso directo que se nos habrá creado en HASS (panel lateral a la izquierda).

UI ESPHome en Home Assistant

Ya tenemos el add-on instalado en HASS. Nuestra máquina (la que ejecuta HASS, que en mi caso es una Raspberry) se encargará de crear y compilar el firmware que luego flashearemos en los ESP. Para flashear tenemos tres opciones:

  • Hacerlo por OTA (al principio lo descartamos porque nuestro ESP no está conectado todavía a ninguna red wifi).
  • Conectar el ESP a nuestra máquina (Raspberry) y flashear desde ahí (no lo recomiendo porque muchas veces da problemas, no detecta los ESP, etc).
  • Usar nuestro ordenador para flashear gracias a ESPHome Flasher.

Nos vamos a decantar por la última. Aunque sea la raspberry la que compile el binario, este los vamos a descargar en nuestra máquina (en mi caso estoy usando Windows 10), y vamos a conectar nuestro ESP32 a un puerto USB y flashear usando la herramienta que nos da la buena gente de ESPHome; hablo de ESPHome Flasher. Si usais Linux o Mac contais también con versiones listas para su uso; todo ello disponible para descargar desde su repositorio oficial. Por supuesto hay más alternativas para flashear binarios en un microcontrolador pero esta herramienta es terriblemente sencilla.

ESPHome Flasher visto en MAC

Solo nos falta una pieza más; los drivers. Cuando conectemos nuestro ESP32 a nuestra máquina (Windows, Mac, etc) necesitamos que este sea reconocido para poder usar el ESPHome Flasher; por tanto, descargamos el driver correspondiente:

  • Para los CH341 (rectángulares) los encontramos AQUÍ.
  • Para los CP2102 (cuadrados) los encontramos AQUÍ.

Si vamos al administrador de dispositivos (Windows) deberíamos ver bajo la pestaña de Puertos (COM y LPT), un dispositivo asignado a un puerto COMx. Nos quedamos con ese número.

Ya tenemos TODO el software necesario instalado. Recordamos: el add-on de ESPHome en HASS, la herramienta de flasheo ESPHome Flasher y los drivers necesarios. Ahora vamos al siguiente punto: Generar un binario desde ESPHome.

Generar un binario desde ESPHome

Vamos a la extensión de ESPHome, si hemos instalado la extensión de Home Assistant estará disponible en los accesos directos o desde el supervisor. Si lo estamos ejecutando en nuestra máquina tendremos que acceder con su IP:puerto especificado.

Nos encontramos con el panel de ESPHome en un principio vacío:

UI ESPHome en Home Assistant

ESPHome se organiza mediante NODOS. Hacemos click en el botón verde + para añadir un nodo nuevo. Aquí se nos despliega un menú donde vamos a rellenar lo siguiente:

  • Nombre del nodo (en minúsculas)
  • Tipo de dispositivo (ESP32, ESP32-S, ESP8286, Sonoff-mini, etc…)
  • Credenciales de nuestra red wifi y contraseña de acceso al nodo

Creación de un nodo Tipo de dispositivo Datos de conexión Wifi Configuración completada

Damos a SUBMIT y ya hemos creado nuestro primer nodo. Ahora aparece en el panel en color rojo indicando que no está conectado. Hacemos click en editar y vamos a configurarlo. Por defecto tenemos cierto código en el que aparecen reflejados los datos que hemos introducido previamente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
esphome:
  name: habitacion
  platform: ESP32
  board: esp-wrover-kit

wifi:
  ssid: "mi_wifi"
  password: "mi_contraseña"

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Habitacion Fallback Hotspot"
    password: "acceso_emergencia"

captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: "mi_acceso"

ota:
  password: "mi_acceso"

Vamos a añadir algunos detalles, no muchos, pero por un lado será nuestro sensor DHT11 y por otro lado habilitaremos la interfaz web. Antes de eso, vamos a desarrollar un poco que estamos viendo ahora mismo.

  • esphome: detalla el tipo de dispositivo, nombre, tipo de placa, etc.
  • wifi: información de red; conexión wifi y punto de acceso (ap) por si se fuera la conexión.
  • captive_portal: es un mecanismo para conectarnos a la red wifi.
  • logger: el componente logger permite registrar los eventos que ocurren en el ESP para ser mostrados en consola.
  • api: representa la API nativa de Home Assistant que nos permite conectar nuestro dispositivo con nuestro entorno de HASS de forma muuuuuy sencilla. Esta línea no puede faltar.
  • ota: habilita el flasheo remoto. Una vez conectada a la red podremos volver a flashear nuestro ESP a distancia.
  • ¿Más componentes? Están todos en la web oficial, pero no nos hace falta mucho más ahora mismo.

Vamos a añadir un componente DHT11, en la documentación oficial de ESPHome (ojito con la documentación!), nos pide añadir:

1
2
3
4
5
6
7
8
9
10
### Sensor temperatura / humedad para salón con DHT11:
sensor:
  - platform: dht
    pin: GPIO2
    temperature:
      name: "Temperatura Habitacion"
    humidity:
      name: "Humedad Habitacion"
    update_interval: 30s
    model: DHT11

Un pequeño apunte: en la web puede aparecer que la nomenclatura de los pines se especifica como D2 en lugar de GPIO2. Dependiendo de la versión esto puede dar error. Si no os funciona DX, probar GPIOX donde X es el nº del pin en cuestión. ¿Alguna razón para elegir el pin 2? Ninguna, simplemente está cerca de GND y VCC y punto.

Tras añadir el componente Web Server (que no es necesario, solo es por probar), nos queda:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
esphome:
  name: habitacion
  platform: ESP32
  board: esp-wrover-kit

wifi:
  ssid: "mi_wifi"
  password: "mi_contraseña"

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Habitacion Fallback Hotspot"
    password: "acceso_emergencia"

captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: "mi_acceso"

ota:
  password: "mi_acceso"

# Web server (no es necesario; solo por curiosidad)
web_server:
  port: 80
  auth:
    username: "mi_usuario"
    password: "mi_acceso"
    
# Sensor temperatura / humedad para salón con DHT11:
sensor:
  - platform: dht
    pin: GPIO2
    temperature:
      name: "Temperatura Habitacion"
    humidity:
      name: "Humedad Habitacion"
    update_interval: 30s
    model: DHT11

Otro apunte: el ESP32 ejecutando ESPHome no tiene potencia como para implementar un servidor web personalizado. ¿Qué quiere decir esto?, pues que el servidor web no es modificable, aunque no es la finalidad de esta entrada, vamos a ver que Web Server simplemente expone el ESP al puerto 80 de forma que podamos ver sus «logs» desde el navegador (previa autenticación), PERO, no podemos modificar ese panel web.

Una vez escrito todo esto, hacemos click en SAVE y desde el panel principal, click en los tres puntos > Compile. Se abre una ventana de consola donde NO tenemos que tocar nada. La extensión descargará las librerias necesarias y comenzará a compilar el fichero binario que luego cargaremos sobre la placa.

Compilación ESP32

Una vez acabe el proceso (OJO, que puede tardar un rato largo), se nos habilita el botón de descargar binario. Pulsamos y el navegador nos deja guardar un fichero llamado habitacion.bin

Este fichero es nuestro binario ya compilado, con él podemos pasar al siguiente punto.

Integrar sensores (DHT11 - Temperatura/humedad)

Cada sensor/dispositivo es un mundo pero que no nos abrume, para eso está la documentación. En este caso, el DHT11 cuenta con resistencias pull-up internas por lo que podemos conectar el sensor directamente al ESP32 sin freirlo.

Cuenta con tres puertos:

  • VCC (corriente).
  • GND (tierra).
  • DATA (que en nuestro caso, hemos dicho que irá conectada al pin 2).

Los puertos de corriente y tierra no podemos definirlos, son los que son y para eso tenemos que consultar el diagrama de pines. Como hay versiones muy variadas del chip ESP, ante la duda, consultar la serigrafía que aparece impresa sobre la placa, debeis localizar un pin GND y otro VCC además del pin 2.

Conectamos (si nuestro DHT no venía con cables tendremos que comprar unos cables dupont hembra-hembra), siguiendo el diagrama de pines, VCC a VCC, GND a GND y DATA al pin 2 (en nuestro caso).

Cables 'dupont' hembra-hembra de colores ESP32 con DHT11 conectado al puerto 2 DHT11 con resistencia interna conectado al ESP32

Aunque en mi caso tengo el dispositivo conectado ya a corriente, no es necesario. No pasa nada pero dado que no está configurado no hace nada más que iluminarse (en el caso del DHT11 cuenta con un led rojo de operación mientras que el ESP32 se ilumina en rojo indicando que está encendido y en azul indicando que se está usando un puerto).

Llegados aquí, vamos a flashear el dispositivo.

Flashear un ESP32

Vamos a hacer uso de una herramienta que hemos visto al comenzar la entrada. El ESPHome-Flasher. Abrimos la herramienta que ya hemos descargado (no necesita instalación siquiera, es portable) y conectamos entonces nuestro ESP32 al ordenador con un cable microUSB to USB (preferiblemente de forma directa al ordenador sin pasar por un dock o intermediario).

Recordamos que antes de esto, ya hemos instalado los drivers correspondientes. Si esto es así, nuestro ESP32 debería aparecer en el administrador de dispositivos (en Windows) asociado a un puerto COMx en la pestaña de Puertos COM y LPT.

ESPHome Flasher en Windows

Solo tenemos que tocar dos cosas. La primera, el botón de refresh para refrescar la lista de puertos. En la lista desplegable debería aparecer el puerto COMx al que está conectado el ESP donde x representa el nº del puerto. Seleccionamos ese puerto.

A continuación, en Firmware, seleccionamos Browse y a continuación el fichero habitacion.bin que generamos antes. Hacemos click en Flash ESP y esperamos.

¡OJO aquí! Los ESP32 entran de forma automática en modo de flasheo, sin embargo, otros modelos pueden necesitar presionar un botón de «boot» que se encuentra sobre la placa. Aunque el ESP32 cuenta también con este botón, en principio no es necesario tocarlo a no ser que tengamos problemas.

En algunos casos he tenido problemas al flashear mientras tenía algún sensor conectado a la placa, simplemente desconecté el DHT11 y lo volví a conectar una vez terminado el proceso de flasheo.

Si todo va bien la herramienta cargará el binario en la placa y mostrará un mensaje cuando acabe. Atentos porque NO se detiene; una vez completado el flasheo comenzará a mostrar los «logs» en tiempo real (como se conecta al wifi, como el sensor DHT reporta datos, como pasa esos datos a HASS, etc). En ese momento desconectamos el ESP del ordenador; hemos acabado con el flasheo (deberíamos ver un mensaje indicando que ha sido completado).

Conectar un ESP32 con ESPHome a Home Assistant

Con nuestro DHT11 conectado al ESP32 y este ya flasheado, enchufamos el dispositivo a la corriente usando un adaptador de corriente (como el de vuestro móvil) y esperamos unos segundos para que se inicie y conecte a la red.

¿Hay forma de suministrarle corriente sin enchufarlo a un enchufe de pared? Si. Es más, hay muchas maneras para mantenerlo encendido con baterías externas, powerbanks, pilas, etc. En esta entrada no vamos a tratar este tema. Aquí podemos verlo enchufado a la clásica pared con gotelé; typical spanish.

ESP32 conectado a la corriente ESP32 con DHT11 en funcionamiento

En unos segundos (o minutos), aparecerá una notificación en nuestra interfaz Lovelace de Home Assistant indicando que se ha detectado un dispositivo nuevo. De lo contrario, vamos a Configuración > Integraciones > Botón + > ESPHome > y saltará la notificación de nuevo dispositivo detectado.

Hacemos click en añadir (configurar) y nos pedirá una clave para poder configurar el nodo. Es la clave que definimos arriba como «mi_acceso» bajo la etiqueta de «api». Al añadir el nodo, Home Assistant creará entidades asociadas; en este caso una entidad llamada «Temperatura Habitacion» y otra «Humedad Habitacion» (porque en mi caso estoy usando un sensor DHT11).

Sensor visto desde Home Assistant Entidades creadas por Home Assistant

Podemos añadir estas entidades a la interfaz gráfica. En este caso estoy usando una tarjeta personalizada disponible desde HACS, se trata de esta. Hemos visto como instalar HACS y medios personalizados en ESTA entrada. También tratamos la exportación de estos datos para generar gráficas más complejas e intuitivas mediante InfluxDB y Grafana en ESTA otra entrada.

Vistazo desde la interfaz de Lovelace

This post is licensed under CC BY 4.0 by the author.

Integramos Grafana con Home Assistant

Sensor de humedad para plantas o «soil moisture sensor» con ESP32 integrado en Home Assistant (vía ESPHome)