Aqui está um exemplo básico de **WebServer no NodeMCU ESP32-S** para controlar uma fita de LEDs ARGB (como WS2812B) usando o pino **GPIO4** (pino padrão para dados em muitas placas). Este código permite controlar a cor dos LEDs via navegador. --- ### **Conexões (NodeMCU ESP32-S + Fita ARGB)** | Fita ARGB | NodeMCU ESP32-S | |-----------|-----------------| | **VCC (5V)** | Fonte externa (5V) | | **GND** | GND (ESP32 e fonte) | | **Din (Data)** | **GPIO4** (Pino D4) | > ⚠️ **Importante:** > - Use uma **fonte externa 5V** para a fita (não alimente muitos LEDs pelo USB do ESP32). > - Conecte o **GND da fonte ao GND do ESP32** para referência comum. --- ### **Código (WebServer Básico)** ```cpp #include <WiFi.h> #include <FastLED.h> // Configuração dos LEDs #define NUM_LEDS 30 // Número de LEDs na fita #define DATA_PIN 4 // Pino GPIO4 (D4 no NodeMCU-32S) CRGB leds[NUM_LEDS]; // Configuração Wi-Fi const char* ssid = "SUA_REDE_WIFI"; const char* password = "SENHA_WIFI"; WiFiServer server(80); // Servidor na porta 80 void setup() { Serial.begin(115200); // Inicializa a fita de LEDs FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS); FastLED.setBrightness(50); // Brilho inicial (0-255) fill_solid(leds, NUM_LEDS, CRGB::Black); // Apaga todos os LEDs FastLED.show(); // Conecta ao Wi-Fi WiFi.begin(ssid, password); Serial.println("Conectando ao Wi-Fi..."); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\nConectado! IP: " + WiFi.localIP().toString()); server.begin(); // Inicia o servidor } void loop() { WiFiClient client = server.available(); if (client) { Serial.println("Novo cliente conectado!"); String request = client.readStringUntil('\r'); Serial.println("Request: " + request); client.flush(); // Verifica se a requisição contém "/color?r=XX&g=XX&b=XX" if (request.indexOf("/color") != -1) { int r = 0, g = 0, b = 0; // Extrai os valores de R, G e B da URL if (request.indexOf("r=") != -1) { r = request.substring(request.indexOf("r=") + 2).toInt(); r = constrain(r, 0, 255); } if (request.indexOf("g=") != -1) { g = request.substring(request.indexOf("g=") + 2).toInt(); g = constrain(g, 0, 255); } if (request.indexOf("b=") != -1) { b = request.substring(request.indexOf("b=") + 2).toInt(); b = constrain(b, 0, 255); } // Aplica a cor aos LEDs fill_solid(leds, NUM_LEDS, CRGB(r, g, b)); FastLED.show(); Serial.printf("Cor alterada: R=%d, G=%d, B=%d\n", r, g, b); } // Resposta HTTP (página HTML simples) client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); client.println("<html><body>"); client.println("<h1>Controle de LEDs ARGB</h1>"); client.println("<p>Use a URL: <code>/color?r=XX&g=XX&b=XX</code></p>"); client.println("<p>Exemplo: <a href=\"/color?r=255&g=0&b=0\">Vermelho</a></p>"); client.println("</body></html>"); client.stop(); Serial.println("Cliente desconectado."); } } ``` --- ### **Como Usar?** 1. **Carregue o código** no NodeMCU ESP32-S (via Arduino IDE com suporte ao ESP32). 2. **Acesse o IP** do ESP32 no navegador (ex: `192.168.1.100` – veja no Monitor Serial). 3. **Controle as cores** com URLs como: - `http://[IP]/color?r=255&g=0&b=0` (Vermelho) - `http://[IP]/color?r=0&g=255&b=0` (Verde) - `http://[IP]/color?r=0&g=0&b=255` (Azul) --- ### **Melhorias Possíveis** - **Controle por slider** (HTML + JavaScript). - **Salvar cores preferidas** (usando EEPROM). - **Adicionar efeitos** (piscar, gradiente, etc.). Se precisar de algo mais avançado (como **controle por MQTT ou Home Assistant**), posso adaptar o código! 😊 **Dica:** Para evitar flickering em fitas longas, use um **capacitor de 1000µF** na alimentação e um **resistor de 220Ω** no pino de dados.