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.
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.
“PATROCINADO - Prueba los productos de Proton Privacy para proteger tu privacidad y seguridad y estarás contribuyendo al desarrollo de este sitio web sin ningún costo adicional - Proton Mail - Proton Drive - Proton Pass - Proton VPN”
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.
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.
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.
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)
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.
Es posible que tengamos que descargar los drivers para el FT232RL UST TO UART, si no nos detecta el puerto serie, podemos encontrarlos aquí.
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.
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.
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
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.
“Los enlaces a productos de Amazon que encuentras en esta página son enlaces de afiliado. Esto significa que si decides realizar una compra a través de estos enlaces, recibiré una pequeña comisión sin ningún costo adicional para ti. Estas comisiones ayudan a mantener y apoyar mi trabajo en este sitio web. ¡Gracias por tu apoyo!”
“PATROCINADO - Prueba los productos de Proton Privacy para proteger tu privacidad y seguridad y estarás contribuyendo al desarrollo de este sitio web sin ningún costo adicional - Proton Mail - Proton Drive - Proton Pass - Proton VPN”