Home Configuramos el módulo de cámara ESP32-CAM en Home Assistant con ESPHome
Post
Cancel

Configuramos el módulo de cámara ESP32-CAM en Home Assistant con ESPHome

Vamos a configurar una cámara diminuta, la ESP32-CAM que es un módulo para ESP32 que podremos integrar dentro de Home Assistant con el firmware de ESPHome.

Lista de componentes

  • ESP32-CAM (en mi caso tengo el modelo ESP32-S, pero hay distintas versiones del ESP).
  • Un adaptador/programador FT232RL (3.3/5V) para conectar el ESP32-S al ordenador vía USB dado que este integrado NO tiene micro-USB en la placa. ¡Esto es obligatorio!
  • Hay algunos kits como ESTE que ya incluyen el ESP, el programador FT232RL y cables dupont hembra-hembra.
  • Nuestro sistema domótico con Home Assistant y un ordenador con conexión a internet para flashear el dispositivo.
  • Suponemos el add-on de ESPHome ya instalado en Home Assistant pero si no es el caso, explico como hacerlo en ESTA entrada.
  • Alrededor de ~45 minutos de tiempo libre.

ESP32-S CAM con 16 pines

Aclaraciones

Un par de aclaraciones previas: el módulo ESP32-CAM no es suficientemente potente como para capturar vídeo a tasas de fotogramas elevados por lo que suele ser usado para capturar fotos principalmente. Esto no quiere decir que no pueda emplearse para tal uso pero cabe tener en cuenta que la calidad del vídeo es reducida y puede calentarse, aunque en mis pruebas no he notado temperaturas fuera de lo normal.

Por otro lado, esta placa cuenta con una ranura para tarjetas microSD que, en principio, no vamos a usar ya que la mayor utilidad que le he podido encontrar a este complemento sería guardar fotografías si usaramos esta placa programada con Arduino (independientemente de Home Assistant), pero ya que vamos a integrarlo en HASS no le veo mucho sentido a emplear la memoria externa. También cuenta con un pequeño conector para antenas de mayor rango, aunque en mi caso la antena Wifi integrada ha sido más que suficiente así que no he necesitado de extensor de rango.

Añadir un nodo

Vamos primero a añadir un nodo nuevo desde el add-on de ESPHome en Home Assistant y escribir el código necesario.

Nuevo nodo en ESPHome

Vamos a la web de ESPHome y, dependiendo del módulo que tengamos, nuestro código variará un poco. En general el único apartado que hay que modificar es el que se encuentra bajo la etiqueta esp32_camera ya que hay hasta 8 configuraciones distintas, todas se encuentran AQUÍ.

Como recomendación: no montar/pegar la placa en ningún soporte hasta haber probado que el flasheo es correcto ya que probablemente, si no tenemos claro cual es la versión de nuestra placa, vamos a tener que flashear más de una vez.

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
esphome:
  name: camara
  platform: ESP32
  board: esp32dev

# La opción fast_connect acelera la conexión al no escanear todas
# las señales cercanas
wifi:
  ssid: "Wifi_name"
  password: "Wifi_password"
  fast_connect: True

  # Punto de acceso wifi por si la conexión falla (opcional)
  ap:
    ssid: "Camara Fallback Hotspot"
    password: "password"

captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
# La opción reboot_timeout ayuda en dispositivos de baja capacidad
api:
  password: "API_password"
  reboot_timeout: 0s

ota:
  password: "OTA_password"

# ESP32-CAM - OJO que estas opciones varian según el modelo
esp32_camera:
  external_clock:
    pin: GPIO0
    frequency: 20MHz
  i2c_pins:
    sda: GPIO26
    scl: GPIO27
  data_pins: [GPIO5, GPIO18, GPIO19, GPIO21, GPIO36, GPIO39, GPIO34, GPIO35]
  vsync_pin: GPIO25
  href_pin: GPIO23
  pixel_clock_pin: GPIO22
  power_down_pin: GPIO32
  name: Camara

# Luz/flash de la camara
output:
  - platform: gpio
    pin: GPIO4
    id: gpio_4

# Entidad (interruptor) para Home Assistant (opcional)   
light:
  - platform: binary
    output: gpio_4
    name: Luz camara

La configuración de la cámara está bajo la etiqueta esp32_camera mientras que output/light no son necesarias para el funcionamiento de la cámara pero nos permiten controlar el «flash» que incluye la placa (el cuadradito amarillo en la esquina inferior derecha) si queremos activarlo/desactivarlo desde HASS.

Con todo esto ya escrito, vamos a compilar y guardamos el binario resultante. Mientras, vamos a montar la cámara propiamente dicha en la placa y conectar el adaptador FT232RL.

Conexión del adaptador

La cámara (de la cual también existen varias versiones, en este caso una TY-OV2 640-V2.0) es muy simple de conectar. Se trata de un conector plano que tan solo hay que empujar por ambos lados hasta que ya no veamos la línea blanca; para extraerlo solo hay que tirar de la banda negra que queda por fuera con cuidado.

Conexión de la cámara al ESP

La conexión al ordenador precisa de un adaptador, un FT232RL (un programador) que tampoco entraña más misterio, si bien es cierto que dependiendo del módulo en cuestión hay que estar atento a la distribución de los pines pues no siempre vienen dispuestos igual.

Dispositivos

Las conexiones son las que siguen:

  • GND del programador a GND del ESP. (cable negro)
  • VCC del programador a 5V del ESP (¡OJO! Si el FT232RL tiene un «jumper» para seleccionar entre 3.3/5V, es fundamental asegurarse que está a 5V). (cable blanco)
  • TX del programador a UOR del ESP. (cable verde)
  • RX del programador a UOT del ESP. (cable azul)
  • Por último, fundamental, un puenteo del pin IO0 a tierra. Dado que la placa no tiene botón de flasheo, y a diferencia del ESP32-Wroover, esta no entra en modo de flasheo de modo automático, hay que indicarle que entre en modo de flasheo con esta conexión adicional. (cable morado)

Conexión al programador FT232RL

Flasheo y puesta en marcha

Como explicamos en ESTA entrada, vamos a usar el ESPHome Flasher para cargar el binario que descargamos antes en la placa. Normalmente, el flasheo funciona mejor en 5V pero cuando ya tengamos el dispositivo funcionando se puede pasar a 3.3V, eso sí, debemos estar atentos a las conexiones (pin 3.3 / 5) y al «jumper» del FT232RL.

ESPHome Flasher para Windows

Es posible que tengamos que descargar los drivers para el FT232RL UST TO UART, si no nos detecta el puerto serie, podemos encontrarlos aquí.

Flasheo en ESPHome Flasher Logs, flasheo completado

Una vez veamos el mensaje de «Flashing done» (o similar dependiendo de la versión del programa), desconectamos la placa del puerto USB, desconectamos el puenteo del pin IO0 con GND (solo el cable morado, dejamos todo lo demás) y volvemos a conectar el USB, hacemos click en «View Logs» para comprobar que todo va bien y deberíamos ver algo similar a la imagen de arriba.

Si todo es correcto, deberíamos ver una notificación en Home Assistant en unos segundos avisando de un nuevo dispositivo (si no tenemos el auto discover activado es posible que tengamos que ir a Configuración > Integraciones > + > ESPHome > Añadir) y solo tenemos que introducir la contraseña que especificamos en el código bajo la etiqueta api.

Nuevo dispositivo detectado

Home Assistant

Desde el panel de Lovelace, y tocando en los tres puntos de la esquina superior derecha, filtramos por entidades hasta encontrar la cámara. Podemos añadirla al panel con un par de clicks, así como la entidad de tipo «botón» que representa el interruptor de la luz de la placa.

Entidades en Home Assistant

En mi caso he juntado ambas entidades en una sola tarjeta usando un add-on de HACS y queda tal que así:

1
2
3
4
5
6
7
8
9
type: 'custom:stack-in-card'
title: Camara
mode: vertical
cards:
  - type: picture-entity
    entity: camera.camara
    camera_view: live
  - type: button
    entity: light.luz_camara

Entidades en Lovelace

Consideraciones, otros usos

Para su funcionamiento, si vamos a encapsular el módulo en una carcasa o pegarlo en algún sitio, es recomendable que funcione a 3.3V en lugar de 5. Por otra parte, podemos «deshacernos» del FT232RL ahora que ya está flasheado, y darle corriente mediante una batería o similar usando directamente los pines de corriente de la placa (OJO, suministrarle más corriente al pin de 3.3V podría dejar el dispositivo inutilizable) para que resulte más cómodo.

Dado que la calidad de vídeo no es brillante, especialmente la tasa de refresco de la cámara, una posible alternativa sería usar el apartado de automatizaciones de Home Assistant, junto con un sensor de movimiento, para que la cámara tome una/varias fotos SOLO cuando se active el sensor de movimiento (trigger), lo cual además podríamos integrar con algún servicio de mensajería soportado por HASS (Telegram, Gmail, Discord, etc.) para recibir dicha imagen/es. Para que esto no ocurra siempre, sino en caso de que estemos fuera, podemos usar el componente nativo de Home Assistant para alarmas, especificando como «disparador» el sensor de movimiento y, como acción, la toma de una foto + envío de la misma cuando el panel de alarma esté activo.

La luz de la cámara ilumina más de lo que podría parecer; entidad cuyo «disparo» también puede automatizarse aunque no es precisamente una cosa discreta si se piensa utilizar como cámara de seguridad.

Resultados

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

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

Instalación de Home Assistant en un equipo Intel NUC (avanzado)