Guía de solución de problemas de ESP32-CAM: solución de los problemas más comunes

¿Tienes problemas con tu ESP32-CAM y no sabes por dónde empezar? ¡No te preocupes! En esta guía te presentamos las soluciones a los problemas más comunes que puedes encontrar con esta placa de desarrollo. Sigue leyendo para aprender cómo resolver fácilmente cualquier inconveniente y sacar el máximo provecho de tu ESP32-CAM. ¡Vamos a solucionar esos problemas juntos!

Después de lanzar algunos proyectos con el Leva ESP32Algunos lectores han informado de problemas al utilizar ESP32-CAM. Esta guía es una recopilación de los errores más comunes al utilizar el ESP32 CAM y cómo solucionarlos.

Guía de solución de problemas de ESP32-CAM: solución de los problemas más comunes

Hemos publicado los siguientes proyectos con el Leva ESP32:

  • Streaming de vídeo, reconocimiento facial y reconocimiento facial.
  • ESP32 IP CAM – Transmisión de vídeo (Home Assistant y Node-RED)
  • Tome una foto y guárdela en la tarjeta MicroSD
  • Detector de movimiento PIR con grabación de fotografías.
  • Toma una foto, guárdala en SPIFFS y muéstrala en el servidor web

Nota: Algunos de nuestros lectores han informado errores al intentar rastrear el proyecto CAM ESP32 con Home Assistant. Hemos cambiado algunas líneas en el código, por lo que la mayoría de los problemas asociados con este proyecto deberían resolverse.

Tenga en cuenta que no pudimos reproducir algunos de los errores. Sin embargo, hemos recopilado toda la información proporcionada por nuestros lectores para obtener respuestas a los problemas más comunes.

Si tiene otro problema o solución a estos problemas, puede compartir sus consejos escribiendo un comentario a continuación.

Errores más comunes:

  1. No se pudo conectar a ESP32: tiempo de espera de espera para el encabezado del paquete
  2. La inicialización de la cámara falló con el error 0x20001 o similar
  3. Detector de caída de tensión o error de meditación del gurú
  4. Error de boceto demasiado grande: se seleccionó un esquema de partición incorrecto
  5. La tarjeta en COMX no está disponible – Puerto COM no seleccionado
  6. Error de Psram: el servicio GPIO ISR no está instalado
  7. Señal WiFi débil
  8. No hay dirección IP en el monitor serie Arduino IDE
  9. No se puede abrir el servidor web
  10. La imagen está retrasada/muestra una latencia alta.
  11. esp_camera_fb_get(): ¡El fotograma no se pudo recuperar a tiempo!

Contenido

1. No se pudo conectar a ESP32: tiempo de espera de espera para el encabezado del paquete

Guía de solución de problemas de ESP32-CAM: solución de los problemas más comunes

Este error significa que ESP32-CAM no está en modo flash o no está conectado correctamente al programador FTDI.

Verifique los pasos para cargar el código.

Verifique que haya seguido los pasos exactos para poner su ESP32 CAM en modo flash. Si no sigue ninguno de los pasos, puede ocurrir este error. Estos son los pasos que debes seguir:

Conecte la placa ESP32 CAM a su computadora usando un programador FTDI. Siga el siguiente diagrama esquemático:

Guía de solución de problemas de ESP32-CAM: solución de los problemas más comunes

Importante: GPIO 0 debe estar conectado a Dimensiones para que puedas subir el código.

Muchos programadores FTDI tienen un puente que le permite seleccionar 3,3 V o 5 V. Asegúrese de que el puente esté en el lugar correcto para seleccionar 5V.

Importante: GPIO 0 debe estar conectado a GND para poder cargar el código.

Leva ESP32 programador FTDI
Dimensiones Dimensiones
5V VCC (5V)
U0R Texas
U0T RX
GPIO 0 Dimensiones

Para cargar el código, siga los siguientes pasos:

1) Ir a Herramientas > tablón y elige Pensador de IA ESP32-CAM.

2) Ir a Herramientas > Puerto y seleccione el puerto COM al que está conectado el ESP32.

3) Luego haga clic en el botón «Cargar» para cargar el código.

Guía de solución de problemas de ESP32-CAM: solución de los problemas más comunes

4) Cuando vea estos puntos en la ventana de depuración como se muestra a continuación, presione el botón RST incorporado del ESP32-CAM.

Guía de solución de problemas de ESP32-CAM: solución de los problemas más comunes

Después de unos segundos, el código debería cargarse correctamente en su tablero.

GPIO 0 debe estar conectado a GND

Importante: Si no puedes subir el código, vuelve a comprobarlo. GPIO 0 está conectado con Dimensiones y que tienes la configuración correcta en el Herramientas Menú. También debes presionar el botón de reinicio incorporado para reiniciar tu ESP32 en modo flash. También verifique que haya configurado la tapa del puente del programador FTDI en 5V.

Comprueba el programador FTDI que estás utilizando

Uno de nuestros lectores informó lo siguiente: “Descubrí que puedes programar la tarjeta con un módulo USB a TTL modelo CP2102 y que el modelo CH340 NO funcionará“. Este es el programador FTDI que utilizamos.

Suministrar el ESP32-CAM con 5V

Algunos de nuestros lectores informaron que solo pudieron cargar código cuando el ESP32 funcionaba con 5V. Así que suministre 5V al ESP32-CAM.

Programador FTDI 5V

Mida el voltaje de salida de su programador FTDI (VCC y GND) con uno multímetro para garantizar que su ESP32 CAM esté alimentada por 5V.

Guía de solución de problemas de ESP32-CAM: solución de los problemas más comunes

2. La inicialización de la cámara falló con el error 0x20001 o similar

Guía de solución de problemas de ESP32-CAM: solución de los problemas más comunes

Si recibe este error exacto, significa que su cámara OVX no está conectada correctamente a su placa ESP32 o que tiene una asignación de pines incorrecta en el código.

A veces, desconectar y enchufar el programador FTDI varias veces o reiniciar la tarjeta varias veces puede resolver el problema.

La cámara no está conectada correctamente

La cámara tiene un conector pequeño y debe asegurarse de que esté conectado correctamente y firmemente; de ​​lo contrario, no se podrá realizar la conexión.

Asignación de pin incorrecta en el código

Si ocurre este error, también podría significar que no seleccionó el tablero correcto en el área de definición o que la definición de pin para su tablero es incorrecta.

Asegúrese de elegir el módulo de cámara adecuado en sus proyectos. Todo lo que necesitas hacer es descomentar el módulo de cámara correcto y descomentar todos los demás:

//#define CAMERA_MODEL_WROVER_KIT
//#define CAMERA_MODEL_M5STACK_PSRAM
#define CAMERA_MODEL_AI_THINKER

En este ejemplo estamos usando CAMERA_MODEL_AI_THINKER, así que eso es lo que está habilitado. De lo contrario, la asignación de pines fallará y la cámara no podrá inicializarse.

Hay muchas placas de levas ESP32 lanzadas («placas falsas») donde el cableado entre ESP32 y la cámara OV puede ser diferente, por lo que la selección del módulo de la cámara puede no ser suficiente. Es posible que deba verificar cada declaración GPIO con la configuración de pines de su placa.

Por ejemplo, tablero M5Stack sin PSRAM tiene un pinout diferente al del M5STACK con PSRAM (definido en el código de forma predeterminada). Por lo tanto, debe cambiar la definición de pin en el código de acuerdo con la distribución de pines de la placa.

No hay suficiente energía de la fuente USB

Si está alimentando su ESP32 desde un puerto USB de su computadora, es posible que la fuente de alimentación no sea suficiente.

Programador FTDI defectuoso

Algunos lectores también informaron que reemplazar su programador FTDI actual resolvió este problema. con este.

La cámara/conector está defectuoso

Si se produce este error, también podría significar que su cámara o la cinta de su cámara están defectuosas. En este caso, es posible que reciba una nueva sonda de cámara OV2640.

3. Error del detector de caída de tensión o de la meditación del gurú

Si abre el monitor serie en su IDE de Arduino y sigue apareciendo el mensaje de error «Se ha activado el detector de caídas», significa que hay algún tipo de problema de hardware.

A menudo está relacionado con uno de los siguientes problemas:

  • Cable USB de mala calidad;
  • El cable USB es demasiado largo;
  • Placa de circuito con algunos defectos (uniones de soldadura defectuosas);
  • Puerto USB de la computadora defectuoso;
  • O el puerto USB de la computadora no proporciona suficiente energía.

Solución:

  • Pruebe con un cable USB diferente y más corto (con cables de datos).
  • Utilice otro puerto USB en la computadora o un concentrador USB con alimentación externa
  • Algunos lectores informaron que el problema se resolvió cuando la CAM ESP32 se alimentó con 5V.

Además, siga las sugerencias descritas en el Problema 2.

4. Error de boceto demasiado grande: se seleccionó el esquema de partición incorrecto

Guía de solución de problemas de ESP32-CAM: solución de los problemas más comunes

Si recibe el siguiente mensaje de error:

Sketch too big; see http://www.arduino.cc/en/Guide/Troubleshooting#size for tips on reducing it.
Error compiling for board ESP32 Dev Module.

Esto significa que no ha seleccionado el esquema de partición correcto. Asegúrese de haber seleccionado el esquema de partición correcto. Vaya a su IDE de Arduino Herramientas > Esquema de particiónelegir «Aplicación enorme (3 MB, sin OTA)“.

5. Tarjeta no disponible en COMX – Puerto COM no seleccionado

Guía de solución de problemas de ESP32-CAM: solución de los problemas más comunes

Si recibe el siguiente error o uno similar:

serial.serialutil.SerialException: could not open port 'COM8': WindowsError(2, 'The system cannot find the file specified.')
Failed to execute script esptool
the selected serial port Failed to execute script esptool
 does not exist or your board is not connected
Board at COM8 is not available

Esto significa que no ha seleccionado el puerto COM en el menú Herramientas. Vaya a su IDE de Arduino Herramientas > Puerto y seleccione el puerto COM al que está conectado el ESP32.

También puede significar que el ESP32-CAM no está realizando una conexión en serie con su computadora o no está conectado correctamente al puerto USB.

6. Error de Psram: el servicio GPIO ISR no está instalado

Guía de solución de problemas de ESP32-CAM: solución de los problemas más comunes

Está utilizando una tarjeta sin PSRAM y recibe el siguiente mensaje de error o uno similar:

E (161) gpio: gpio_isr_handler_remove(380): GPIO isr service is not installed, call gpio_install_isr_service() first
Camera init failed with error 0x101

cuando la tarjeta se inicializó con la siguiente configuración:

config.frame_size = FRAMESIZE_UXGA;
config.jpeg_quality = 10;
config.fb_count = 2;

Agregar lo siguiente resuelve los problemas (reduce la resolución de la imagen, por lo que no requiere tanto espacio para almacenar imágenes. Sin embargo, debido al almacenamiento limitado, no podrá obtener algunos formatos de alta resolución como resultado):

if(psramFound()){
  config.frame_size = FRAMESIZE_UXGA;
  config.jpeg_quality = 10;
  config.fb_count = 2;
} else {
  config.frame_size = FRAMESIZE_SVGA;
  config.jpeg_quality = 12;
  config.fb_count = 1;
}

Nota: La detección y captura de rostros no funciona con placas sin PSRAM. Sin embargo, aún puedes utilizar todas las demás funciones de la placa. Por ejemplo, aunque no puedes usar las funciones de detección y captura de rostros de este proyecto (transmisión de video ESP32 CAM y detección de rostros con Arduino IDE), aún puedes jugar con el ejemplo y explorar las funciones de la placa siempre que tengas la asignación de pines correcta. en el código.

7. Señal WiFi débil

Algunos lectores informaron que recibieron una señal WiFi más estable después de encender el ESP32-CAM a 5V. En esta guía especial aprenderás cómo conectar una antena externa al ESP32-CAM y ampliar la cobertura WiFi.

El ESP32-CAM ofrece la opción de utilizar la antena incorporada o una antena externa. Si su ESP32-CAM AI-Thinker no tiene conexión Wi-Fi o es deficiente, es posible que la antena externa esté activada. Si conecta una antena externa al puerto, debería funcionar bien.

Verifique que la resistencia del puente 0K en el conector de la antena esté en la posición correcta para la antena deseada. Hay 3 pequeños cuadrados blancos dispuestos como un “<”, siendo la posición media la posición común.

Guía de solución de problemas de ESP32-CAM: solución de los problemas más comunes
Foto cortesía de Helmut Schönborn

La foto de abajo muestra una mirada más cercana a esta área. Puedes ver claramente una pequeña resistencia de 0K conectada a la antena incorporada.

Guía de solución de problemas de ESP32-CAM: solución de los problemas más comunes
Foto cortesía de Helmut Schönborn

Con la placa girada de modo que la antena de PCB quede hacia arriba:

  • Para utilizar la antena PCB, la resistencia debe estar en la posición superior, de la siguiente manera: /
  • Al conectar la antena, la resistencia debe estar en la parte inferior, así:

Para activar la antena integrada:

  • Desoldar la resistencia que lleva a la antena, está en esta posición
  • Y suelde los dos conectores para activar la antena integrada.

8. No hay dirección IP en el monitor serie Arduino IDE

Si solo se imprimen puntos en el monitor serie (……), significa que su ESP32-CAM no se está conectando a su enrutador a través de Wi-Fi.

Verifique sus credenciales de red

Debe asegurarse de haber ingresado sus credenciales de red exactas (SSID y contraseña) en las siguientes variables:

const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

Elija la velocidad de baudios correcta en el monitor serie Arduino IDE

Si no selecciona la velocidad en baudios correcta en el monitor serie Arduino IDE, no obtendrá la dirección IP de su placa o simplemente verá basura en la pantalla.

Asegúrese de seleccionar la velocidad en baudios correcta. En nuestros ejemplos con ESP32-CAM usamos la velocidad en baudios 115200.

Reinicia el tablero varias veces.

Es posible que también deba presionar el botón RESET incorporado del ESP32-CAM varias veces para reiniciar su ESP e imprimir la dirección IP durante el proceso de inicio.

RX y TX intercambiados

Verifique las conexiones entre su placa ESP32 y el programador FTDI. RX va a TX y TX va a RX. Si estas conexiones se invierten, el ESP32-CAM no puede establecer comunicación en serie con su computadora.

Alcance WiFi

Si el enrutador está lejos de su placa ESP32, es posible que no pueda recibir la señal WiFi. Asegúrese de que su ESP32 CAM esté relativamente cerca de su enrutador.

9. No se puede abrir el servidor web

Si ESP32-CAM imprime la dirección IP en su monitor serie Arduino IDE, pero aparece una pantalla en blanco cuando intenta abrir el servidor web en su navegador web, generalmente significa que está intentando acceder al ESP32 a través de varias pestañas del navegador web. Acceso al servidor web CAM.

Actualmente, estos bocetos de ESP32 CAM solo funcionan cuando hay un cliente conectado a la vez.

10. La imagen tiene retraso/muestra alta latencia

Una cierta latencia es normal para una cámara tan pequeña y barata. Algunos lectores han sugerido lo siguiente para reducir la latencia:

  • Alimente el ESP32-CAM con una fuente de alimentación independiente de 5V
  • Reduzca el tamaño del marco usando lo siguiente en su código:
    config.frame_size = FRAMESIZE_SVGA o config.frame_size = FRAMESIZE_VGA
  • Utilice una antena externa.

11. esp_camera_fb_get(): ¡El fotograma no se pudo recuperar a tiempo!

Nosotros personalmente nunca hemos tenido este problema. Sin embargo, muchos lectores encuentran este error con sus placas CAM ESP32.

Uno de nuestros lectores (Peroné) sugirió lo siguiente para resolver este problema:

“Estoy usando el módulo ESP32 CAM Módulo de sensor de cámara OV2640 de 2MP Módulo USB tipo C de Aliexpress. Aunque no se menciona, no tiene la PSRAM adicional de los otros modelos M5 y la cámara tiene un pin IO modificado.

Mira aquí: https://github.com/m5stack/m5stack-cam-psram/blob/master/README.md y desplácese hacia abajo hasta «Comparación de interfaces».

El ejemplo de CameraWebServer Arduino que probablemente todos usamos no tiene definido este modelo ESP32 CAM.

Debes agregarlo tú mismo en la pestaña principal:

#define CAMERA_MODEL_M5STACK_NO_PSRAM

Y en el Camera_Pins.h Pestaña: Agregue lo siguiente:

#elif defined(CAMERA_MODEL_M5STACK_NO_PSRAM)
#define PWDN_GPIO_NUM -1
#define RESET_GPIO_NUM 15
#define XCLK_GPIO_NUM 27
#define SIOD_GPIO_NUM 25
#define SIOC_GPIO_NUM 23
#define Y9_GPIO_NUM 19
#define Y8_GPIO_NUM 36
#define Y7_GPIO_NUM 18
#define Y6_GPIO_NUM 39
#define Y5_GPIO_NUM 5
#define Y4_GPIO_NUM 34
#define Y3_GPIO_NUM 35
#define Y2_GPIO_NUM 17
#define VSYNC_GPIO_NUM 22
#define HREF_GPIO_NUM 26
#define PCLK_GPIO_NUM 21

Y puedes empezar.

También tenga en cuenta que la resolución máxima del módulo CAM ESP32 desnudo es XGA 1024×768, lo que probablemente también se deba a la falta de PSRAM”.

Esperamos que esta sugerencia resuelva su problema. Infórmenos en la sección para comentarios.

Usar tarjetas microSD más grandes

Según la hoja de datos, el ESP32-CAM sólo debería admitir tarjetas microSD de 4GB.

Sin embargo, probamos con Tarjeta microSD de 16GB y funciona bien.

Es posible que no puedas almacenar más de 4 GB aunque tengas 16 GB. No hemos probado si puedes almacenar más de 4 GB, por lo que no estamos seguros.

¿Son estos proyectos compatibles con la placa M5Stack?

Si, eso M5 Pila ESP32 El tablero es compatible con nuestros proyectos. Sin embargo, deberá verificar la configuración de pines de su cámara para asegurarse de tener la asignación correcta en el código.

tu puedes el Pila M5 Conexiones de cámara Aquí.

Cómo configurar una dirección IP fija

Para configurar una dirección IP estática/fija, puede seguir el siguiente tutorial:

  • Dirección IP estática/fija ESP32

Configure ESP32-CAM como punto de acceso (AP).

Puede configurar su ESP32-CAM como punto de acceso (AP). Esto significa que puede conectarse directamente a su ESP32 CAM sin tener que conectarse a su enrutador. Puede configurar su servidor web de transmisión de video como punto de acceso usando el siguiente código:

/*********
  Rui Santos
  Complete project details at https://RandomNerdTutorials.com/esp32-cam-video-streaming-web-server-camera-home-assistant/
  
  IMPORTANT!!! 
   - Select Board "AI Thinker ESP32-CAM"
   - GPIO 0 must be connected to GND to upload a sketch
   - After connecting GPIO 0 to GND, press the ESP32-CAM on-board RESET button to put your board in flashing mode
  
  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.

  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*********/

#include "esp_camera.h"
#include <WiFi.h>
#include "esp_timer.h"
#include "img_converters.h"
#include "Arduino.h"
#include "fb_gfx.h"
#include "soc/soc.h" //disable brownout problems
#include "soc/rtc_cntl_reg.h"  //disable brownout problems
#include "esp_http_server.h"

// Replace with your network credentials
const char* ssid     = "ESP32-Access-Point";
const char* password = "123456789";

#define PART_BOUNDARY "123456789000000000000987654321"

// This project was tested with the AI Thinker Model, M5STACK PSRAM Model and M5STACK WITHOUT PSRAM
#define CAMERA_MODEL_AI_THINKER
//#define CAMERA_MODEL_M5STACK_PSRAM
//#define CAMERA_MODEL_M5STACK_WITHOUT_PSRAM
//#define CAMERA_MODEL_M5STACK_WIDE

// Not tested with this model
//#define CAMERA_MODEL_WROVER_KIT

#if defined(CAMERA_MODEL_WROVER_KIT)
  #define PWDN_GPIO_NUM    -1
  #define RESET_GPIO_NUM   -1
  #define XCLK_GPIO_NUM    21
  #define SIOD_GPIO_NUM    26
  #define SIOC_GPIO_NUM    27
  
  #define Y9_GPIO_NUM      35
  #define Y8_GPIO_NUM      34
  #define Y7_GPIO_NUM      39
  #define Y6_GPIO_NUM      36
  #define Y5_GPIO_NUM      19
  #define Y4_GPIO_NUM      18
  #define Y3_GPIO_NUM       5
  #define Y2_GPIO_NUM       4
  #define VSYNC_GPIO_NUM   25
  #define HREF_GPIO_NUM    23
  #define PCLK_GPIO_NUM    22

#elif defined(CAMERA_MODEL_M5STACK_WIDE)
  #define PWDN_GPIO_NUM     -1
  #define RESET_GPIO_NUM    15
  #define XCLK_GPIO_NUM     27
  #define SIOD_GPIO_NUM     22
  #define SIOC_GPIO_NUM     23

  #define Y9_GPIO_NUM       19
  #define Y8_GPIO_NUM       36
  #define Y7_GPIO_NUM       18
  #define Y6_GPIO_NUM       39
  #define Y5_GPIO_NUM        5
  #define Y4_GPIO_NUM       34
  #define Y3_GPIO_NUM       35
  #define Y2_GPIO_NUM       32
  #define VSYNC_GPIO_NUM    25
  #define HREF_GPIO_NUM     26
  #define PCLK_GPIO_NUM     21

#elif defined(CAMERA_MODEL_M5STACK_PSRAM)
  #define PWDN_GPIO_NUM     -1
  #define RESET_GPIO_NUM    15
  #define XCLK_GPIO_NUM     27
  #define SIOD_GPIO_NUM     25
  #define SIOC_GPIO_NUM     23
  
  #define Y9_GPIO_NUM       19
  #define Y8_GPIO_NUM       36
  #define Y7_GPIO_NUM       18
  #define Y6_GPIO_NUM       39
  #define Y5_GPIO_NUM        5
  #define Y4_GPIO_NUM       34
  #define Y3_GPIO_NUM       35
  #define Y2_GPIO_NUM       32
  #define VSYNC_GPIO_NUM    22
  #define HREF_GPIO_NUM     26
  #define PCLK_GPIO_NUM     21

#elif defined(CAMERA_MODEL_M5STACK_WITHOUT_PSRAM)
  #define PWDN_GPIO_NUM     -1
  #define RESET_GPIO_NUM    15
  #define XCLK_GPIO_NUM     27
  #define SIOD_GPIO_NUM     25
  #define SIOC_GPIO_NUM     23
  
  #define Y9_GPIO_NUM       19
  #define Y8_GPIO_NUM       36
  #define Y7_GPIO_NUM       18
  #define Y6_GPIO_NUM       39
  #define Y5_GPIO_NUM        5
  #define Y4_GPIO_NUM       34
  #define Y3_GPIO_NUM       35
  #define Y2_GPIO_NUM       17
  #define VSYNC_GPIO_NUM    22
  #define HREF_GPIO_NUM     26
  #define PCLK_GPIO_NUM     21

#elif defined(CAMERA_MODEL_AI_THINKER)
  #define PWDN_GPIO_NUM     32
  #define RESET_GPIO_NUM    -1
  #define XCLK_GPIO_NUM      0
  #define SIOD_GPIO_NUM     26
  #define SIOC_GPIO_NUM     27
  
  #define Y9_GPIO_NUM       35
  #define Y8_GPIO_NUM       34
  #define Y7_GPIO_NUM       39
  #define Y6_GPIO_NUM       36
  #define Y5_GPIO_NUM       21
  #define Y4_GPIO_NUM       19
  #define Y3_GPIO_NUM       18
  #define Y2_GPIO_NUM        5
  #define VSYNC_GPIO_NUM    25
  #define HREF_GPIO_NUM     23
  #define PCLK_GPIO_NUM     22
#else
  #error "Camera model not selected"
#endif

static const char* _STREAM_CONTENT_TYPE = "multipart/x-mixed-replace;boundary=" PART_BOUNDARY;
static const char* _STREAM_BOUNDARY = "rn--" PART_BOUNDARY "rn";
static const char* _STREAM_PART = "Content-Type: image/jpegrnContent-Length: %urnrn";

httpd_handle_t stream_httpd = NULL;

static esp_err_t stream_handler(httpd_req_t *req){
  camera_fb_t * fb = NULL;
  esp_err_t res = ESP_OK;
  size_t _jpg_buf_len = 0;
  uint8_t * _jpg_buf = NULL;
  char * part_buf[64];

  res = httpd_resp_set_type(req, _STREAM_CONTENT_TYPE);
  if(res != ESP_OK){
    return res;
  }

  while(true){
    fb = esp_camera_fb_get();
    if (!fb) {
      Serial.println("Camera capture failed");
      res = ESP_FAIL;
    } else {
      if(fb->width > 400){
        if(fb->format != PIXFORMAT_JPEG){
          bool jpeg_converted = frame2jpg(fb, 80, &_jpg_buf, &_jpg_buf_len);
          esp_camera_fb_return(fb);
          fb = NULL;
          if(!jpeg_converted){
            Serial.println("JPEG compression failed");
            res = ESP_FAIL;
          }
        } else {
          _jpg_buf_len = fb->len;
          _jpg_buf = fb->buf;
        }
      }
    }
    if(res == ESP_OK){
      size_t hlen = snprintf((char *)part_buf, 64, _STREAM_PART, _jpg_buf_len);
      res = httpd_resp_send_chunk(req, (const char *)part_buf, hlen);
    }
    if(res == ESP_OK){
      res = httpd_resp_send_chunk(req, (const char *)_jpg_buf, _jpg_buf_len);
    }
    if(res == ESP_OK){
      res = httpd_resp_send_chunk(req, _STREAM_BOUNDARY, strlen(_STREAM_BOUNDARY));
    }
    if(fb){
      esp_camera_fb_return(fb);
      fb = NULL;
      _jpg_buf = NULL;
    } else if(_jpg_buf){
      free(_jpg_buf);
      _jpg_buf = NULL;
    }
    if(res != ESP_OK){
      break;
    }
    //Serial.printf("MJPG: %uBn",(uint32_t)(_jpg_buf_len));
  }
  return res;
}

void startCameraServer(){
  httpd_config_t config = HTTPD_DEFAULT_CONFIG();
  config.server_port = 80;

  httpd_uri_t index_uri = {
    .uri       = "/",
    .method    = HTTP_GET,
    .handler   = stream_handler,
    .user_ctx  = NULL
  };
  
  //Serial.printf("Starting web server on port: '%d'n", config.server_port);
  if (httpd_start(&stream_httpd, &config) == ESP_OK) {
    httpd_register_uri_handler(stream_httpd, &index_uri);
  }
}

void setup() {
  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector
 
  Serial.begin(115200);
  Serial.setDebugOutput(false);
  
  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = Y2_GPIO_NUM;
  config.pin_d1 = Y3_GPIO_NUM;
  config.pin_d2 = Y4_GPIO_NUM;
  config.pin_d3 = Y5_GPIO_NUM;
  config.pin_d4 = Y6_GPIO_NUM;
  config.pin_d5 = Y7_GPIO_NUM;
  config.pin_d6 = Y8_GPIO_NUM;
  config.pin_d7 = Y9_GPIO_NUM;
  config.pin_xclk = XCLK_GPIO_NUM;
  config.pin_pclk = PCLK_GPIO_NUM;
  config.pin_vsync = VSYNC_GPIO_NUM;
  config.pin_href = HREF_GPIO_NUM;
  config.pin_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG; 
  
  if(psramFound()){
    config.frame_size = FRAMESIZE_UXGA;
    config.jpeg_quality = 10;
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_SVGA;
    config.jpeg_quality = 12;
    config.fb_count = 1;
  }
  
  // Camera init
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x", err);
    return;
  }
  // Connect to Wi-Fi network with SSID and password
  Serial.print("Setting AP (Access Point)…");
  // Remove the password parameter, if you want the AP (Access Point) to be open
  WiFi.softAP(ssid, password);

  IPAddress IP = WiFi.softAPIP();
  Serial.print("Camera Stream Ready! Connect to the ESP32 AP and go to: http://");
  Serial.println(IP);
  
  // Start streaming web server
  startCameraServer();
}

void loop() {
  delay(1);
}

Ver código sin formato

Para comprender mejor cómo funciona, puedes leer el siguiente tutorial:

  • Punto de acceso (AP) ESP32 para servidores web

Guía de solución de problemas de ESP32-CAM: solución de los problemas más comunes

[eBook] Crea proyectos CAM ESP32 con Arduino IDE

Aprenda a programar y crear proyectos con ESP32-CAM usando Arduino IDE 17 DESCARGAR «

Aprenda a programar y crear proyectos con ESP32-CAM usando Arduino IDE 17 DESCARGAR «

Envolver

Esperamos que esta guía de solución de problemas le haya resultado útil y que tenga su Leva ESP32 trabajar con nuestros proyectos.

Si tiene otros problemas o sugerencias para resolver estos problemas, deje un comentario a continuación..

Si te gusta este proyecto, es posible que también te gusten otros proyectos que utilizan ESP32-CAM:

  • Manual de configuración de pines de ESP32-CAM AI-Thinker: explicación del uso de GPIO
  • Streaming de vídeo, reconocimiento facial y reconocimiento facial.
  • Crear proyectos ESP32-CAM (libro electrónico)
  • Lea todos nuestros proyectos, tutoriales y guías de ESP32 CAM

Gracias por leer.

PD Es muy difícil entender qué está mal en su proyecto si no podemos reproducir el error por nuestra parte. Sin embargo, si publica el error, es posible que haya otros lectores con el mismo problema/solución. Por ello te animamos a interactuar en la sección de comentarios.

Error 403 The request cannot be completed because you have exceeded your quota. : quotaExceeded

Guía de solución de problemas de ESP32-CAM: solución de los problemas más comunes

Después de lanzar algunos proyectos con el ESP32-CAM, algunos lectores reportaron problemas al intentar utilizar el ESP32-CAM. Esta guía es una recopilación de los errores más comunes al utilizar el ESP32-CAM y cómo solucionarlos.

Proyectos lanzados con el ESP32-CAM:

  1. Video Streaming, Detección Facial y Reconocimiento Facial
  2. ESP32 IP CAM – Video Streaming (Home Assistant y Node-RED)
  3. Tomar una foto y guardar en una tarjeta MicroSD
  4. Detector de Movimiento PIR con Captura de Foto
  5. Tomar una foto, guardar en SPIFFS y mostrar en un servidor web

Nota: Algunos lectores reportaron errores al intentar seguir el proyecto ESP32-CAM con Home Assistant. Hemos modificado algunas líneas en el código, por lo que la mayoría de los problemas relacionados con ese proyecto deberían estar solucionados.

Por favor, ten en cuenta que no pudimos reproducir algunos de los errores en nuestro lado. Sin embargo, hemos recopilado toda la información proporcionada por nuestros lectores para obtener respuestas a los problemas más comunes.

Errores más comunes:

  • Failed to connect to ESP32: Timed out waiting for packet header
  • Camera init failed with error 0x20001 o similar
  • Brownout detector or Guru meditation error
  • Sketch too big error – Wrong partition scheme selected
  • Board at COMX is not available – COM Port Not Selected
  • Psram error: GPIO isr service is not installed
  • Weak Wi-Fi Signal
  • No IP Address in Arduino IDE Serial Monitor
  • Can’t open web server
  • The image lags/shows lots of latency
  • esp_camera_fb_get(): Failed to get the frame on time

1. Error: Failed to connect to ESP32: Timed out waiting for packet header

Este error significa que el ESP32-CAM no está en modo de flasheo o no está conectado correctamente al programador FTDI.

Pasos a seguir:

  1. Conecta la placa ESP32-CAM a tu computadora utilizando un programador FTDI.
  2. Asegúrate de seguir los pasos exactos para poner tu ESP32-CAM en modo de flasheo.

Continúa siguiendo los pasos detallados en la guía para completar con éxito el proceso de flasheo.

2. Error: Camera init failed with error 0x20001 o similar

Este error significa que tu cámara OVX no está conectada correctamente a la placa ESP32 o tienes una asignación incorrecta de pines en el código.

Pasos a seguir:

  1. Asegúrate de que la cámara esté conectada de manera segura y en la posición correcta.
  2. Asegúrate de seleccionar el módulo de cámara correcto en tus proyectos.

Continúa siguiendo los pasos detallados en la guía para solucionar este error.

3. Error: Brownout detector or Guru meditation error

Al abrir el monitor serial de Arduino IDE y ver el mensaje «Brownout detector was triggered» constantemente impreso una y otra vez, significa que hay algún tipo de problema de hardware.

Solución:
– Prueba con un cable USB más corto de mayor calidad.
– Utiliza otro puerto USB de tu computadora o un concentrador USB con una fuente de alimentación externa.
– Alimenta el ESP32-CAM con 5V para solucionar el problema.

4. Error: Sketch too big error – Wrong partition scheme selected

Si obtienes este error, significa que no has seleccionado el esquema de particionado correcto. Asegúrate de seleccionar el esquema de particionado correcto en tu Arduino IDE.

5. Error: Board at COMX is not available – COM Port Not Selected

Si obtienes este error, significa que no has seleccionado el puerto COM en el menú de herramientas. Asegúrate de seleccionar el puerto COM al que está conectado el ESP32 en el menú de herramientas.

Continúa siguiendo los pasos detallados en la guía para solucionar este error.

6. Error: Psram error: GPIO isr service is not installed

Si estás utilizando una placa sin PSRAM y obtienes este error, añade las correcciones necesarias en el código para evitar problemas de memoria.

7. Error: Weak Wi-Fi Signal

Conecta el ESP32-CAM con una fuente de alimentación de 5V para mejorar la señal Wi-Fi.

8. Error: No IP Address in Arduino IDE Serial Monitor

Asegúrate de haber ingresado las credenciales de red correctas y seleccionado la velocidad de baudios adecuada en el monitor serial de Arduino IDE.

9. Error: Can’t open web server

Si el ESP32-CAM imprime la dirección IP en tu monitor serial de Arduino IDE pero no puedes abrir el servidor web en tu navegador, puede ser que estés intentando acceder al servidor web con múltiples pestañas del navegador.

Continúa siguiendo los pasos detallados en la guía para solucionar este error.

10. Error: The image lags/shows lots of latency

Para reducir la latencia, prueba alimentar el ESP32-CAM con una fuente de alimentación de 5V, reducir el tamaño de fotograma en el código o utilizar una antena externa.

11. Error: esp_camera_fb_get(): Failed to get the frame on time!

Sigue las instrucciones proporcionadas por otro lector para solucionar este error.

Uso de tamaños de tarjeta microSD más grandes

Según la hoja de datos, el ESP32-CAM solo soporta tarjetas microSD de 4GB. Sin embargo, hemos probado con una tarjeta de 16GB y funciona bien.

Compatibilidad con la placa M5Stack

Sí, la placa ESP32 M5Stack es compatible con nuestros proyectos. Asegúrate de verificar el pinout de tu cámara para garantizar que tienes la asignación correcta en el código.

Cómo fijar la dirección IP estática

Puedes seguir el tutorial proporcionado en el enlace para establecer una dirección IP estática en tu ESP32-CAM.

Cómo configurar el ESP32-CAM como Punto de Acceso (AP)

Puedes usar el código proporcionado para configurar tu ESP32-CAM como un Punto de Acceso y acceder directamente a él sin necesidad de conectarte a tu router.

Conclusión

Esperamos que esta guía te haya sido útil y hayas podido hacer que tu ESP32-CAM funcione con nuestros proyectos.

Si tienes algún otro problema o sugerencia sobre cómo solucionarlo, por favor deja un comentario a continuación.

Además, si te ha gustado este proyecto, también te pueden interesar otros proyectos con el ESP32-CAM que hemos publicado. ¡Gracias por leer!

Para más información detallada y códigos de ejemplo, consulta la fuente de inspiración de este artículo Random Nerd Tutorials.

Deja un comentario