Aprende a programar la ESP32-CAM en Micropython. Parte 1

La ESP32-CAM es una de las placas con cámara incorporada mas económicas del mercado. El ESP32 que incluye nos permite utilizarla en una gran cantidad de proyectos de captura de imágenes o video, ya sea para ser almacenados localmente o para ser enviados a un servidor en la red. Si bien existen muchos ejemplos desarrollados en C/C++ de Arduino, no hay tantos que utilicen Micropython. En esta serie de artículos te explicaré como grabar un firmware de Micropython en la ESP32-CAM y como escribir tus propias aplicaciones en ese lenguaje.

Introducción

Como hemos visto a través de los distintos artículos que vengo compartiendo en este blog acerca de Micropython, para poder emplearlo en una placa lo primero que debemos hacer es grabarle el firmware correspondiente a ese tipo de placa (ESP8266, ESP32, ESP32-S2, etc). Luego, si vamos a emplear algún hardware adicional, buscamos un módulo o biblioteca que ya haya sido escrito para controlar ese hardware (o lo escribimos nosotros) y luego lo importamos a nuestro código.

Sin embargo, el caso de la ESP32-CAM es ligeramente diferente. El firmware oficial de Micropython no soporta el hardware de la cámara y esto no puede ser resuelto con un módulo adicional. Sin embargo, a no desesperar, esto no es un impedimento. Como ya vimos para otras placas particulares (como la Lilygo T-display) existen versiones alternativas del firmware (denominadas custom firmware), desarrolladas de forma paralela a la oficial.

Firmwares disponibles

En el caso particular de la ESP32-CAM, hay mas de un firmware disponible, como el de shariltumin y el de lemariva (Mauro Riva). Seguramente existen otros, pero estos son dos de los mas conocidos y son los que he probado. El primero lleva un par de años sin modificaciones, mientas que el del Mauro ha sido actualizado este mismo año, lo que muestra que es un proyecto que se mantiene en actividad.

Estos dos proyectos se destacan por otra característica: tienen versiones binarias del firmware listas para grabar. Esto es importante ya que nos evita tener que compilar el código fuente completo, lo que puede ser un tanto complicado.

Teniendo en cuenta la actividad del proyecto de Mauro, que está mejor documentado, complementando la información disponible en Github con publicaciones en su blog personal, esta versión es la que yo elegí para el presente tutorial.

Veamos entonces como instalar el firmware en la placa y como escribir aplicaciones con él.

Instalación del firmware

El procedimiento de instalación del firmware no es muy diferente al que seguimos con otras placas. Sin embargo, existe una complicación adicional porque la ESP32-CAM no tiene un chip adaptador para el puerto USB, como el CH340 o CP2102 de otras placas. La ESP32-CAM solo cuenta con los pines de comunicación que manejan niveles de 3V, por lo que necesitaremos de un circuito adicional para adaptar estos niveles de tensión.

Además, existe otra complicación: la placa entra en modo Programación (para instalar el firmware) cuando encuentra el pin GPIO0 conectado a GND al encenderla, mientras que si ese pin está desconectado, entra en el modo normal que nos permite utilizar Micropython. Estos cambios en la conexión de GPIO0 debemos hacerlos de forma manual según la operación que queramos realizar.

Placas grabadoras

Una alternativa para grabar el firmware es emplear un adaptador FTDI como el que se ve en las imágenes de mas abajo, como lo hice en un artículo anterior. Esta placa realiza la adaptación de voltajes que necesitamos, pero nos obliga a conectar y desconectar a mano el pin GPIO0 de GND para entrar y salir del modo Programación.

Fig. 1. Conexiones del adaptador FTDI
Fig. 2. Adaptador conectado

Por otro lado, una alternativa mas cómoda es emplear alguna de las placas grabadoras que existen en el mercado que cuentan con la circuitería de adaptación y alguna forma de control del nivel de GPIO0. En la imagen de mas abajo pueden verse dos modelos. A la izquierda, uno que cuenta con un pulsador de Reset y un circuito para controlar GPIO desde la PC, y el segundo con dos pulsadores y control de GPIO0 manual.

Fig. 3. Placas programadoras

En mi caso, nunca pude hacer funcionar el primer modelo, pero no tuve inconvenientes con el segundo. Te recomiendo que lo adquieras si tienes planeado utilizar la ESP32-CAM a menudo porque la grabación y prueba de código es mucho mas simple y rápida que con un adaptador FTDI (en lo que sigue asumo que tienes una placa de estas).

Fig. 4: ESP32-CAM sobre la placa programadora

Descarga del firmware

El firmware debe ser descargado desde Github, mas específicamente de la carpeta firmware del repositorio. Existen dos versiones, una con soporte para bluetooth y otra sin él. A los fines del ejemplo utilizaremos la segunda, sin BT.

Fig. 5. Descarga del firmware

Una vez que tengas el firmware descargado, debes grabarlo en la placa. Puedes hacer esto (como siempre) de dos maneras: usando ESPTOOL o Thonny.

Grabación con ESPTOOL

Recordemos que ESPTOOL es una herramienta de ESPRESSIF, la empresa que desarrolla los módulos ESP, que nos permite realizar varias operaciones, tales como borrar la memoria flash, cargar archivos, etc.

Si no tienes instalado Python, puedes hacerlo siguiendo las instrucciones descriptas en este artículo.

Si no tienes ESPTOOL instalado, también puedes hacerlo de la siguiente manera desde el símbolo del sistema:

pip install esptool

Con Python y ESPTOOL instalados correctamente, ya tienes todo listo para grabar el firmware.

  • Aprieta el pulsador IO0 en la placa grabadora y conecta la alimentación con el cable USB. De esta manera la placa entra en el modo programación (si no tienes una placa grabadora, une GPIO0 a GND y conecta el adaptador FTDI).
  • Luego de conectar la alimentación ya puedes soltar el pulsador de IO0.
  • Abre una ventana de comandos de Windows y escribe lo siguiente para borrar la memoria de la ESP32-CAM (cambiando el puerto COM con el valor que corresponda en tu caso).

esptool.py --chip esp32 --port COM7 erase_flash
  • Ahora procedemos a grabar el firmware que descargamos antes. Si estas ubicado en la misma carpeta de descargas, introduce el siguiente comando (si no, deberás especificar la ruta completa al archivo .bin del firmware):
esptool.py --chip esp32 --port COM7 write_flash -z 0x1000 micropython_camera_feeeb5ea3_esp32_idf4_4.bin
  • Desconecta la placa del cable USB y vuelve a conectarla sin apretar IO0 (o quita el FTDI, desconecta GPIO0 de GND y vuelve a conectar el FTDI). Si no hubo inconvenientes, la placa ya está preparada para usar Micropython.
Fig. 6. El firmware listo para usar en Thonny

Grabación con Thonny

Desde hace algunas versiones Thonny permite grabar el firmware de una manera muy sencilla. Basta con abrir Thonny y seleccionar “Ejecutar” “Elegir intérprete” y luego “Instalar o actualizar el firmware”.

Fig. 7. Grabación del firmware en Thonny
  • Como lo expliqué antes, apretando el pulsador IO0 en la placa programadora conecta la alimentación con el cable USB. De esta manera el ESP32 entra en el modo programación.
  • Luego selecciona en Thonny el puerto COM, el archivo BIN del firmware y pulsa sobre el botón “Instalar”.
Fig. 8. Grabación del firmware en Thonny

Luego de unos instantes, el proceso queda terminado

Fig. 9. Grabación finalizada

Conclusión

En este artículo vimos paso a paso como instalar un custom firmware en la ESP32-CAM para programarla en Micropython. En el siguiente veremos cuales son los objetos y métodos que incluye este firmware para poder sacar provecho de las funciones de la cámara.

Si tienes alguna duda o quieres hacer algún comentario, escribe en la sección de mas abajo.

Navegación de la serieAprende a programar la ESP32-CAM en Micropython. Parte 2 >>

12 comentarios en «Aprende a programar la ESP32-CAM en Micropython. Parte 1»

  1. Tengo mas de una semana intentado de todo con el mismo firmware. Espero con emocion ver que a usted si le funcione.

    Gran trabajo el que hace.

    Responder
  2. Hola muy buena tardes, muchas gracias por el material que subes, ayuda mucho a los que recién empezamos con esto.
    Quería consultar si alguna vez tuviste este problema al instalar el firmware con Thonny:
    “Device is busy or does not respond. Your options:

    – wait until it completes current work;
    – use Ctrl+C to interrupt current work;
    – reset the device and try again;
    – check connection properties;
    – make sure the device has suitable MicroPython / CircuitPython / firmware;
    – make sure the device is not in bootloader mode.”

    De antemano, muchas gracias !

    Responder

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Habilitar notificaciones OK No, gracias