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:

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):

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.

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:

Solicitar una foto aunque no haya nadie presente detectado por el sensor 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
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-CAM | OLED |
|---|---|
| 5V | 5V |
| GND | GND |
| GPIO 15 | SCK |
| GPIO 14 | SDA |
El Sensor infrarrojo pasivo se conecta al GPIO 2 de la ESP32-CAM.

Por otro lado para el transistor queda así:
| Componente | Transistor BC548 |
|---|---|
| Relevador | Colector |
| GND de ESP32-CAM | Emisor |
| Resistencia, y esa resistencia a GPIO 12 de la ESP32-CAM | Base |
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
- Clona el repositorio, configura tus credenciales en
credenciales.h - La primera vez vas a necesitar, obviamente, el programador físico para la ESP32-CAM.
- 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.