Probando el streaming de video con ESP32-CAM y Arduino IDE

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)

Fig. 1. Aspecto del módulo ESP32-CAM (Fuente: Ai Thinker)

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++, Micropython 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.

Fig. 2. Pines del ESP32-CAM (Fuente: AI Thinker)

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:

Fig. 3. Conexiones del ESP32-CAM para programarlo

Aquí puedes ver como me quedo armado:

Fig. 4. Conexiones

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”.

Fig. 5. Ejemplo

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.

Fig. 6. Modelo y datos de la red Wifi

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:

Fig. 7. Dirección IP de la cámara

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:

Fig. 8. La cámara funcionando

Conclusiones

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!

80 comentarios en «Probando el streaming de video con ESP32-CAM y Arduino IDE»

    • 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.

      Responder
  1. 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

    Responder
  2. 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.

    Responder
    • 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.

      Responder
  3. 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.

    Responder
    • 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.

      Responder
  4. 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

    Responder
    • 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.

      Responder
  5. 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

    Responder
    • 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?

      Responder
  6. 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 ?

    Responder
    • 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

      Responder
  7. 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?

    Responder
    • 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?

      Responder
  8. 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.

    Responder
    • 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..

      Responder
  9. 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

    Responder
      • Tengo el mismo problema y no consigo solucionarlo, hay alguna manera de comprobar si la cinta está bien puesta? Crees que el error podría ser por otro motivo?

        Responder
  10. 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.?

    Responder
  11. 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 ?

    Responder
  12. 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

    Responder
  13. Hola, he usado este firmware y otro para poder tener un multi-streaming y tanto uno como otro al cabo de una par de dias se queda bloqueado no contestando ni al ping. Implementé un contador que cada hora realiza un reinicio y sigue igual, al cabo de un día o dos se queda bloqueada.
    Sabeis como podría solucionarlo? o que a puede ser debido?
    saludos

    Responder
  14. Hola a todos, soy nuevo en esto, havia cisto buestro pagina y me encanto, pues bien me he comprado un modulo de esto sy al internar programarlo me da este error:
    Arduino:1.8.13 (Windows 10), Tarjeta:”AI Thinker ESP32-CAM”

    Error loading Python DLL: C:\Users\Biel\AppData\Local\Temp\_MEI48122\python27.dll (error code 5)
    exit status -1
    Error compilando para la tarjeta AI Thinker ESP32-CAM.
    Me podeis dar una mano a ver que estoy haciendo mal?? gracias

    Responder
  15. Buenas Ernesto, asi es en el compilador de Aruduino, ya he descargado las librerias, y lo he intentado con los diferentes tipos de modelos, incluso he intentado cargarlo cambiando el tipo de placa, ya que en esta que tengo el chipset no pone AI THINKER, si no “ESP-32S ESPRESSIF”, he intentado hablar con el vendedor pero no me ha resuelto nada…
    Gracias.

    Responder
  16. Hola.

    A mi modo de ver, ESP32-CAM es muy justita…
    Quiza me este equivocando, asi que pongo un resumen de mi experiencia a ver si alguien da un poco de luz en esto…

    – Si usas el servidor WEB no puede usar la SD.
    – Si usas el LED GPI04, no puedes usar la SD.
    – No te quedan pines libres para poner un misero sensor.
    – Si que es posible usar la camara y acceder a internet, por ejemplo para saber que hora es…
    – Si que es posible usar la SD y al mismo tiempo acceder a internet.

    Por otro lado el servidor WEB me parece criptico, no he logrado hacer naaadaaa para modificarlo.
    Por ejemplo, una cosa que veo necesaria es que se vea la hora y el dia que es…

    Alguien puede avanzar algo en estos temas, aclarar algo, aportar algo…

    Gracias y Saludos.

    Responder
  17. muy interesante, existe alguna forma de poder guardar imágenes para usar el reconocimiento facial sin tener que abrir la pagina de configuración o como por ejemplo después de un corte de energía, gracias

    Responder
  18. tengo un problema, mi esp32 cam bota la dirección ip y cuando la agrego a mi buscador no me arroja el sitio wed es como si no estuviera la conexión mi esp32

    Responder
  19. Hola muy buenas tardes, he intentado usar este modulo y es con el único que presento problemas, cabe mencionar que he trabajado con ESP 32-Wroom-32D, ESP32 modulo con Rele, y hasta el ESP8266.
    Pero el programa me compila, pero cuando intento subirlo al ESP32CAM salen los siguientes mensajes:

    “El puerto seleccionado Failed to execute sript esptool no existe o tu placa no esta conectada”

    Mas abajo dice:
    “esprool.py v3.0-dev
    Serial port COMX
    Traceback (most recent call last)
    File “esptool.py”, line 3682, in
    File “esptool.py”, line 3675, in _main
    File “esptool.py”, line 3329, in main
    File “esptool.py”, line 263, in __init__”

    Y otra serie de mensajes que corresponden a este error. Como seria posbible solucionarlo?

    Responder
  20. hola amigo que tal excelente día, mi problemas es que todo funciona bien hasta que paso a lo que es la detección de rostro lo configuro con la imagen que es de 400×296 y cuando la activo se desconecta

    Responder
  21. Hola Sr. Tolocka
    Tengo un problema con mi placa ESP32CAM. La estoy programando mediante el programador ESP32CAM-MB. Estoy intentando cargar el ejemplo de la CameraWebServer, compila bien, sube bien el código, pero cuando reseteo el ESP32CAM, me aparece este mensaje en el monitor del puerto:

    02:02:27.220 -> ets Jun 8 2016 00:22:57
    02:02:27.220 ->
    02:02:27.220 -> rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
    02:02:27.220 -> flash read err, 1000
    02:02:27.220 -> ets_main.c 371
    02:02:27.595 -> ets Jun 8 2016 00:22:57
    02:02:27.595 ->
    02:02:27.595 -> rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
    02:02:27.595 -> configsip: 0, SPIWP:0xee
    02:02:27.595 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
    02:02:27.595 -> mode:DIO, clock div:1
    02:02:27.595 -> load:0x3fff0018,len:4
    02:02:27.595 -> load:0x3fff001c,len:1216
    02:02:27.595 -> ho 0 tail 12 room 4
    02:02:27.595 -> load:0x40078000,len:10944
    02:02:27.595 -> load:0x40080400,len:6388
    02:02:27.595 -> entry 0x400806b4
    02:02:28.345 -> E (79) psram: PSRAM ID read error: 0xffffffff
    02:02:28.345 ->
    02:02:28.392 -> [E][camera.c:1113] camera_probe(): Detected camera not supported.
    02:02:28.392 -> [E][camera.c:1379] esp_camera_init(): Camera probe failed with error 0x20004

    ¿Estoy haciendo algo mal o parece que la propia cámara está defectuosa?
    Muchas gracias. Un saludo.

    Responder
      • Hola de nuevo, tengo seleccionada correctamente la camara en el codigo
        #define CAMERA_MODEL_AI_THINKER.
        Es más, he probado con otras por si acaso y tampoco funciona.

        Responder
          • hola, si he probado con “AI THINKER ESP32CAM”, “ESP32 DEV MODULE” Y “DOIT ESP32 DEVKIT V1”. Con todos subo el código ejemplo del flash o el timer y funciona, pero el ejemplo CameraWebServer no funciona.

          • No tengo un adaptador FTDI, he probado a programarla mediante un ESP8266 con cableado, el puente y todo bien conectado.

    • Tal vez llegué un poco tarde pero ese problema es a causa de la alimentación, probá alimentando con una fuente externa mas potente de 5v.
      saludos!

      Responder
  22. Hola que tal, mi esp32 funciona todo bien abro el navegador y me muestra la interfaz, pero a la hora de poner el face detection no reconoce mi rostro … esto a que se debe???

    Responder
  23. Buenas noches Ernesto. En principio te agradezco tu publicación, muy buena. Pero yo tengo el mismo problema que Samuel. Cada vez que cargo el programa de camera web server, yo lo hago con un adaptador FTDI (2102), el programa se carga pero al sacar el jumper de los pines que ponen al ESP32 CAM en modo programación, y abrir el monitor serie y resetear la ESP para que comience a mostrar la ejecución del programa, salen varias lineas (como a Samuel), y lo que esta mal en ellas es la que dice “flash read err, 1000”. Estuve indagando sobre ese error y aparentemente se trata que la flash se carga mal de entrada y luego ya no reconoce un cambio si no se lo hace a travez de comandos específicos en código máquina (tipo lenguaje ensamblador). Por las dudas probé a la ESP 32 CAM con otros programas y funciona, pero el de web server no. O sea para lo que la compré no me funciona. No se si sabrás realmente cual pueda ser el problema que causa este error, porque eso que encontré en las redes me parece muy rebuscado. Debo decir también que tuve el mismo error con 5 placas distintas. Por eso me da que pensar que es quizás algún problema de actualización, o algo así. Yo tengo en mi pc WIN10, que esto también me llevó a usar un determinado FTDI porque no todos son compatibles con WIN10. Bueno, si tuviera alguna idea para ayudarme (a Samuel también) se lo voy a a agradecer. Que este muy bien y gracias.

    Responder
      • Hola Ernesto, gracias por tu respuesta. Estoy tratando hace unos días de ver el motivo del error que te comenté. Hice muchas pruebas, de varios tipos, pero me estoy inclinando por un tema de librerías, o de versiones de Arduino. Yo tengo instalada la versión 1.8.15 de Arduino y la última versión de la librería de la ESP32. Estuve mirando el año de fabricación de la placa que compré y es 2016. O sea que puede que estas condiciones tan actuales no le sean convenientes y por eso no funcione correctamente. Me pasó algo parecido con el 8266 también, y se solucionó cambiando a una librería más antigua. Otro dato es que hice un programa muy simple como el parpadeo del led que actúa como flash en la ESP32 CAM y lo cargo con las condiciones que te nombré al comienzo y funciona bien, el problema es cuando cargo el programa camera web server que utiliza determinada librería, y eso es lo que me da mala espina. Otro dato es que el programa que esta en los ejemplos de la ESP32 CAM, o sea el que se pone cuando lo buscas para instalar desde el sketch de Arduino, en la primer línea dice el comentario siguiente: //Disable Example for now. (o sea: Deshabilite el ejemplo por ahora. No se realmente que quiere decir esa primer línea. Son todas cosas que me confunden. Nuevamente gracias. Saludos.

        Responder
      • Buen día Ernesto. Hoy te escribo para comentarte que he podido solucionar el problema. Seguramente también se solucione el de Samuel, que por lo que vi en su publicación, tenía el mismo error que yo (02:02:27.220 -> flash read err, 1000). El tema fue más sencillo de lo que pensaba. En principio en todos los foros y sitios oficiales y no oficiales recomiendan bajar las últimas versiones del soft para poner en marcha esta placa, ERROR!!. Se me ocurrió mirar el año de fabricación de mi ESP32 CAM y es del año 2016. Entonces pensé que quizás ese chip no se adecuaría a una última versión de software. Y entonces instalé versiones anteriores para el ESP32. El resultado fue positivo porque todo anduvo muy bien después. O sea que con solo ir a gestor de tarjetas y bajar alguna versión anterior (y no la última) se soluciona el problema. Yo bajé tres versiones anteriores, la 1.0.5. Bueno espero que les sirva mi experiencia. Saludos.

        Responder
  24. Buenas tardes.
    Está todo perfectamente explicado, y el programa carga perfectamente, pero cuando reseteo la ESP32 para que detecte en wifi en monitor serie me sale siempre el mismo error de la cámara:

    E (873) camera: Camera probe failed with error 0x105(ESP_ERR_NOT_FOUND)
    Camera init failed with error 0x105

    ¿Qué puede ocurrir?.
    Gracias de antemano.

    Responder
  25. Hola buen día.
    ¿Cómo puedo guardar la información de un rostro en la SD con el esp32 cam para después realizar reconocimiento facial y evitar que cada vez que se desconecte el dispositivo pierda la información de los rostros que estaba detectando?.

    Responder
  26. Buenas, podría enseñar como hacer un streaming fuera de lo local? es decir acceder a la ip vía internet? He buscado mucho como hacer eso y no he logrado entender como podría ser.

    Responder
  27. He seguido todo el tutorial.
    Perfectamente explicado, he ejecutado la aplicacion de prueba que viene de IDE Arduino 2.0.3.
    Al principio solo me funcionaba el video en OPERA, pero ahora me funciona en Firefox tambien, no he hecho nada. Alguna actualizacion de firefox que lo habra arreglado.
    Lente: OV2640-V1.0
    Utilizo un interfaz ESP32-CAM-MB

    El video se me entrecorta muchisimo y la imagen no me sale bien definida.
    – He cambiado la definicion.
    – He aumentado la iluminacion de la habitacion.
    – He limpiado la camara

    Tus capturas son muchisimo mejores que los resultados que obtengo yo

    ¿Alguna sugerencia para mejorarlo?

    pero nada de nada.
    ¿alguna sugerencia?

    Responder
    • Hola Ximeno. La calidad de la imagen nunca es muy buena, por ejemplo comparada con la de un telefono, recuerda que la resolución es baja. Acerca de que sale entrecortada, puede ser la combinacion computadora y navegador. Si puedes prueba desde otra computadora o desde un telefono.

      Responder
  28. Hola Buenas tardes, Ernesto. Quería consultarte porque tenia en mente conectar Arduino Uno con una cámara de teléfono o superior para que comience a grabar video a partir de la detección de movimiento de un sensor. No sé muy bien qué elementos me faltan, porque tengo Arduino Uno pero el conexionado con la cámara no sé por donde empezar. Gracias!

    Responder
    • Hola Matías. La verdad es que no creo que el Arduino UNO sea capaz de esa tarea, ya que tiene muy poca memoria como para controlar el flujo de datos que viene desde la cámara. Yo te recomiendo que analices hacer el proyecto con una placa mas potente. Saludos!

      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