ESP32-Cam: primeros pasos y algo de Python

Estos días estuve probando esta versión de ESP32 con cámara, si bien esta hace ya algún tiempo, recién logro tener uno para hacer algunas pruebas, y puedo decir que quede impresionado.

No solo que es muy compacto, sino que la resolución y la forma de instalarse es muy sencilla. A continuación los primeros pasos para trabajar con este módulo.

Entorno de desarrollo

Al igual que con el ESP8266 es necesario incluir una serie de librerías y herramientas para utilizar el ESP32-CAM junto con el Arduino IDE, para ello debemos agregar dentro de Archivos – Preferencias la siguiente URL: https://dl.espressif.com/dl/package_esp32_index.json

Confirmamos, y luego desde el menú Herramientas – Gestor de tarjetas, buscamos ESP32 y lo instalamos. En mi caso tenia instalado una versión anterior, tuve que eliminar y volver a instalar la nueva.

Libreria ESP32CAM

Utilizaremos esta librería para acceder fácilmente a la cámara del modulo; la descargamos desde Github en el siguiente link:
https://github.com/yoursunny/esp32cam

Luego la instalamos desde Programas – Incluir librerías – Añadir biblioteca ZIP.

Concluidos estos pasos, podemos pasar a ver como lo conectamos

Conexiones

Para cargar el programa en el ESP32-CAM, debido a que no cuenta con un puerto USB, sera necesario utilizar un conversor USB-Serial, se utiliza el siguiente esquema:

Conversor USB-SerialESP32-CAM
RXTX
TXRX
VCC5V (no conectarlo a 3v3)
GNDGND

Además debemos conectar, solo para programarlo, en el modulo ESP32-CAM el GND al GPIO0.

Programa de ejemplo

Utilizaremos uno de los ejemplos provistos por la librería, para convertir el ESP32-CAM en una cámara IP, puede encontrarlo en Archivos – Ejemplos – esp32cam – WifiCam.

En el ejemplo solo debemos editar las lineas indicando el nombre de nuestra red inalámbrica y la contraseña de la misma.


1
2
const char* WIFI_SSID = "my-ssid";
const char* WIFI_PASS = "my-pass";

Antes de cargar el programa al ESP32-CAM debemos presionar el botón de Reset del mismo, cargar el código al mismo, desconectar el cable que puentea GND con GPIO0 y volver a reiniciar para que cargue el código.

Si abrimos el Monitor Serie veremos que nos indica una URL, a la cual podemos conectarnos desde el navegador.

Tomar imágenes desde Python

La gran ventaja de utilizar esta librería es que es muy sencillo integrarla con nuestras aplicaciones en Python; pueden encontrar el programa en el siguiente repositorio de github:
https://github.com/gsampallo/esp32cam-python

Solo debemos tener en cuenta de reemplazar la IP de la URL por la correcta en el programa y luego ejecutarlo; cada vez que se ejecute toma una foto.

Sistema de riego sencilla: timelapse

Siempre me gustaron los timelapse, en especial cuando se trata de algún proceso natural donde vemos crecer algo, es por ello que decidí capturar imágenes durante el tiempo que tarde en crecer las lechugas.

Una imagen tomada hoy. La cámara esta fuera de fecha.

Para lograr esto voy a utilizar una cámara ip que compre en Aliexpress hace un tiempo, que utiliza un protocolo llamada RTSP para transmitir video en tiempo real.

Hace un tiempo había armado un video de como capturar imagen de la cámara ip utilizando Python, pueden verlo aquí:

El repositorio del código del ejemplo lo pueden encontrar:
https://github.com/gsampallo/ipcam_python

El mayor problema que tuve en esto fue lograr instalar opencv en la raspberry, si bien existen numerosos tutoriales en internet no quería descargar de cero y tener que compilarlo; opté por instalar la versión para python3 (junto con python3) por medio de apt, más adelante hablara más sobre este tema.

Esta es una primer aproximación, donde arme un pequeño script -llamado creativamente camara.py- que toma las imágenes de la cámara y lo guarda en formato png; las imágenes pesan alrededor de 2mb, será necesario más adelante preparar alguna otra tarea para que comprima las imágenes.

Usando cron se dejo programado en la raspberry (donde corre el script) para que ejecute la captura de imágenes cada 20 minutos; también hay un segundo script en bash que copia las imágenes a una carpeta especifica, las sube a un servidor ftp (para liberar espacio en la raspberry) y luego las elimina.

Cuando tenga imágenes de algunos días, voy a armar un pequeño timelapse de como avanza el proyecto, por lo pronto no queda más que esperar.

UPDATE

La página esta online, pueden verla acá:

https://gsampallo.com/riego/

La imagen se actualiza cada 5′, aún no corregí la fecha de la cámara.