#include <WiFi.h>
#include <ESPAsyncWebServer.h>
const char* ssid = "NPITI-IoT"; //<----------Mude para o seu
const char* password = "NPITI-IoT"; //<----------Mude para o seu
AsyncWebServer server(80);
const int ledPin = 2;
bool piscar = false;
unsigned long ultimoTempo = 0;
bool estadoLed = false;
int intensidade = 128;
const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<title>Página com Botões e Slider</title>
<style>
body {
font-family: Arial, sans-serif;
text-align: center;
margin-top: 50px;
}
button {
margin: 10px;
padding: 10px 20px;
font-size: 16px;
}
input[type="range"] {
width: 300px;
margin-top: 20px;
}
.slider-value {
font-weight: bold;
margin-top: 10px;
}
</style>
</head>
<body>
<h1>Controles LED GPIO 2</h1>
<button onclick="acaoBotao(1)">Ligar LED</button>
<button onclick="acaoBotao(2)">Desligar LED</button>
<button onclick="acaoBotao(3)">Piscar LED</button>
<div>
<input type="range" id="slider" min="0" max="255" value="128" oninput="atualizarValor(this.value)">
<div class="slider-value">Intensidade: <span id="valorSlider">128</span></div>
</div>
<script>
function acaoBotao(num) {
fetch('/botao?num=' + num)
.then(response => response.text())
.then(data => alert(data));
}
function atualizarValor(val) {
document.getElementById('valorSlider').textContent = val;
fetch('/slider?value=' + val);
}
</script>
</body>
</html>
)rawliteral";
void setup() {
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
analogWrite(ledPin, 0); // Começa desligado
WiFi.begin(ssid, password);
Serial.print("Conectando ao WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Conectado! IP: ");
Serial.println(WiFi.localIP());
// Página principal
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, "text/html", index_html);
});
// Controle botões
server.on("/botao", HTTP_GET, [](AsyncWebServerRequest *request){
if (request->hasParam("num")) {
String num = request->getParam("num")->value();
if (num == "1") {
piscar = false;
analogWrite(ledPin, intensidade);
Serial.println("LED ligado");
request->send(200, "text/plain", "LED ligado");
} else if (num == "2") {
piscar = false;
analogWrite(ledPin, 0);
Serial.println("LED desligado");
request->send(200, "text/plain", "LED desligado");
} else if (num == "3") {
piscar = true;
Serial.println("LED piscando");
request->send(200, "text/plain", "LED piscando");
} else {
request->send(400, "text/plain", "Botão inválido");
}
} else {
request->send(400, "text/plain", "Parametro 'num' ausente");
}
});
// Controle slider
server.on("/slider", HTTP_GET, [](AsyncWebServerRequest *request){
if (request->hasParam("value")) {
String valStr = request->getParam("value")->value();
int val = valStr.toInt();
if (val < 0) val = 0;
if (val > 255) val = 255;
intensidade = val;
Serial.printf("Intensidade ajustada para %d\n", intensidade);
if (!piscar) {
analogWrite(ledPin, intensidade);
}
request->send(200, "text/plain", "Intensidade recebida: " + String(intensidade));
} else {
request->send(400, "text/plain", "Parametro 'value' ausente");
}
});
server.begin();
}
void loop() {
if (piscar) {
unsigned long agora = millis();
if (agora - ultimoTempo > 500) {
ultimoTempo = agora;
estadoLed = !estadoLed;
analogWrite(ledPin, estadoLed ? intensidade : 0);
}
}
}