ESP32-CAM, es un dispositivo que puede llamarse un todo en uno. Aparte de la conectividad Wifi y Bluetooth que viene de fábrica, pines GPIO, se le han añadido dos opciones más. Lleva integrado una pequeña cámara de video y una conexión para una tarjeta MicroSD, donde podremos almacenar fotos o videos.
La tercera es su bajo precio, lo que le pone la puntilla para que sea un dispositivo muy utilizado en IoT, además, conectarlo a Home Assistant y que forme parte de tu sistema domótico, es muy fácil.
Aplicaciones típicas:
- Toma de fotos.
- Streaming de video.
- Reconocimiento facial.
- Detector de movimiento.
Todo esto con un peso de 20 gramos y unas pequeñas dimensiones.
Empezamos.
Indice de contenidos
Características ESP32 CAM
Tiene menos pines GPIO que un módulo ESP32 normal, ya que muchos de esos pines se utilizan para la gestión de la cámara y el conector microSD, aun así tienes a tu disposición 9 pines. Verás a continuación que serán algunos menos.
Esquema ESP32 CAM
Lógicamente, tanta concentración de posibilidades en tan poco espacio provoca que se vayan perdiendo pines, por ejemplo, este dispositivo no tiene puerto USB, que comúnmente es la vía que utilizamos para cargar los programas a los distintos dispositivos ESPxx, Arduino etc.
Al no tener este puerto USB debemos de utilizar 6 pines para poder trabajar con el ESP32 CAM, dos para subir datos al ESP32 CAM, dos para transmitir datos TX/RX entre ordenador y ESP32 CAM, y dos para alimentar la placa. Todo esto te lo explico más adelante.
Una cámara de 2 Megapíxel, la posibilidad de añadir una tarjeta microSD de hasta 4 GB, más la opción de antena Wi-Fi externa cierran las características más importantes de este dispositivo
Partes más importantes de ESP32-CAM
Especificaciones
- Módulo ESP32-S: junto con la antena Wifi incorporada componen el ESP32
- Wi-Fi: 802.11b/g/n/e/i
- Seguridad: WPA/WPA2/WPA2-Enterprise/WPS
- CPU: 32-bit CPU de bajo consumo (2 cores).
- Velocidad de reloj: hasta 160 MHz.
- Bluetooth: Bluetooth 4.2 con BLE.
- Interfaces: UART, SPI, I2C and PWM. Hasta 9 pines GPIO
- RAM: 520 KB SRAM, externa 4 MB PSRAM
- Soporte microSD: hasta 4GB
- Múltiples modos de reposo (sleep modes):
- Deep-sleep: máximo bajo consumo que puede alcanzar 6mA@5V.
- Moderm-sleep: hasta 20mA@5V.
- Light-sleep: hasta 6.7mA@5V.
- Firmware actualizable a través de OTA (Over-The-Air).
- Flash incorporado.
- Voltaje de alimentación: 5 V.
- Conector de antena externa: en situación de comunicaciones poco estables se puede añadir una antena externa.
- Cámara:
- Soporte para cámaras OV2640 y OV7670.
- JPEG (OV2640 soportada), BMP, GRAYSCALE.
- Sensor 2 Megapixel.
- Resolución UXGA 1622×1200 px.
- Transferencia de imagen entre 15 y 60 FPS.
Configuración de pines ESP32 CAM
GPIO 0
Este pin determina si el ESP32 está en modo carga (flashing mode) o no, esto es, si puedo o no subir código a mi ESP32 CAM. Internamente, está conectado a una resistencia pull-up interna de 10k ohmios.
Si conectas el pin GPIO 0 a GND, el ESP32 CAM pasa al modo carga y puedes proceder a subir tu código al dispositivo, una vez subido, desconectamos este pin de GND, pulsamos el botón de RESET y podemos trabajar con el ESP32 CAM normalmente con tu código subido.
Comunicación Serie GPIO 1 y GPIO 3
GPIO 1 y GPIO 3 son los pines preparados para una comunicación serie (GPIO 1 ⇒ TX y GPIO 3 ⇒ RX). Como el ESP32 CAM no tiene un convertidor USB-Serial incorporado tienes que utilizar un adaptador que realiza esta comunicación entre el ESP32 CAM y tu ordenador.
Hay muchos en el mercado. Para este artículo yo he utilizado Adaptador Serie USB a TTL con chip FTDI FT232RL. Empleé este modelo porque va protegido por una caja transparente, puedes usar el que más te convenga, por ejemplo, este se emplea más comúnmente. La operativa es similar.
Componentes y pines del adaptador FTDI
Conexión tarjeta MicroSD
En la siguiente tabla puedes ver los pines usados con la tarjeta microSD cuando está en funcionamiento, esto quiere decir que si no utilizas esta funcionalidad puedes utilizar estos pines para otros menesteres.
Por ejemplo, para comunicaciones con el protocolo I2C: GPIO14 ⇒ SDA y GPIO 15 ⇒ SCL
MicroSD | ESP32 CAM |
---|---|
CLK | GPIO 14 |
CMD | GPIO 15 |
DATA0 | GPIO 2 |
DATA1 / FLASH | GPIO 4 |
DATA2 | GPIO 12 |
DATA3 | GPIO 13 |
GPIO 4
ESP32 CAM tiene un LED muy brillante que puede actuar de como flash para la cámara. Internamente, está conectado a GPIO 4.
GPIO 33
Este pin hace referencia a un LED incluido en la ESP32 CAM, cerca del regulador de tensión y el botón de reset. Un LED siempre es útil para ayudarnos a ver, de una manera visual, lo que está pasando.
Trabaja con la lógica invertida, es decir, si envías un LOW se enciende y si envías un HIGH se apaga.
Conexiones de la cámara
Conexiones entre la cámara y el ESP32 CAM
OV2640 | ESP32 CAM | NOMBRE DE LA VARIABLE PARA SU USO EN EL CODIGO |
---|---|---|
D0 | GPIO 5 | Y2_GPIO_NUM |
D1 | GPIO 18 | Y3_GPIO_NUM |
D2 | GPIO 19 | Y4_GPIO_NUM |
D3 | GPIO 21 | Y5_GPIO_NUM |
D4 | GPIO 36 | Y6_GPIO_NUM |
D5 | GPIO 39 | Y7_GPIO_NUM |
D6 | GPIO 34 | Y8_GPIO_NUM |
D7 | GPIO 35 | Y9_GPIO_NUM |
XCLK | GPIO 0 | XCLK_GPIO_NUM |
PCLK | GPIO 22 | PCLK_GPIO_NUM |
VSYNC | GPIO 25 | VSYNC_GPIO_NUM |
HREF | GPIO 23 | HREF_GPIO_NUM |
SDA | GPIO 26 | SIOD_GPIO_NUM |
SCL | GPIO 27 | SIOC_GPIO_NUM |
POWER PIN | GPIO 32 | PWDN_GPIO_NUM |
Material necesario ESP32 CAM
Aviso a navegantes, hay muchos ESP32 CAM por internet que son clónicos, personalmente tengo de ambos y no he tenido problemas relevantes.
¿Cómo se diferencian? Por el logotipo que aparece en el módulo ESP32-S, en los buenos aparece el logotipo de Ai-Thinker, empresa que utiliza los chips ESPxx de Espressif para añadirle funcionalidades como en este caso, la cámara de video y el conector de tarjetas microSD, aparte de la memoria FLASH, cristal oscilador y la antena WiFi en placa.
ANTENA ESP32 CAM
Este componente es optativo, solo es interesante si tienes mala calidad en la comunicación Wifi. Tiene un pero… y es que hay que utilizar el soldador en la propia placa para cambiar de lugar una resistencia.
Antena externa conectada al conector IPEX del ESP32 CAM
Tengo cierta experiencia soldando placas, un buen soldador, estaño de calidad, mesa preparada, pasta flux, incluso me compré un microscopio digital. Pero soldar componentes SMD es un tema aparte y si le añadimos que el componente es de tamaño micro, el tema se complica mucho.
Te paso este enlace que me ayudó bastante.
Hay que tener mucho cuidado con los grados del soldador, estaño y flux de calidad, punta fina y pulso firme.
Teniendo en cuenta que la resistencia es de 0 ohmios y que realmente se comporta como una simple conexión, hay seres humanos que se han decidido por realizar la nueva conexión con un cable y romper (literal) la antigua.
Mi única recomendación es que si tienes algún dispositivo roto, un sensor, otro ESPxx etc. que primero pruebes tu destreza. Es complicado, lo digo por experiencia.
Te pego esta imagen que he tomado con un microscopio digital para que veas en detalle la operativa.
CÁMARA de ESP32 CAM
Modelo OV2640, puedes comprártelo con diferentes longitudes del conector y varios modelos, he probado dos modelos el normal que tiene una amplitud de visión de 66º y otro que tiene 120º, hace un efecto de ojo de pez.
FDTI para ESP32 CAM
Como te he comentado anteriormente el ESP32 CAM no tiene puerto USB, literalmente no cabe, para comunicarnos (desde nuestro ordenador) con el ESP32 CAM tenemos que utilizar un adaptador FTDI (como el siguiente esquema).
Esquema de conexiones
Como ves en el dibujo he configurado a 5V la alimentación para el ESP32 CAM, las pruebas que he realizado con 3.3V me han dado problemas sobre todo si le añades al ESP32 CAM algún sensor como un sensor de movimiento (PIR) o temperatura (DHT22)
Si te fijas los pines de TX y RX van cruzados contra el ESP32 CAM para que el TX del adaptador se comunique con el RX del ESP32 CAM y viceversa.
Por último, para que el ESP32 CAM se ponga en modo programación y puedas subir tu código desde el ordenador, hay que conectar un puente entre GPIO 0 y GND.
Como programar tu ESP32 CAM
Sigue estos pasos para realizar un test de comunicaciones.
Paso 1. Selecciona la tarjeta Ai Thinker ESP 32 en tu IDE Arduino
Si la opción no aparece, ESP32 Arduino puede suceder que no esté instalada esta tarjeta en el IDE de Arduino. Debes entrar a las preferencias del IDE Arduino. Luego donde indica Gestor de URLs Adicionales de Tarjetas debes ingresar el siguiente enlace.
- https://dl.espressif.com/dl/package_esp32_index.json
Paso 2. Prepara el código
Vacío, solo queremos ver si tenemos comunicación con el ESP32 CAM y seleccionar correctamente el puerto USB en tu entorno de programación.
1 2 3 4 5 6 7 8 9 |
void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: } |
Paso 3. Conectar los pines del adaptador USB como se muestra en la foto de Esquema de conexiones
Paso 4. Puentear GPIO 0 y GND
Paso 5. Pulsar el botón de RESET del ESP32 CAM
Paso 6. Subir el código
En rojo se puede ver el registro de un ejemplo de carga correcta del programa.
Si el código subido fuese útil, los siguientes pasos son:
- Abres el Serial Monitor del IDE Arduino.
- Quitas el puente entre GPIO 0 y GND.
- Pulsas el botón RESET del ESP32 CAM.
- El ESP32 CAM carga el programa subido y ves su ejecución a través del Serial Monitor.
Programador ESP32 CAM MB
Esta es la opción perfecta si no quieres meterte en muchos líos, sustituye completamente al anterior Adaptador FTDI. Esta placa se ajusta perfectamente al ESP32 CAM y provee al ESP32 CAM de un conector mini-USB hembra y un botón de RESET más accesible.
Es compatible con la cámara OV2640.
Existen pequeños kits donde viene todo el pack completo: antena, cámara, ESP32-CAM, zócalo programador con USB.
En Aliexpress o en Amazon tú decides.
Proyecto Cámara Web con ESP32 CAM
El proyecto que he elegido para este artículo, es un ejemplo que hace referencia sobre todo, a las posibilidades de configuración de la cámara de video. La cámara es el componente más importante de este dispositivo y es el motivo principal por el que lo comprarás.
Existe un ejemplo en el propio IDE Arduino que te viene de perlas para lanzarte a probar el ESP32 CAM.
Es el siguiente.
Es un servidor WEB desde donde puedes tomar instantáneas o ver video en streaming, aparte tiene un montón de controles para que puedas jugar con la cámara.
Vamos a ello.
Paso 1. Cargar el ejemplo CamaraWebServer
Una vez cargado el ejemplo CamaraWebServer en tu IDE Arduino solo tienes que cambiar dos cosas del código para adecuarlo a tu entorno.
- El modelo ESP32 CAM a utilizar.
- La configuración WiFi: el SSID y la clave.
Paso 2. Elige el puerto de comunicaciones
Elige el puerto USB donde has conectado tu dispositivo, en mi caso lo tengo conectado a un HUB USB con alimentación propia para no tener problemas con la alimentación del ordenador.
Si trabajas con Windows tu puerto será COMx
Paso 3. Subir el código
Subes el código a tu ESP32 CAM desde tu IDE Arduino (tardará un ratito).
Paso 4. Pulsa el boton RESET de ESP32 CAM
Paso 5. Abre el Serial Monitor de tu IDE Arduino
Esta imagen del Monitor Serial muestra una carga correcta del código, como puedes ver, se ha conectado vía WiFi con tu router, este le ha dado una dirección IP. Solo queda que añadas esta dirección que se muestra, en el navegador.
Paso 6. Acceso HTTP a la cámara
Y este es el resultado final, como ves hay un montón de configuraciones posibles sobre la cámara, abajo tienes dos botones: Get Still para tomar instantáneas y Start Stream para video.
¿Y ahora?
Hay innumerables aplicaciones donde puedes utilizar un ESP32 CAM:
- Cámara de seguridad CCTV – Cámara IP.
- Visión artificial embebida – Reconocimiento facial.
- Visión remota para robots móviles .
Si le añades un sensor de presencia (PIR), programando el ESP32 CAM para que tome varias instantáneas en el momento de detectar presencia y las envíe a tu Home Assistant (o directamente a tu usuario de Telegram) conviertes al ESP32 CAM en un elemento de tu seguridad doméstica.
Como muestra, acabo de recibir mi prototipo que una empresa ha convertido en una placa para que pueda soldar los componentes.
Aparte del ESP32 CAM, tiene un sensor de presencia PIR AM312, un sensor de temperatura BME280, un LED rojo de 3 mm y un botón de reset en la parte posterior.
Incluso le he comprado una cajita, queda bien, ¿no?
Conclusión sobre ESP32 CAM
Supongo que no te has dado cuenta, pero hemos abierto un melón de un tamaño considerable, al añadir servicios web con ESP32 CAM hemos abierto la puerta a todo lo que hay detrás de un servicio web a nivel programación, es decir, HTML, CSS y JavaScript.
Es verdad que sobre este tema he pasado de puntillas, tiene miga. Es la unión de dos mundos, el poder interactuar con los controles de una cámara o simplemente poner un pin a HIGH o LOW a través de una interfaz web, es la leche.
El listón se pone cada vez más alto y debemos tener más conocimientos de más lenguajes. Que no te dé miedo. Dar un paso hacia atrás y dos hacia delante es como se avanza, no solo en este mundillo sino en cualquiera.
ESP32 CAM es perfecto para poner en práctica todo esto. Sé que la curva de aprendizaje se complica al sumar tantos lenguajes, pero merece la pena.
Desde añadirle un portal cautivo para que se pueda conectar a cualquier WiFi a través de tu móvil, hasta conectarlo a un sistema de seguridad de tu controlador favorito, (como Home Assistant) las posibilidades son muchas.
Para ello necesitas buenos profes que te orienten, enseñen y contesten a tus dudas, no te digo más…
Dale fuerte, un abrazo.
Gracias a Depositphotos por la cesión de las imágenes.