HeTPro-Tutoriales

Creamos tutoriales de electrónica digital para estudiantes, profesionistasy hoobistas de la electrónica, robótica o mecatronica. Tenemos tutoriales de Arduino, QT-Creator, OpenCV, Electrónica analógica y digital, entre otros temas.

ESP32-CAM como servidor Web con cámara

Se puede configurar a la ESP32-CAM para funcionar como un servidor web que permita visualizar una imagen tomada con la cámara OV2640 conectada al ESP32. En este tutorial te mostraré un programa que permite visualizar una imagen tomada desde la cámara de la ESP32-CAM y te la muestra en una url local. 

El código es bastante sencillo, para configurarlo basta con indicar la red y contraseña de la red que se utilizara, esto se puede modificar en las variables ssid y password.  Adicionalmente existe una variable llamada dns, esta sirve para cambiar el nombre del dns de la esp32. Un DNS es un nombre que se le asignará al dispositivo, aunque solo lo reconocen computadoras con Linux o IOs instalado y en caso de usar windows, se requiere instalar un software adicional que permita reconocer los DNS locales. En este caso el dns configurado se llama “cámara” por lo que para acceder a la imagen de la cámara, se utilizará la siguiente URL http://camara.local/imagen.jpg. Entonces esta es la URL que se utilizará para probar el codigo. En caso de que no tengas Linux o IOs, entonces tendrás que abrir el monitor serial de Arduino para averiguar que IP te asignó la red y en ese caso tendrás que acceder a http://IP-que-asigno-la-red/imagen.jpg. En la Figura E2.1, se muestra un ejemplo de esta configuración. 

Monitor serial del servidor de la esp32-cam.
Figura E2.1. Monitor serial del programa al iniciar la configuración, en este caso la red asignó la dirección 192.168.100.169, aunque cabe resaltar que esta IP cambia de acuerdo a las condiciones de su propia red.

Resoluciones válidas de la ESP32-CAM

En este caso las resoluciones probadas con la ESP32-CAM son las siguientes:

  • HQVGA ( 240px x 160px).
  • QVGA (320px, 240px).
  • WQVGA (400px 240px).
  • VGA(640px, 480px).
  • SVGA(800px,600px);

Existen otras resoluciones que se podrían compilar pero sin embargo no producen una buena calidad de imagen, como lo es la UXGA 1600px 1200px, la XGA(1024px x 768px). En teoría para aplicaciones de machine learning es posible utilizar las resoluciones anteriores con la ESP32-CAM.

Funciones

  • conectaWiFi(). Permite realizar la conexión con la red wifi y las variables públicas ssid y password.
  • error404(). Es la función que se ejecuta cuando el servidor detecta que se quiere ingresar a una url que el servidor de la ESP32 no reconoce.
  • servirImagen(). En esta función está el código necesario para suministrar al servidor web de una imagen en formato jpg. Se toma la imagen y se le proporciona al cliente. 
  • setup(). Configuraciones iniciales del programa, como la url donde puede verse la imagen, la configuración del wifi y de la cámara. 

loop(). Es el loop principal donde se está esperando por las conexiones entrantes.

Configuración de setup

Para poder utilizar la camara de la esp32, se realizan las siguientes instrucciones:

  •  using namespace esp32cam; . Es el nombre del espacio de las funciones y clases de la biblioteca esp32cam.h.
  •   Config configuracion; La variable de configuración. 
  •   configuracion.setPins(pins::AiThinker); Se configuran los pines de conexión de la ESP32-CAM.
  •   configuracion.setResolution(QVGA); Se establece la resolución. 
  •   configuracion.setBufferCount(5);  . Establece el número de imágenes en el buffer
  •   configuracion.setJpeg(80); Se configura la calidad de la imagen.
  •   bool ok = Camera.begin(configuracion);. Se establece la configuración a la cámara. 

Código

Autor: Dr. Rubén Estrada Marmolejo

Fecha de creación: 2 de Octubre del 2021

Guadalajara, Jalisco, México.

Versión en PDF:

6 comentarios en «ESP32-CAM como servidor Web con cámara»

  1. Hola, profesor:
    Excelentes tutoriales, muy didácticos.
    Intente poner en marcha el código y me salto el siguiente error:

    ********************************************************************************************
    Arduino:1.8.15 (Windows 10), Tarjeta:»AI Thinker ESP32-CAM, 240MHz (WiFi/BT), QIO, 80MHz»
    C:\Program Files (x86)\Arduino\libraries\esp32cam\src\internal\resolution.cpp: In member function ‘int esp32cam::Resolution::getWidth() const’:

    C:\Program Files (x86)\Arduino\libraries\esp32cam\src\internal\resolution.cpp:19:35: error: no match for ‘operator[]’ (operand types are ‘const resolution_info_t’ and ‘int’)

    return ::resolution[m_frameSize][0];
    ^
    C:\Program Files (x86)\Arduino\libraries\esp32cam\src\internal\resolution.cpp: In member function ‘int esp32cam::Resolution::getHeight() const’:

    C:\Program Files (x86)\Arduino\libraries\esp32cam\src\internal\resolution.cpp:28:35: error: no match for ‘operator[]’ (operand types are ‘const resolution_info_t’ and ‘int’)

    return ::resolution[m_frameSize][1];
    ^
    Se encontraron varias bibliotecas para «WiFi.h»
    Usado: C:\Users\renat\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\WiFi
    No usado: C:\Program Files (x86)\Arduino\libraries\WiFi
    exit status 1
    Error compilando para la tarjeta AI Thinker ESP32-CAM.
    *****************************************************************************************

    He programado el esp32 con otras librerías y no tengo problemas, pero el codigo es muy complejo, a diferencia de este que es simple de entender.
    Otra consulta donde se puede encontrar documentación de la biblioteca

    Sería interesante un tuto de video webcam con el esp32.

    Saludos y gracias de antemano.

    1. Hola Freddy, este ejemplo ya esta desactualizado respecto de la version que puedes descargar con el link de github. Para instalar la version de la biblioteca mas nueva. Hay que agregar en el menu additional boards, este link json: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json para que te pueda instalar la biblioteca mas actualizada. Este es el link original de los desarrolladores: https://github.com/yoursunny/esp32cam/issues y en este link puedes ver como hablan de este problema nuevo> https://github.com/yoursunny/esp32cam/issues/23.

  2. He ejecutado tu código, tengo una ESP32-WROVER-E y me sale un error de inicialización de la cámara, pero está bien conectada:

    16:05:03.094 -> ets Jul 29 2019 12:21:46
    16:05:03.094 ->
    16:05:03.094 -> rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
    16:05:03.094 -> configsip: 0, SPIWP:0xee
    16:05:03.094 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
    16:05:03.094 -> mode:DIO, clock div:1
    16:05:03.094 -> load:0x3fff0030,len:1344
    16:05:03.094 -> load:0x40078000,len:13864
    16:05:03.141 -> load:0x40080400,len:3608
    16:05:03.141 -> entry 0x400805f0
    16:05:03.895 -> E (498) camera: Camera probe failed with error 0x105(ESP_ERR_NOT_FOUND)
    16:05:03.895 -> Error al inicializar la camara
    16:05:03.895 ->
    16:05:03.895 -> Connectando a la red: FAMTURRIAGOSALTOS
    16:05:04.505 -> …..
    16:05:06.522 -> WiFi conectado
    16:05:06.522 -> Direccion IP:
    16:05:06.522 -> 192.168.1.6
    16:05:06.522 -> Direccion MAC:
    16:05:06.522 -> 44:17:93:E3:92:D4
    16:05:06.522 -> Servidor iniciado

    ¿Qué problema podría ser?

  3. hello. need help
    board: esp32-cam( ESP32_D0WD_V3_CAM)
    E (292) esp_core_dump_f��͡� No core dump partition found!
    E (292) esp_core_dump_flash: No core dump partition found!
    E (197) psram: PSRAM ID read error: 0xffffffff
    E (335) cam_hal: cam_dma_config(300): frame buffer malloc failed
    E (335) cam_hal: cam_config(384): cam_dma_config failed
    E (335) camera: Camera config failed with error 0xffffffff
    Camera init failed with error 0xffffffff

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *