Nuevo tutorial sobre el ESP32 donde vamos a ver el módulo ESP32 + cámara, con el que podemos realizar capturar de imágenes, o video streaming.
Este módulo de ESP32 + cámara es uno de los más populares y no le faltan motivos para serlo. Con el podemos realizar de forma sencilla proyectos como video vigilancia, control remoto de un robot, y hasta realizar (modestas) funcionalidades de IA y reconocimiento visual.
El centro de este módulo es nuestro conocido SoC ESP32 del fabricante Espressif. A estas alturas hemos repetido sus características mil veces, pero resumimos en procesador de 32bits de 2 núcleos de hasta 240Mhz, con conectividad WiFi y BT.
En cuanto a la cámara, es compatible con las cámaras OV2640 (2 mpx), OV3660 (3 mpx) y OV5640 (5 mpx) del fabricante Omnivision (OVT).
Si buscáis información en la página del fabricante no la encontraréis porque ambos sensores están descatalogados desde 2009 y 2011. Pero aún es posible encontrar el Datasheet, cosa que os recomiendo hacer porque es muy interesante ver cantidad de electrónica y procesado que lleva la propia cámara, que se vende por 1-2€.
Las resoluciones disponibles en el modelo OV2640 son QVGA (320 x 240), CIF (352 x 288), VGA (640 x 480), SVGA (800 x 600), XGA (1024 x 768), SXGA (1280 x 1024) y UXGA (1600 x 1200), OV3660 añade QXGA (2048 x 1536) y OV5640 QSXGA (2592 x 1944).
En cuanto a los fps que podamos conseguir, lógicamente depende de la cámara que estemos usando y de la resolución elegida. De forma muy general, por debajo de 640x480 conseguiremos tiempo real (25-30fps). Con 800x600 notaremos una pequeña bajada, y a partir de ahí se empieza a resentir. A 1600 x 1200 es fácil que tengamos 3-5 fps.
Como decíamos adelantábamos al principio, la ESP32 Camara incorpora ciertas funciones de reconocimiento visual e IA como, por ejemplo, reconocimiento de caras (estas funciones están disponibles para bajas resoluciones < CIF).
Parece una gran limitación, pero lo cierto es que la mayoría de aplicaciones similares funcionan haciendo como primer caso un downscaling (es decir, trabajan a bajas resoluciones).
En cuanto al precio del conjunto, podemos encontrarlo varios módulos que incorporan ESP32 + Cámara. El más conocido es del fabricante AI-Thinker, con cámara OV2640, que podemos encontrar por unos 4.5€.
Esta placa de AI-Thinker tiene el inconveniente de no incorporar un conversor USB a UART. Sin embargo, muchos vendedores incorporan una base con un conversor por unos 0.80€, y que facilita mucho la programación y manipulación del módulo (yo recomiendo comprar una base, que luego podéis compartir y usar entre varios módulos).
Si no queréis comprar la base, no pasa nada. Podéis usar un conversor USB a UART externo, conectado a los pines U0T y U0X (pero al final os va a salir la torta por un pan, y vais a tener un lio innecesario de cables
Probando la ESP32 Camara
Bien, y si queremos empezar a probar con el módulo de ESP32 + Cámara ¿por dónde empezamos? ¿Por hacer videostream por WiFi? Tiene buena pinta, pero parece muy complicado.
Pues no porque, afortunadamente, la propia librería del ESP32 para el IDE de Arduino incorpora un ejemplo muy completo para el ESP32 como cámara (de hecho, no es solo muy completo, es uno de los mejores ejemplos del ESP32).
Para hacerlo funcionar simplemente elegimos nuestro hardware.
Cargamos el ejemplo ESP32\Camara\Camera webserver
Modificamos los datos de la conexión WiFI por los de nuestra red, cargamos el programa en el módulo y nos conectamos con un navegador web a la IP que le haya dado al router, y que nos mostrará por puerto serie y …¡eh! Ahí está mi mano.
Por puerto de serie también se mostrará la resolución de las imágenes capturadas, y los fps obtenidos. A la izquierda de la web de ejemplo hay una barra de configuración que permite modificar todas las opciones (y son muchas!) de la cámara conectada al ESP32.
Como decía, el ejemplo es muy muy muy completo, y os recomiendo que leáis el código porque podéis aprender mucho tanto del módulo ESP32 + Camara, como de cómo realizar la comunicación en general.
Y hasta aquí esta entrada. Os dejo en Github el código del ejemplo (que es el mismo que tenéis en el repo oficial del ESP32, nada nuevo aquí) y la página web servida, extraída del código binario del ejemplo. Lo dicho, os recomiendo que le echéis un vistazo, y nos vemos en la próxima entrada.