📘 Este artículo forma parte de nuestra serie de proyectos con ESP32. Si quieres ver más proyectos, consulta Proyecto IoT con ESP32 y previsión meteorológica, Monitorización ambiental con ESP32 y BME680 y DHT11 en ESP32 en tu navegador web.
Introducción
El ESP32-Wrover CAM (Freenove o similar) es una de las placas más versátiles para proyectos de videovigilancia DIY, streaming de vídeo y visión por computador de bajo coste. Con una cámara OV2640 integrada, WiFi y un ESP32-Wrover con PSRAM, es capaz de transmitir vídeo en tiempo real por HTTP, tomar fotos y hasta ejecutar detección de caras.
Precio: ~15-25 €.
Consumo: ~150 mA en streaming.
Alcance: depende del router (10-30 m típicos).
Usos típicos:
- Vigilancia doméstica de bajo coste.
- Monitorización de mascotas, bebés o plantas.
- Timelapse de proyectos largos.
- Puerta de entrada inteligente (con detección de movimiento).
- Proyectos de robótica con visión.
- Automatización con IA (detección de objetos con Edge Impulse).
En esta guía vas a aprender:
- Qué es el ESP32-Wrover CAM y sus especificaciones.
- Requisitos de hardware y software.
- Instalación paso a paso del firmware CameraWebServer.
- Configuración del código (SSID, modelo de cámara, resolución).
- Uso del servidor web (streaming, fotos, ajustes).
- Seguridad para exponerlo sin riesgos.
- Ampliaciones (RTSP, MQTT, grabación, IA).
- Solución de problemas comunes.
- FAQ con las preguntas más frecuentes.
Si buscas más proyectos con ESP32, consulta Conectar pantalla LCD I2C a ESP32, Módulo ultrasónico y servo en ESP32 y Acceder a tu servidor ESP32 desde WordPress.
Índice de contenidos
- ¿Qué es el ESP32-Wrover CAM?
- Requisitos
- Instalación paso a paso
- Configuración del código
- Uso del servidor web
- Seguridad: cómo exponerlo sin riesgos
- Ampliaciones
- Solución de problemas
- FAQ
- Conclusión
1. ¿Qué es el ESP32-Wrover CAM?
ESP32-Wrover CAM es una placa de desarrollo que combina:
- ESP32-Wrover: microcontrolador dual-core a 240 MHz con WiFi y Bluetooth.
- PSRAM: 8 MB de memoria adicional (esencial para buffers de imagen).
- Cámara OV2640: sensor de 2 MP, soporta hasta UXGA (1600×1200).
- Lector de tarjetas microSD: para almacenar fotos y vídeo.
- LED flash integrado.
- Puerto USB para programación y alimentación.
- Antena WiFi integrada.
Especificaciones técnicas:
| Componente | Detalle |
|---|---|
| MCU | ESP32-Wrover (dual-core Xtensa LX6, 240 MHz) |
| RAM | 520 KB SRAM + 8 MB PSRAM |
| Flash | 4 MB |
| Cámara | OV2640 (2 MP) |
| WiFi | 802.11 b/g/n (2.4 GHz) |
| Bluetooth | BT 4.2 + BLE |
| Alimentación | 5 V USB (o 3.3 V regulado) |
| Consumo | ~150 mA en streaming |
| GPIOs disponibles | Limitados (usados por la cámara) |
Diferencias con otras placas:
- ESP32-CAM (AI-Thinker): más barata (~8 €), pero sin USB y sin PSRAM.
- ESP32-Wrover CAM (Freenove): más cómoda (USB, PSRAM, SD), más cara.
- ESP32-S3 CAM: más moderna, con USB nativo, más rápida.
Recomendación: el ESP32-Wrover CAM de Freenove es la opción más cómoda para empezar.
2. Requisitos
2.1 Hardware
- ESP32-Wrover CAM (Freenove o compatible).
- Cable USB con datos (¡no solo carga!).
- Router WiFi en 2.4 GHz.
- Ordenador con Arduino IDE.
- Tarjeta microSD (opcional, para grabación).
2.2 Software
- Arduino IDE (versión 2.x recomendada).
- Soporte para ESP32 en Arduino IDE.
- Drivers USB (CP210x o CH340 según la placa).
2.3 Instalación de Arduino IDE y soporte ESP32
- Descarga Arduino IDE: https://www.arduino.cc/en/software
- Instala los drivers USB:
- Configura el soporte ESP32:
- Archivo → Preferencias → URLs adicionales:
- Herramientas → Placa → Gestor de tarjetas → Buscar «esp32» → Instalar.
2.4 Selección de placa
- Herramientas → Placa → ESP32 Arduino → ESP32 Wrover Module.
3. Instalación paso a paso

Vaya a Archivo > Ejemplos > ESP32 > Cámara y abra el ejemplo CameraWebServer.

Asegúrese de seleccionar la placa correcta en el código (elimine // en CAMERA_MODEL_WROVER_KIT y asegúrese de que todas las demás selecciones de placas tengan //), como se muestra a continuación:

Luego, desplácese un poco hacia abajo en el código e inserte sus credenciales de red en las variables ssid y password para que la placa pueda conectarse a su red.

Después de seleccionar e insertar sus credenciales de red, puede cargar el código en el modulo.
3.1 Abrir el ejemplo CameraWebServer
- Archivo → Ejemplos → ESP32 → Camera → CameraWebServer.
- Se abrirá el sketch con el código del servidor web.
3.2 Seleccionar el modelo de cámara
Busca la sección de definiciones al inicio del código:
//#define CAMERA_MODEL_WROVER_KIT // Has PSRAM
//#define CAMERA_MODEL_ESP_EYE // Has PSRAM
//#define CAMERA_MODEL_ESP32S3_EYE
//#define CAMERA_MODEL_M5STACK_PSRAM // Has PSRAM
//#define CAMERA_MODEL_AI_THINKER // Has PSRAMDescomenta CAMERA_MODEL_WROVER_KIT:
#define CAMERA_MODEL_WROVER_KIT // Has PSRAM⚠️ Asegúrate de que las demás están comentadas (// al inicio).
3.3 Configurar credenciales WiFi
Busca:
const char* ssid = "**********";
const char* password = "**********";Reemplaza por tus credenciales:
const char* ssid = "MiWiFi";
const char* password = "MiPasswordSegura";⚠️ Importante:
- El WiFi debe ser 2.4 GHz (el ESP32 no soporta 5 GHz).
- El nombre de red (SSID) distingue mayúsculas y minúsculas.
- Evita redes con autenticación empresarial (WPA2-Enterprise).
3.4 Configurar Arduino IDE para cargar
- Conecta la placa por USB.
- Herramientas → Puerto → Selecciona el COM correcto.
- Herramientas → Placa: ESP32 Wrover Module.
- Herramientas → Partition Scheme → Huge APP (3MB No OTA/1MB SPIFFS).
- Herramientas → PSRAM → Enabled (¡crítico!).
3.5 Cargar el código
- Pulsa Subir (→).
- Espera a que compile y cargue (~1 min).
- Deberías ver:
Connecting........_____....._
WiFi connected
Starting web server on port: '80'
Camera Ready! Use 'http://192.168.1.166' to connect3.6 Ver la IP en el monitor serie
- Herramientas → Monitor Serie → 115200 baudios.
- Pulsa el botón RST de la placa.
- Verás la IP asignada.
Anota esa IP (ejemplo: 192.168.1.166).
4. Configuración del código
4.1 Estructura del código
El sketch tiene varias secciones clave:
// 1. Definiciones de cámara
#define CAMERA_MODEL_WROVER_KIT
// 2. Credenciales WiFi
const char* ssid = "MiWiFi";
const char* password = "MiPassword";
// 3. Configuración del servidor
WebServer server(80);
// 4. Handlers de rutas
server.on("/", HTTP_GET, []() { ... });
server.on("/stream", HTTP_GET, stream_handler);
server.on("/capture", HTTP_GET, capture_handler);
// 5. Setup
void setup() {
Serial.begin(115200);
camera_config_t config;
// ...
esp_camera_init(&config);
WiFi.begin(ssid, password);
server.begin();
}
// 6. Loop
void loop() {
server.handleClient();
}4.2 Personalizar resolución
En el array config.frame_size = FRAMESIZE_UXGA; (antes de esp_camera_init).
Opciones:
| Constante | Resolución | Uso |
|---|---|---|
FRAMESIZE_QVGA | 320×240 | Streaming rápido |
FRAMESIZE_CIF | 400×296 | Detección de caras |
FRAMESIZE_VGA | 640×480 | Balance |
FRAMESIZE_SVGA | 800×600 | Buena calidad |
FRAMESIZE_HD | 1280×720 | Alta calidad |
FRAMESIZE_UXGA | 1600×1200 | Máxima calidad |
Recomendación:
- Streaming rápido: QVGA o VGA.
- Fotos de alta calidad: UXGA.
- Detección de caras: CIF (por CPU limitada).
4.3 Ajustar calidad JPEG
config.jpeg_quality = 12; // 0-63 (menor = mejor calidad)- 10-15: alta calidad, archivos grandes.
- 20-30: calidad media, buen balance.
- 40-63: calidad baja, archivos pequeños.
4.4 Control de brillo, contraste, saturación
Puedes ajustar la imagen desde el servidor web (menú «Control»). Pero también se puede hacer por código:
sensor_t *s = esp_camera_sensor_get();
s->set_brightness(s, 1); // -2 a 2
s->set_contrast(s, 1); // -2 a 2
s->set_saturation(s, 0); // -2 a 25. Uso del servidor web

Luego, debe seleccionar un modelo de placa en el menú Herramientas.

Seleccione las siguientes configuraciones:

Abra un navegador en su red local y escriba la dirección IP ESP32. En mi caso: ‘http://192.168.1.166’
Debería tener acceso a una página donde puede iniciar la transmisión de video y obtener fotografías de la cámara.
Presione el botón Iniciar transmisión para iniciar la transmisión de video o el botón Obtener quieto para tomar fotografías.

Ejemplo de CameraWebServer Botones de control ESP32-CAM
También hay varios menús con los que puedes jugar para ajustar la configuración de la cámara.

5.1 Acceder al servidor
- Conecta tu ordenador a la misma red WiFi que el ESP32.
- Abre un navegador.
- Escribe la IP del ESP32:
http://192.168.1.166.
Deberías ver la interfaz web de CameraWebServer.
5.2 Interfaz web
Elementos principales:
- Botón «Start Stream»: inicia el streaming de vídeo.
- Botón «Get Still»: captura una foto.
- Menú desplegable «Resolution»: cambia la resolución en vivo.
- Control «Quality»: ajusta la calidad JPEG.
- Controles de imagen: brillo, contraste, saturación.
- Face Detection: activa detección de caras (solo CIF o menor).
- Face Recognition: (actualmente no soportado en ESP32-Wrover).
5.3 Streaming
Al pulsar «Start Stream», verás el vídeo en el navegador.
Rendimiento real:
- QVGA: ~15-20 fps.
- VGA: ~10-15 fps.
- UXGA: ~2-5 fps.
Si el vídeo va lento:
- Reduce la resolución.
- Acerca el ESP32 al router.
- Usa un router WiFi 5 o 6.
- Considera ESP32-S3 (más potente).
5.4 Captura de fotos
Pulsa «Get Still» para guardar una imagen.
Se descarga en formato JPEG directamente al navegador.
5.5 Ajustes en vivo
Desde el menú «Control» puedes ajustar:
- Brillo, contraste, saturación.
- White balance, exposición.
- Rotación, flip horizontal/vertical.
Útil para: adaptar la cámara a diferentes condiciones de luz.
6. Seguridad: cómo exponerlo sin riesgos
⚠️ IMPORTANTE: el ejemplo por defecto no tiene autenticación. Si lo expones a internet, cualquiera puede ver tu cámara.
6.1 NO exponerlo directamente a internet
Nunca abras puertos del router apuntando al ESP32 sin protección.
Riesgos:
- Cualquiera puede ver tu cámara.
- Escaneos automáticos de bots.
- Vectores de ataque a tu red.
6.2 Añadir autenticación básica
Modifica el código para pedir usuario y contraseña:
server.on("/", HTTP_GET, []() {
if (!server.authenticate("admin", "tu_password_seguro")) {
return server.requestAuthentication();
}
// ... resto del código
});Añade la autenticación a todas las rutas.
6.3 Usar VPN para acceso remoto
Opción recomendada:
- Montar una VPN en tu red (WireGuard, Tailscale).
- Conectar a la VPN desde fuera.
- Acceder al ESP32 por su IP local.
Así no expones el ESP32 a internet, solo la VPN.
Consulta Cómo montar tu propio servidor de VPN y Zero Trust.
6.4 Aislar el ESP32 en una VLAN
Segmenta tu red:
- VLAN 1: ordenadores y móviles.
- VLAN 2: ESP32 y otros IoT.
- VLAN 3: invitados.
Si el ESP32 se compromete, no accede a la red principal.
Consulta Cómo instalar y configurar pfSense y Guía Completa de Redes.
6.5 Cloudflare Tunnel
Alternativa moderna:
- Instala Cloudflare Tunnel en un servidor.
- Expón el ESP32 a través del túnel.
- Añade autenticación con Cloudflare Access.
Consulta Beneficios del uso de CDN.
6.6 HTTPS
El ESP32 puede servir HTTPS, pero es lento y consume recursos. Solo si es imprescindible.
Alternativa: usa un reverse proxy (Nginx) que añada HTTPS.
7. Ampliaciones
7.1 Streaming RTSP
El ejemplo por defecto usa MJPEG sobre HTTP. Puedes migrar a RTSP para:
- Integración con VLC, FFmpeg, Home Assistant.
- Mayor compatibilidad.
- Menor consumo en algunos casos.
Proyecto recomendado: Micro-RTSP.
7.2 MQTT
Enviar eventos (movimiento, captura) a un broker MQTT:
#include <PubSubClient.h>
WiFiClient espClient;
PubSubClient client(espClient);
client.publish("camera/motion", "detected");Útil para: integración con Home Assistant, Node-RED.
7.3 Grabación en tarjeta SD
El ESP32-Wrover CAM tiene lector de microSD:
// Guardar foto en SD
fs::FS &fs = SD_MMC;
File file = fs.open("/photo.jpg", FILE_WRITE);
file.write(fb->buf, fb->len);
file.close();Útil para: timelapse, grabación continua.
7.4 Detección de movimiento
Comparar frames en el ESP32:
if (frame_differ > threshold) {
// Movimiento detectado
// Enviar notificación, guardar foto, etc.
}Útil para: vigilancia, notificaciones push.
7.5 Detección de caras
El ejemplo incluye face detection (CIF o menor).
Uso:
- Activar desde la web.
- Dibuja rectángulos sobre las caras detectadas.
Limitaciones:
- Solo funciona a CIF o menor.
- Consume mucha CPU.
- No hay reconocimiento (solo detección).
7.6 IA en el edge
Con ESP32-S3 o Edge Impulse, puedes ejecutar modelos ligeros:
- Detección de objetos (personas, coches).
- Reconocimiento de gestos.
- Clasificación de imágenes.
Consulta Machine Learning y Ciberseguridad.
7.7 Integración con Home Assistant
# configuration.yaml
camera:
- platform: mjpeg
name: ESP32 CAM
mjpeg_url: http://192.168.1.166:81/streamÚtil para: domótica, automatizaciones.
Consulta La IA en el hogar.
8. Solución de problemas
8.1 «No se conecta a WiFi»
Causas:
- SSID mal escrito.
- Contraseña incorrecta.
- Red en 5 GHz (ESP32 solo 2.4 GHz).
- WPA2-Enterprise (no soportado).
Solución:
- Verifica credenciales.
- Prueba con un móvil en modo hotspot 2.4 GHz.
- Revisa el monitor serie para ver errores.
8.2 «No se ve la IP en el monitor serie»
Causas:
- Baudrate incorrecto.
- Puerto COM mal seleccionado.
Solución:
- Herramientas → Monitor Serie → 115200 baudios.
- Pulsa RST tras abrir el monitor.
- Cambia el cable USB (algunos solo cargan).
8.3 «La cámara no inicializa»
Causas:
- Modelo de cámara incorrecto.
- PSRAM deshabilitada.
- Alimentación insuficiente.
Solución:
- Verifica
#define CAMERA_MODEL_WROVER_KIT. - Herramientas → PSRAM → Enabled.
- Usa una fuente de 5V 1A mínimo.
8.4 «El streaming va muy lento»
Causas:
- Resolución demasiado alta.
- WiFi débil.
- Múltiples clientes conectados.
Solución:
- Reduce a QVGA o CIF.
- Acerca el ESP32 al router.
- Cierra otras pestañas.
- Considera ESP32-S3.
8.5 «La imagen sale girada»
Solución:
- Ajusta en el menú «Control» de la web.
- O por código:
s->set_vflip(s, 1); // Voltear vertical
s->set_hmirror(s, 1); // Espejo horizontal8.6 «Se reinicia constantemente»
Causas:
- Alimentación insuficiente.
- PSRAM con problemas.
- Código con errores.
Solución:
- Alimenta con fuente externa de 5V 2A.
- Verifica PSRAM.
- Reduce resolución/fps.
8.7 «No arranca la cámara tras horas»
Causas:
- Sobrecalentamiento.
- Fuga de memoria.
- WiFi desconectado.
Solución:
- Añade disipador.
- Reinicia el ESP32 periódicamente con watchdog.
- Reconecta WiFi automáticamente.
Consulta Cómo detectar dispositivos espía en tu red si sospechas de actividad sospechosa.
9. FAQ
¿Cuánto cuesta montar un ESP32-Wrover CAM?
Precios aproximados:
- ESP32-Wrover CAM (Freenove): 20-25 €.
- ESP32-CAM (AI-Thinker): 8-12 €.
- ESP32-S3 CAM: 15-20 €.
- Cable USB: 3-5 €.
- Tarjeta microSD: 5-10 €.
Total mínimo: ~10 € (con ESP32-CAM).
Total recomendado: ~25 € (Wrover CAM + SD + USB).
¿Puedo usar el ESP32-CAM en lugar del Wrover?
Sí, pero con matices:
ESP32-CAM (AI-Thinker):
- Más barato.
- Sin USB (necesitas programador FTDI).
- Sin PSRAM.
- Menos cómodo.
ESP32-Wrover CAM (Freenove):
- Más caro.
- Con USB (plug and play).
- Con PSRAM.
- Más cómodo.
Recomendación: el Wrover si es tu primer proyecto; el AI-Thinker si ya tienes experiencia.
¿Cuál es el alcance máximo del WiFi?
Rango típico: 10-30 m en interior, 100 m en exterior (línea de visión).
Factores:
- Paredes y obstáculos.
- Interferencias (2.4 GHz saturado).
- Antena (la del ESP32 es pequeña).
Mejoras:
- Router WiFi 5/6.
- Antenas externas (modificación de hardware).
- Mesh WiFi.
Consulta Repetidor WiFi: qué tipos hay y cuál comprar.
¿Puedo grabar vídeo en la tarjeta SD?
Sí, pero con limitaciones:
- Formato: MJPEG (imágenes secuenciales).
- Tasa: limitada por la velocidad de la SD.
- Capacidad: depende de la tarjeta.
- Riesgo: corrupción si se corta la alimentación.
Recomendación: graba fotos periódicas en lugar de vídeo continuo.
¿Se puede usar para vigilancia real?
Sí, para vigilancia básica:
- Doméstica: mascotas, bebés, plantas.
- DIY: puerta de entrada, garaje.
No para vigilancia profesional:
- Resolución limitada (2 MP).
- No hay visión nocturna IR (a menos que añadas módulo).
- Fiabilidad media (puede colgarse).
Alternativas comerciales: cámaras IP de Xiaomi, TP-Link Tapo, Reolink.
¿Es legal grabar con una cámara en casa?
Depende del uso:
- Uso personal (tu casa): legal.
- Grabar a vecinos o espacios públicos: puedes violar el RGPD y leyes de privacidad.
- Empresas: regulación estricta.
- Videovigilancia: requiere carteles informativos y registro.
Consulta con un abogado antes de usar para vigilancia.
Consulta Privacidad de los datos en la era digital.
¿Se puede integrar con Home Assistant?
Sí. Ejemplo:
camera:
- platform: mjpeg
name: ESP32 CAM
mjpeg_url: http://192.168.1.166:81/streamTambién con:
- Node-RED.
- OpenHAB.
- Domoticz.
¿Qué resolución me recomiendas?
Depende del uso:
| Uso | Resolución |
|---|---|
| Streaming fluido | QVGA (320×240) |
| Videollamada | CIF (400×296) |
| General | VGA (640×480) |
| Fotos detalladas | SVGA (800×600) o HD (1280×720) |
| Máxima calidad | UXGA (1600×1200) |
Recomendación: empieza con VGA y ajusta según necesites.
¿Se puede alimentar con batería?
Sí, pero con matices:
- Consumo en streaming: ~150 mA.
- Batería de 2000 mAh: ~10 horas.
- Deep sleep: ~10 µA (meses).
Para streaming continuo: enchufe.
Para capturas periódicas: batería + deep sleep.
¿Se puede actualizar el firmware por OTA?
Sí, con la partición correcta:
Partition Scheme: Minimal SPIFFS (Large APP with OTA)Uso:
- ArduinoOTA.
- ElegantOTA (interfaz web).
Útil para: dispositivos en ubicaciones difíciles.
¿Puedo conectar una cámara mejor?
Limitado por el hardware:
- OV2640: la integrada (2 MP).
- OV5640: 5 MP, pero requiere más procesamiento.
- OV7670: sin FIFO no es compatible fácilmente.
Recomendación: quédate con la OV2640. Para más calidad, usa ESP32-S3 + cámara dedicada.
10. Conclusión
El ESP32-Wrover CAM es una plataforma increíble para proyectos de videovigilancia DIY, streaming y visión por computador a bajo coste. Con una buena configuración y las precauciones de seguridad adecuadas, puedes montar un sistema de monitorización funcional por menos de 30 €.
Puntos clave:
- Hardware: ESP32-Wrover CAM (Freenove) con USB y PSRAM.
- Software: Arduino IDE + ejemplo CameraWebServer.
- Configuración crítica: PSRAM habilitada, modelo WROVER_KIT, WiFi 2.4 GHz.
- Uso: interfaz web con streaming, fotos, ajustes en vivo.
- Seguridad: nunca exponer directamente a internet; usar VPN o Cloudflare Tunnel.
- Ampliaciones: RTSP, MQTT, SD, IA, Home Assistant.
- Rendimiento: limitado por CPU; usar QVGA para streaming fluido.
Si quieres seguir con proyectos ESP32, consulta:
Cómo montar tu propio servidor de VPN
Proyecto IoT con ESP32 y previsión meteorológica
Monitorización ambiental con ESP32 y BME680
DHT11 en ESP32 en tu navegador web
Conectar pantalla LCD I2C a ESP32
Módulo ultrasónico y servo en ESP32





