---
# System prepended metadata

title: Projeto LED

---

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.