# Guía de uso de ESP32-CAM

## Objetivo

Configurar una **ESP32-CAM (sensor GC2145)** para tomar fotos y controlarla desde una **UI web** (resolución, calidad JPEG, AWB, flash y captura), dejando todo listo en **Windows 10/11** con **Arduino IDE**.

### Aclaración

Guía elaborada en **2025**. Incluye enlaces a páginas **oficiales** para drivers y el soporte de **ESP32** en Arduino IDE. Revísalos por si hay versiones más nuevas.


---

## ¿Qué placa/driver USB tengo?

Muchas placas usan **CH340/CH341** (WCH) y otras usan **CP2102/CP210x** (Silicon Labs).

Cómo reconocerlo:

* Mira el chip junto al conector USB: si dice **CH340/CH341** o **CP2102/CP210x**, ese es tu driver.
* En **Administrador de dispositivos → Puertos (COM y LPT)** verás algo como:

```plain
USB-SERIAL CH340 (COMx)        // si es WCH (CH34x)
CP210x USB to UART Bridge (COMx)  // si es Silicon Labs (CP210x)
```


---

## Instalar el driver USB en Windows

### Opción A) CH340/CH341 (WCH)


1. Descarga el instalador **oficial** (CH341SER.EXE) desde WCH. [wch-ic.com](https://www.wch-ic.com/downloads/ch341ser_exe.html?utm_source=chatgpt.com)
2. Ejecuta el instalador (permite Windows 11/10/8/7).
3. Reconecta el adaptador USB–TTL y verifica que aparece un puerto **COM**. [Guia Driver CH340](https://afel.notion.site/Gu-a-de-Instalaci-n-del-Driver-CH340-21f955fd42148065b06dd0f866bdc16d)

### Opción B) CP210x (Silicon Labs)


1. Descarga el **CP210x USB to UART Bridge VCP Driver** desde Silicon Labs. [silabs.com](https://www.silabs.com/software-and-tools/usb-to-uart-bridge-vcp-drivers?utm_source=chatgpt.com)
2. Instala la versión para Windows (x64 en la mayoría de PCs).
3. Reconecta y comprueba el **COM** en el Administrador de dispositivos. [Guia Driver CP2102](https://afel.notion.site/Gu-a-de-Instalaci-n-del-Driver-CP2102-para-Placas-o-M-dulos-ESP32-239955fd4214801c96d4cebdd96b28c5)


---

## Instalar Arduino IDE + soporte ESP32


1. Instala **Arduino IDE** (1.8.x o 2.x).
2. Abre **Archivo → Preferencias** y en **URL adicionales de gestor de tarjetas** pega:

```plain
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
```


1. Ve a **Herramientas → Placa → Gestor de tarjetas**, busca **esp32 by Espressif Systems** e **instala**.
2. Selecciona la placa **AI Thinker ESP32-CAM** (o **ESP32 Wrover Module**) y, si existe la opción, activa **PSRAM: Enabled**.


---

## Cargar el sketch de la UI web

* Abre el Arduino IDE y **pega el sketch completo**. [Descargar código](https://drive.google.com/file/d/17MseRqxqZEjZCSHbnifPFEYV8f9jW4e9/view?usp=sharing)
* (Opcional) Ajusta credenciales por defecto:

```c++
String WIFI_SSID = "TU_SSID";
String WIFI_PASS = "TU_PASSWORD";
```


---

## Conexión física (programación vs ejecución)

* **Conectar al computador con cable micro usb**
* **Para CARGAR el código debes mantener presionado el botón Flash, luego sin soltarlo debes presionar por un segundo el botón Reset. Sueltas Reset y después Flash.**
* \*\*Por último le das click a Cagar \*\*


---

## Librerías necesarias

No necesitas instalar librerías extra: el **core ESP32** trae **WiFi**, **WebServer**, **FS/SPIFFS** y **esp_camera** (incluye `img_converters.h`). Con eso compila el sketch de la UI web.


---

## Primera prueba (Serial + Web)


1. Abre el **Monitor Serie** a **115200** (8-N-1).
2. Conéctate al Wi-Fi:

```plain
wifi "Nombre de tu red" "TuClave"
ip
status
```


1. Inicia servidor:

```plain
view   // o: server on
```


1. Abre la URL que aparece (p. ej. `http://192.168.1.152/`). Verás la **imagen**, los controles (**res**, **Q**, **AWB**, **Flash**) y el botón **Tomar foto**.

> La página usa no-cache + warm-up + seq para mostrar siempre la última foto (evita ver la “penúltima”).


---

## Controles desde la UI

* **Resolución**: desplegable (qqvga…uxga).
* **Calidad (Q)**: deslizador (10 = mejor calidad, archivo más grande).
* **AWB**: ON/OFF.
* **Flash**: ON/OFF o **AUTO** (se enciende durante la captura).
* **Tomar foto**: botón que llama a `/api/snap` y actualiza la imagen con `?seq=...`.


---

## Comandos por Serial (atajos)

| Comando | Qué hace | Ejemplo |
|---------|----------|---------|
| `ayuda` | `help`   | `lista` |
| `wifi [ssid pass]` | Conecta al Wi-Fi. Si no pasas argumentos, usa los del sketch. **Usa comillas** si hay espacios. | `wifi "Internet" "123456789"` |
| `ip`    | Muestra SSID, IP y RSSI. | `ip`    |
| `status` | Estado completo: FS, CAM, WiFi, HTTP, RES, Q, AWB, FLASH, FLASH_AUTO, SSID, FOTO, SEQ. | `status` |
| `scan`  | Escanea redes Wi-Fi cercanas (SSID, RSSI, canal). | `scan`  |
| `view`  | `server on` | Enciende el servidor HTTP y muestra la URL. |
| `server off` | Apaga el servidor HTTP. | `server off` |
| `snap`  | Toma foto y guarda `/latest.jpg` (usa flash si `flash auto` está ON). | `snap`  |
| `res`   | Resolucion de la foto | `res vga` |
| `q <10..63>` | Ajusta la calidad JPEG (más bajo = mejor calidad / archivo más grande). | `q 12`  |
| `awb`   | Activa/desactiva Auto White Balance (colores). | `awb on` |
| `flash` | Enciende/apaga el LED flash (GPIO 4). | `flash on` |
| `flash auto` | Activa/desactiva flash automático durante la captura. | `flash auto on` |


---

## Solución de problemas

* **“waiting for download”** al reiniciar: estás en modo bootloader (IO0 a GND). Quita el puente IO0–GND y pulsa **RESET** para ejecutar.
* **No conecta al Wi-Fi**: usa red **2.4 GHz**, seguridad **WPA2-Personal (AES)**, revisa la potencia (acércate al router) y valida la clave.
* **Errores al cambiar resolución** (*frame buffer malloc failed*): falta PSRAM. El sketch **reintenta** con menos buffers y **revierte** a la resolución anterior si no alcanza.
* **Foto no se actualiza**: usa el botón **Tomar foto** o **Actualizar imagen** de la UI; internamente se fuerza `?seq` y cabeceras **no-cache**.
* **Reinicios/brownout**: usa **5 V ≥ 1 A** al pin 5V y cables cortos. [Random Nerd Tutorials](https://randomnerdtutorials.com/esp32-cam-ai-thinker-pinout/?utm_source=chatgpt.com)


---