RESUMEN DEL PROYECTO:
🔧 1) webapp.c: Lógica del servidor y control del hardware
📦 Includes y definición de recursos embebidos
extern const char index_start[] asm("_binary_index_html_start");
extern const char index_end[] asm("_binary_index_html_end");
extern const char chroma_start[] asm("_binary_chroma_png_start");
extern const char chroma_end[] asm("_binary_chroma_png_end");
🌈 Control de color LED
int32_t led_r = 0, led_g = 0, led_b = 0;
-
Se almacenan los valores actuales de los colores RGB en variables globales.
-
Las salidas están conectadas a los pines 15 (Rojo), 13 (Verde), 12 (Azul).
📡 API /api
static esp_err_t api_get_handler(httpd_req_t *req)
-
Maneja peticiones GET como /api?r=255&g=100&b=80.
-
Extrae los valores de los parámetros r, g y b de la URL.
-
Usa PWM para cambiar el brillo de cada canal de color mediante ledc_set_duty() y ledc_update_duty().
🏠 API / y /chroma.png
🌍 web_server_init()
🚀 app_main()
-
Inicializa WiFi y obtiene la IP.
-
Configura el PWM (LEDC) en 3 canales para los colores RGB.
-
Arranca el servidor web.
🌐 2) index.html: Interfaz de usuario
🎨 Vista general
-
Muestra un canvas circular con la imagen chroma.png (rueda de color).
-
Muestra un visor redondo del color actual.
-
Usa JavaScript para leer el color donde el usuario toca y enviar los valores RGB al ESP32 por medio de /api.
🖌️ Comportamiento JS
-
Canvas: Al tocar en una posición, detecta el color del píxel con getImageData() y llama a fetchColor(r,g,b).
-
Preview: Al hacer clic, envía negro (0,0,0) para apagar la lámpara.
-
API call: fetchColor() construye dinámicamente la URL /api?r=..&g=..&b=.. y actualiza el preview visual con la respuesta del ESP32.
🛠️ 3) CMakeLists.txt
idf_component_register(SRCS "webapp.c"
INCLUDE_DIRS "."
EMBED_FILES index.html chroma.png)
-
Compila el archivo webapp.c.
-
Embebe index.html y chroma.png en el binario, accesibles en C mediante los símbolos definidos en webapp.c.