Módulo: Standard

Características

Con este módulo puedes desde aprender a capturar imágenes hasta grabar vídeo. Integra una cámara con un sensor OV5640 con una resolución de 5MP.

Conexión con el kode dot

Esquema de conexión

La cámara está conectada al ESP32-S3 de la siguiente manera:
CámaraESP32-S3
nRESETGPIO44
SCLGPIO47
SDAGPIO48
PCLKGPIO13
HREFGPIO43
VSYNCGPIO42
D2GPIO12
D3GPIO11
D4GPIO1
D5GPIO2
D6GPIO3
D7GPIO39
D8GPIO40
D9GPIO41

Ejemplo de código

Para probar la cámara vamos a usar el ejemplo que incorpora Espressif en Arduino IDE. Puedes abrirlo en File > Examples > ESP32 > Camera > CameraWebServer. Este ejemplo te permite configurar la cámara y ver en tiempo real lo que está capturando a través de una página web. Cambia todo el código del CameraWebServer.ino por el siguiente y cambia las credenciales de la red WiFi por las tuyas:
CameraWebServer.ino
/**
 * Ejemplo de servidor de cámara web con ESP32-S3 + módulo de cámara.
 * Configura la cámara, se conecta a la red WiFi y sirve un stream MJPEG.
 * URL de acceso: http://<IP_local> tras la conexión.
 */
/* ───────── KODE | docs.kode.diy ───────── */

#include "esp_camera.h"
#include <WiFi.h>

/* ===========================
   Credenciales WiFi
   =========================== */
const char *ssid = "**********";       /* Nombre de la red WiFi */
const char *password = "**********";   /* Contraseña de la red WiFi */

/* Declaración de funciones externas (implementadas en otros archivos) */
void startCameraServer();
void setupLedFlash();

void setup() {
  Serial.begin(115200);
  Serial.setDebugOutput(true);
  Serial.println();

  /* ─── Configuración de pines y parámetros de la cámara ─── */
  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer   = LEDC_TIMER_0;
  config.pin_d0       = 12;
  config.pin_d1       = 11;
  config.pin_d2       = 1;
  config.pin_d3       = 2;
  config.pin_d4       = 3;
  config.pin_d5       = 39;
  config.pin_d6       = 40;
  config.pin_d7       = 41;
  config.pin_xclk     = -1;
  config.pin_pclk     = 13;
  config.pin_vsync    = 42;
  config.pin_href     = 43;
  config.pin_sccb_sda = 48;
  config.pin_sccb_scl = 47;
  config.pin_pwdn     = -1;
  config.pin_reset    = 44;
  config.xclk_freq_hz = 20000000;   /* Frecuencia XCLK */
  config.frame_size   = FRAMESIZE_UXGA;    /* Resolución inicial */
  config.pixel_format = PIXFORMAT_JPEG;    /* Formato para streaming */
  //config.pixel_format = PIXFORMAT_RGB565; // Opción para detección facial
  config.grab_mode    = CAMERA_GRAB_WHEN_EMPTY;
  config.fb_location  = CAMERA_FB_IN_PSRAM;
  config.jpeg_quality = 12;   /* Calidad JPEG (menor número = mejor calidad) */
  config.fb_count     = 1;

  /* Ajustar configuración si hay PSRAM disponible */
  if (config.pixel_format == PIXFORMAT_JPEG) {
    if (psramFound()) {
      config.jpeg_quality = 10;
      config.fb_count     = 2;
      config.grab_mode    = CAMERA_GRAB_LATEST;
    } else {
      /* Si no hay PSRAM, reducir resolución para no agotar RAM */
      config.frame_size   = FRAMESIZE_SVGA;
      config.fb_location  = CAMERA_FB_IN_DRAM;
    }
  } else {
    /* Ajuste para detección/ reconocimiento facial */
    config.frame_size = FRAMESIZE_240X240;
#if CONFIG_IDF_TARGET_ESP32S3
    config.fb_count   = 2;
#endif
  }

#if defined(CAMERA_MODEL_ESP_EYE)
  pinMode(13, INPUT_PULLUP);
  pinMode(14, INPUT_PULLUP);
#endif

  /* ─── Inicialización de la cámara ─── */
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Error al iniciar la cámara: 0x%x", err);
    return;
  }

  /* Obtener acceso al sensor para ajustes adicionales */
  sensor_t *s = esp_camera_sensor_get();

  /* Reducir tamaño de frame para aumentar la velocidad inicial */
  if (config.pixel_format == PIXFORMAT_JPEG) {
    s->set_framesize(s, FRAMESIZE_QVGA);
  }
  
  /* Voltear imagen verticalmente */
  s->set_vflip(s, 1);

  /* ─── Conexión WiFi ─── */
  WiFi.begin(ssid, password);
  WiFi.setSleep(false); /* Evitar suspensión de WiFi */

  Serial.print("Conectando a WiFi");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWiFi conectado");

  /* ─── Iniciar servidor de cámara ─── */
  startCameraServer();

  Serial.print("Cámara lista. Accede a: http://");
  Serial.println(WiFi.localIP());
}

void loop() {
  /* El servidor web gestiona el streaming; bucle vacío */
  delay(10000);
}

Descarga de ejemplos

Puedes probar los códigos de ejemplo mediante el IDE de Arduino o el IDE de ESP-IDF o descargar los códigos en nuestro drive: Ejemplos de código del módulo Camera