#include WiFiClient wifiClient; static bool wifiConnected = false; static TaskTimer wifiTimer{0, 500}; void setColor(uint8_t r, uint8_t g, uint8_t b) { ledcWrite(0, r); ledcWrite(1, g); ledcWrite(2, b); } void setupLED() { ledcSetup(0, 5000, 8); ledcAttachPin(PIN_R, 0); ledcSetup(1, 5000, 8); ledcAttachPin(PIN_G, 1); ledcSetup(2, 5000, 8); ledcAttachPin(PIN_B, 2); } void hueCycle(uint8_t pos) { uint8_t r = (uint8_t)(sin((pos + 0) * 0.024) * 127 + 128); uint8_t g = (uint8_t)(sin((pos + 85) * 0.024) * 127 + 128); uint8_t b = (uint8_t)(sin((pos + 170) * 0.024) * 127 + 128); setColor(r, g, b); } void WiFi_Init() { setupLED(); WiFi.mode(WIFI_STA); WiFi.begin(SSID, WIFI_PASSWORD); #ifdef DEBUG Serial.print("🟡 Intentando conectar a WiFi: "); Serial.println(SSID); #endif } bool WiFi_IsConnected() { return wifiConnected; } void WiFi_Handle() { static uint8_t hue = 0; uint32_t now = millis(); if (!wifiConnected) { hueCycle(hue++); } if (WiFi.status() == WL_CONNECTED) { if (!wifiConnected) { #ifdef DEBUG Serial.println("🟢 Conectado a la red WiFi"); Serial.print("IP: "); Serial.println(WiFi.localIP()); #endif setColor(0, 255, 0); wifiConnected = true; } return; } if (now - wifiRetryTimer.lastRun >= wifiRetryTimer.interval) { #ifdef DEBUG Serial.println("🔁 Reintentando conexión WiFi..."); #endif WiFi.disconnect(true); WiFi.begin(SSID, WIFI_PASSWORD); wifiRetryTimer.lastRun = now; } }