La masificación del uso de sensores de imagen, particularmente en las cámaras de los teléfonos celulares, ha hecho que su precio haya disminuido de manera notable en los últimos años. Esta situación, combinada con la explosión de dispositivos de Internet de las cosas (IoT) ha permitido la aparición de módulos que nos permiten capturar imágenes y video para transmitirlos por Internet y hasta hacer reconocimiento facial por unos pocos dólares. En este artículo veremos como comenzar a utilizar un módulo de este tipo en particular, el ESP32-CAM de Ai Thinker.
Descripción
El ESP32-CAM es un módulo fabricado por la empresa Ai Thinker (aunque existen otros similares) basado en un SoC ESP32-S de Espressif con 520 KB de memoria interna y 4 MB externos. Cuenta con una antena Wifi incorporada y un conector tipo IPEX para conectar una antena externa y lograr así un mayor alcance. También incluye un LED para emplear como flash, un zócalo para alojar una tarjeta SD de hasta 4 GB, un conector para una cámara como la OV2640 o la OV7670 y 16 pines con señales de alimentación y entradas/salidas (GPIO)

Características
- Alimentación: 5V
- SoC: ESP-32S
- Memoria flash: 32 Mbit
- RAM: 520 KB interna + 4 MB externa (PSRAM – Pseudostatic RAM)
- Antena: PCB incorporada + conector IPEX
- Protocolos WiFi: IEEE 802.11 b/g/n/e/i
- Bluetooth: Bluetooth 4.2 BR/EDR y BLE
- Modos WIFI: Station / SoftAP / SoftAP+Station
- Seguridad: WPA/WPA2/WPA2-Enterprise/WPS
- Formatos de imagen: JPEG (OV2640), BMP, escala de grises
- Tarjeta SD: 4GB máx
- Interface: UART/SPI/I2C/PWM
- GPIO: 9
- Velocidad UART: 115200 bps (por omisión)
- Dimensiones: 40.5mm x 27mm x 4.5mm
Programación
Al contener un ESP-32S, este módulo puede ser programado empleando distintos lenguajes, como C/C++, Python o hasta BASIC, usando distintos entornos de desarrollo, como el ESP-IDF de Espressif o el conocido IDE de Arduino. En esta revisión usaremos este último, con un programa que se incluye de ejemplo. Si no tienes configurado el IDE de Arduino para programar el ESP-32, puedes encontrar todas las instrucciones en este otro artículo.
El ESP32-CAM lamentablemente no tiene una interfaz USB que permita su conexión directa a una PC, como es el caso de otros módulos ESP32 o ESP8266. Para programarlo deberemos utilizar un adaptador FTDI entre los niveles de 5V del puerto USB y los 3V de los pines de programación del ESP32.
La siguiente imagen muestra los pines del ESP32-CAM con su función.

Para programar el módulo debemos alimentarlo con una tensión de 5 Voltios, conectar la salida de datos del adaptador FTDI al pin GPIO3/U0RXD, la entrada de datos a GPIO1/U0TXD y unir GPIO0 con GND para ponerlo en modo programación. El circuito resultante sería el siguiente:

Aquí puedes ver como me quedo armado:

Hay que tener especial cuidado con la tensión de salida (Vcc) del adaptador FTDI, esta debe ser de 5V aunque la señales de datos sean de 3V.
Una vez que el módulo está correctamente conectado, abrimos el Arduino IDE y elegimos el puerto USB y la placa: AI Thinker ESP32-CAM. En el menú “Archivo” vamos a “Ejemplos” y buscamos “Camera Web Server”.

El último paso es indicarle al programa especificamente que modulo estamos usando (puede utilizarse con distintos modelos). Comentamos los nos usados y descomentamos el apropiado (AI Thinker en mi caso)
También debemos cargar las credenciales de la red Wifi, esto es, el nombre de la red (SSID) y su contrraseña, para que el módulo se pueda conectar.

Cuando todo está completo, podemos subir el programa al módulo. Una vez terminado sin errores, debemos quitar el cable que une GPIO0 con GND, resetear el módulo y abrir el monitor serie del IDE. En el monitor el programa nos muestra el estado de funcionamiento y debemos buscar la IP asignada al módulo:

Si abrimos esa dirección desde un navegador en una PC o un teléfono conectados a la misma red, podremos ver el streaming de video del módulo:

Hasta aquí hemos visto lo básico de este módulo para ponerlo en funcionamiento y hacer las primeras pruebas. La verdad es que tiene un enorme potencial por su capacidad y bajo costo, así que en el futuro les presentaré mas detalles de su funcionamiento así como otras aplicaciones.
Como siempre, espero que el artículo les haya sido de utilidad. Cualquier duda o aporte la pueden dejar mas abajo como un comentario. Nos vemos!
Hola, hay alguna aplicacion para ver la esp32 mediante la red de movil
gracias
Hola Fran, no he usado todavía una app como esa, pero haciendo accesible la IP de la cámara desde fuera de la red local todo lo que hace falta es un browser en el móvil. Se podría hacer una app elemental en App Inventor con esa funcionalidad.
Cuanto consume el modulo estando transmitiendo video, y cuanto sin estarlo
Saludos
Hola Daniel, lamentablemente no lo medí y ahora lo tengo desarmado. En la próxima prueba hago las mediciones de consumo
Hola buenas como se podria cambiar el server port para para no utilizar el 81y el 81 gracias
Hola muy bueno tu tutorial, aunque me sale este error
A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header
como podria soluconarlo, slds
Hola Adrian, parece ser un problema en la comunicación. Seguro que el adaptador FTDI funciona correctamente?
hola Adrian y etolocka, a mi me tira el mismo error :A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header
Hola Roberto, si la placa está en buenas condiciones es un problema de comunicación, por una conexión errónea o el adaptador FTDI mal conectado (o defectuoso)
Cuando reseteo la esp32-cam me aparecen estos codigos en la terminal y no hace nada mas:
⸮R⸮⸮⸮⸮⸮⸮*⸮⸮⸮⸮⸮g⸮S⸮⸮⸮f⸮j⸮R⸮⸮⸮
Recien lo compre no se si esté defectuoso o este yo haciendo algo mal.
Comprueba que la velocidad en la terminal del IDE sea 115200. Si es así, prueba con otros valores, parece como si alguno de los dos (terminal o placa) tuviera la velocidad incorrecta.
Hola Ernesto, te pregunto, ¿se puede conectar a través de un Arduino Mini o Uno? para que este sea puente de FDI o recomendas el módulo? es para hacer un robot que necesito que vea imágenes con visión inteligente y frenar en los semáforos en rojo, etc.
Hola Pablo, para programarlo? Creo que es mucho mas cómodo el módulo FTDI, además es necesario que funcione con niveles de 3V, como el ESP32-CAM.
Hola. Estoy interesado en hacer un proyecto de seguimiento facial, y debo mover servos para que la cámara siga mi rostro. Pero no quiero tener la página del navegador abierta. Sabes si el ESP32 sigue funcionando a pesar de cerrar el navegador? Saludos
Si Fernando, el ESP32 CAM puede funcionar tomando imágenes sin necesidad de hacer el stream, ese es sólo un ejemplo de las capacidades de la placa.
Hola buenas, yo he tratado de programar el Esp32 Cam hace varios días y no me funciona, me sale el error Failed to connect to ESP32: Timed out waiting for packet header y he tratado con todo lo que es posible. Me asegure que tuviera la alimentación correcta, probé con el adaptador USB a TTL y con Arduino Uno también y nada. Me podrían ayudar con alguna recomendación. Muchas gracias
Hola Héctor, si el módulo funciona, el error tiene que estar en algo relacionado con la comunicación.. el pin GPIO0 está conectado a GND? Tienes otro adaptador FTDI para probar?
Hola Ernestos: muy buen tutorial, como hago para que el video se almacene en un servidor ? para luego desde ese servidor poder ver en OffLine el video de lo que paso. o sobre a que plataforma IoT lo podría enviar o si tienes experiencia en alguna de estas plataformas o enviar los ficheros hacia una cuenta de dropbox ?
Hola Marc, no lo he hecho hasta ahora. Diría que primero hay que grabar el video en la SD y luego subirlo a Dropbox como un archivo. Haciendo algunas búsquedas en Google vi varias referencias a esta librería: https://github.com/lucasromeiro/DropboxManager que está hecha para ESP8266 pero que no debe ser difícil de adaptar al ESP32.
Cuéntanos si logras hacerlo funcionar
Haciendo los mismos pasos y comparando con otras webs la calidad de mis imágenes son defectuosas e incluso a altas resoluciones no recibo nada. He comprobado fuente de alimentación, wifi y no hay manera, ¿se puede haber estropeado?
Hola Alvaro, es raro. Cuando dices que la calidad de la imagen es defectuosa, te refieres a la resolución? No se corresponde con la que está seteada en la pagina de ejemplo?
Hola Ernesto, se puede transmitir comunicación de voz vía wifi con esta placa, conjúntame con ela de video, sería una señal de entrada de un micrófono (a transmitir) y una salida para la recibida, que seguramente deba amplificar. Gracias.
Hola Carl, habría que estudiar como hacerlo por streaming, no lo he intentado. Si no, podrías grabar el video en un archivo, el audio en otro y subirlos a un servidor por separado..
Hola… Y gracias por el tutorial.
Lo he seguido al pie de la letra, revisado conexiones, cambiado lentes, y cuando pongo la IP en el buscador, se conecta pero no sale imagen alguna.
¿Alguna idea del por que?.
Gracias
Hola Folkang, comprobaste las conexiones de la cámara? Que la cinta esté bien colocada y el conector apretado?
Hola Ernesto, magnífico tutorial.
El consumo de la cámara oscila entre 150 +/- 20 mA, en transmisión, según mis medidas.
Compruebo que la cámara para que funcione ha de estar conectada continuamente con el Arduino, y en el caso de poner una alimentación exterior deja de funcionar. Supongo que será por los comandos serie del programa…. ¿Es correcto o sólo me pasa a mi.?
Hola Antonio. Quieres decir que desconectas el modulo de la PC y lo alimentas con otra fuente y no funciona?
Hola Ernesto.
Exacto, en cuanto desconecto la interface usb (manteniendo la alimentación inalterable), el módulo deja de funcionar.
Yo lo achacaba a la falta de comunicación serie, pero claro que así tiene poca utilidad para ser usado de forma independiente.
Es posible que tu fuente no este suministrando el amperaje requerido lo la placa
Hola!!
Se podría visualizar las imágenes desde una red exterior?
Saludos.
Hola, tiene que estar alimentado a 5v el ESP32-CAM para programarlo via el adaptador FTDI (no se ve en la imagen del tutorial)?.
Luego, conecte todo, se enciende un led rojo en el FTDI pero la PC no detecta nada por el puerto USB (viendolo con el USBView), cual puede ser el problema ?
Hola, como estan, puedo programar la ESP32-CAM sin la SD?, esta SD seria para guardar informacion, fotos y videos?.
Si Miguel, el uso de la SD es opcional
Gracias x la info.
Hola el esp32 cam si carga el programa, el problema q cuando pongo el IP a la PC no hace la conección, me dice que tardo mucho en conectarse, como puedo solucionarlo? Gracias
Hola Josué, asegurate que ambos, el ESP32 CAM y la PC están conectados a la misma red Wifi