Acabo de programar una cosa que no sé cómo llamar. Lo que pasa es que tenía tiempo libre y los siguientes sensores/dispositivos:

  • Sensor de temperatura y humedad DHT22
  • Sensor infrarrojo pasivo (para detectar si hay una persona cerca)
  • ESP32-CAM que permite tomar fotos (obviamente)
  • Relevador
  • Bombilla
  • Pantalla OLED SSD1306 128x64

Y terminé programando un dispositivo que:

  • Muestra la temperatura, fecha y hora actual en la pantalla OLED
  • Envía fotos a Telegram cuando detecta presencia
  • Enciende una bombilla cuando detecta la presencia de alguien (usando el relevador)
  • Envía la temperatura a Telegram cuando se lo pides
  • Permite configurar la calidad de las fotos
  • Cuenta con la opción de controlar la bombilla manualmente o dejarlo en automático con el sensor PIR
  • También puede enviarte una foto cuando se lo pidas desde Telegram
  • Recibe actualizaciones OTA

Realmente me gustó mucho el resultado pues con esto podemos encender automáticamente la luz de una habitación cuando se detecta la presencia de alguien, pero además tenemos un bonito reloj que muestra la temperatura y te envía fotos de lo que sea que anda cerca.

Entonces veamos el código y circuito.

Fotos a Telegram con sensor PIR

Recapitulemos. Lo más importante es que cuando la ESP32-CAM detecta presencia te manda un aviso a tu Telegram, así como una foto.

Básicamente es una cámara de vigilancia que se activa cuando hay alguien cerca:

Cámara de vigilancia ESP32-CAM enviando notificación de presencia con foto por Telegram al detectar movimiento

El sensor PIR, además de activar la cámara y enviar fotos a Telegram automáticamente también enciende un relevador que activa una bombilla (y la bombilla puede ser controlada con un apagador de 3 vías físico):

Esquema de conexión de relevador con ESP32-CAM para control de bombilla mediante apagador de 3 vías

La pantalla OLED muestra la fecha y hora actual, la temperatura, detector de presencia, estado de la ESP32-CAM (para saber si está enviando fotos, buscando actualizaciones de Telegram, etcétera) y un segundero que es la barra que se va llenando poco a poco.

Pantalla OLED mostrando temperatura, fecha, hora, estado del sensor de presencia y barra de progreso de segundos

Se pueden enviar comandos al bot de Telegram que controla la ESP32-CAM para mostrar la temperatura, cambiar el modo de encendido de foco o la calidad de las fotos:

Interfaz de comandos del bot de Telegram para controlar parámetros de la cámara y temperatura del sensor

Solicitar una foto aunque no haya nadie presente detectado por el sensor infrarrojo:

Solicitud manual de fotografía desde Telegram recibiendo imagen de la ESP32-CAM sin detección previa de infrarrojo

El circuito completo y ya soldado se ve así, donde se aprecia la ESP32-CAM con la OLED, el sensor PIR, medidor de DHT22 (para temperatura), transistor y relevadores:

Circuito final con ESP32-CAM, pantalla OLED, sensor PIR, sensor de temperatura DHT22 y módulo de relevador con transistor

Circuito

Además de los GND y VCC (cuya conexión es obvia), los sensores y pantallas necesitan conectarse a los pines GPIO de la ESP32-CAM así que aquí los describo:

Para el caso de la OLED:

ESP32-CAMOLED
5V5V
GNDGND
GPIO 15SCK
GPIO 14SDA

El Sensor infrarrojo pasivo se conecta al GPIO 2 de la ESP32-CAM.

Circuito diseñado con Fritzing mostrando conexiones detalladas de ESP32-CAM con sensor infrarrojo, relevador, pantalla OLED y DHT22

Por otro lado para el transistor queda así:

ComponenteTransistor BC548
RelevadorColector
GND de ESP32-CAMEmisor
Resistencia, y esa resistencia a GPIO 12 de la ESP32-CAMBase

El otro extremo del relevador (ya que uno va conectado al colector del transistor) va conectado a VCC de la ESP32-CAM.

Finalmente el DHT22 se conecta en el pin 13 de la ESP32-CAM.

Y no olvides que el relevador debe llevar un diodo flyback.

Código fuente

He usado PlatformIO. En Board AI Thinker ESP32-CAM. Framework Arduino.

Las dependencias y ajustes de OTA quedan como se ve a continuación en mi ini.

Recomiendo primero leer por completo el post de cómo usar actualizaciones OTA en la ESP32-CAM para activarlas, desactivarlas o buscar la IP de la ESP32-CAM.

; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

[env:esp32cam]
platform = espressif32
board = esp32cam
framework = arduino
monitor_speed = 115200
monitor_rts = 0
monitor_dtr = 0
lib_deps=
  adafruit/Adafruit GFX Library@^1.11.9
  adafruit/Adafruit SSD1306@^2.5.9
  adafruit/DHT sensor library
  adafruit/Adafruit Unified Sensor
  bblanchon/ArduinoJson
upload_protocol=espota
upload_port=192.168.1.82
board_build.partitions = min_spiffs.csv
  1. Clona el repositorio, configura tus credenciales en credenciales.h
  2. La primera vez vas a necesitar, obviamente, el programador físico para la ESP32-CAM.
  3. Después de eso siempre puedes usar OTA, para ello no olvides configurar la IP

Repositorio: https://github.com/parzibyte/camara-telegram-temp-oled-rele

Conclusión

Entre todos los proyectos que he creado siento que este ha sido uno de los más completos y que explotan toda la tarjeta. Programando esto (y otros que publicaré en un futuro) aprendí sobre FreeRTOS, las tareas, los semáforos, optimización de envío de fotos, etcétera.

Recuerda que esto que te muestro me funciona a mí y que prácticamente es un prototipo sucio. Puedes pulirlo como tú prefieras, no olvides tener cuidado al trabajar con la energía eléctrica doméstica.

En un futuro me gustaría poner un circuito parecido a este en todos los apagadores del lugar donde vivo, pero ya veremos.

Por cierto, he mejorado todavía más el reloj, ya que le he puesto un milisegundero y ahora también muestra los segundos, así que si miras fotos o vídeos del proyecto que sean más recientes verás esa diferencia.

Si el post ha sido de tu agrado te invito a que me sigas para saber cuando haya escrito un nuevo post, haya actualizado algún sistema o publicado un nuevo software. Facebook | X | Instagram | Telegram | También estoy a tus órdenes para cualquier contratación en mi página de contacto