¿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.
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:
- No se pudo conectar a ESP32: tiempo de espera de espera para el encabezado del paquete
- La inicialización de la cámara falló con el error 0x20001 o similar
- Detector de caída de tensión o error de meditación del gurú
- Error de boceto demasiado grande: se seleccionó un esquema de partición incorrecto
- La tarjeta en COMX no está disponible – Puerto COM no seleccionado
- Error de Psram: el servicio GPIO ISR no está instalado
- Señal WiFi débil
- No hay dirección IP en el monitor serie Arduino IDE
- No se puede abrir el servidor web
- La imagen está retrasada/muestra una latencia alta.
- esp_camera_fb_get(): ¡El fotograma no se pudo recuperar a tiempo!
1. No se pudo conectar a ESP32: tiempo de espera de espera para el encabezado del paquete
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:
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.
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.
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.
2. La inicialización de la cámara falló con el error 0x20001 o similar
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
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
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
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.
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.
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);
}
Para comprender mejor cómo funciona, puedes leer el siguiente tutorial:
- Punto de acceso (AP) ESP32 para servidores web
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.
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:
- Video Streaming, Detección Facial y Reconocimiento Facial
- ESP32 IP CAM – Video Streaming (Home Assistant y Node-RED)
- Tomar una foto y guardar en una tarjeta MicroSD
- Detector de Movimiento PIR con Captura de Foto
- 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:
- Conecta la placa ESP32-CAM a tu computadora utilizando un programador FTDI.
- 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:
- Asegúrate de que la cámara esté conectada de manera segura y en la posición correcta.
- 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.