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.