#include <WiFi.h>
String ledStates[4] = {"off", "off", "off", "off"};
const int ledPins[4] = {12, 14, 27, 26}; // Pines para los LEDs
const int potPin = 34; // Pin para el potenciómetro
int DISTANCIA = 0;
int pinEco = 18; // Pin ECHO del sensor ultrasónico
int pinGatillo = 5; // Pin TRIG del sensor ultrasónico
// Configuración de usuario y contraseña
const char *ssid = "samab";
const char *password = "12345678";
WiFiServer server(80); // Crea un servidor con acceso por el puerto 80
// Función para leer la distancia usando el sensor ultrasónico
long readUltrasonicDistance(int triggerPin, int echoPin) {
pinMode(triggerPin, OUTPUT);
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
pinMode(echoPin, INPUT);
return pulseIn(echoPin, HIGH);
}
void setup() {
Serial.begin(115200);
// Configuración de pines de LEDs como salida
for (int i = 0; i < 4; i++) {
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], LOW); // Asegura que los LEDs comiencen apagados
}
Serial.println("Configurando el Access Point...");
WiFi.softAP(ssid, password);
IPAddress IP = WiFi.softAPIP();
Serial.print("La dirección IP es: ");
Serial.println(IP);
server.begin(); // Inicia el servidor
Serial.println("Servidor iniciado");
}
void loop() {
// Calculamos la distancia en cm
DISTANCIA = 0.01723 * readUltrasonicDistance(pinGatillo, pinEco);
// Mostramos la distancia en el monitor serial
Serial.print("Distancia: ");
Serial.print(DISTANCIA);
Serial.println(" cm");
// Si la distancia es menor a 20 cm, hacemos que todos los LEDs parpadeen
if (DISTANCIA < 20) {
for (int i = 0; i < 4; i++) {
digitalWrite(ledPins[i], HIGH); // Enciende todos los LEDs
}
delay(200);
for (int i = 0; i < 4; i++) {
digitalWrite(ledPins[i], LOW); // Apaga todos los LEDs
}
delay(200);
} else { // Si la distancia es mayor o igual a 20 cm, apagamos todos los LEDs
for (int i = 0; i < 4; i++) {
digitalWrite(ledPins[i], LOW);
}
}
// Manejo de servidor web para controlar LEDs
WiFiClient client = server.available(); // Recibe las conexiones de clientes
if (client) {
Serial.println("Nuevo cliente.");
String currentLine = "";
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
if (c == '\n') {
if (currentLine.length() == 0) {
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE html><html>");
client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
client.println("<link rel=\"icon\" href=\"data:,\">");
client.println("<style>html{font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
client.println(".button {border: none;color: white;padding: 15px 32px; text-align: center;");
client.println("text-decoration: none;display: inline-block;font-size: 16px; margin: 4px 2px;cursor: pointer;}");
client.println(".button1 {background-color: #4CAF50;} /* Green */");
client.println(".button2 {background-color: #008CBA;} /* Blue */");
client.println(".button3 {background-color: #f44336;} /* Red */");
client.println(".button4 {background-color: #FF9800;} /* Orange */");
client.println(".button5 {background-color: #9C27B0;} /* Purple */");
client.println("</style></head>");
client.print("<body><h1>Web Server con ESP32</h1>");
for (int i = 0; i < 4; i++) {
if (ledStates[i] == "off") {
client.println("<button type='button' class='button button" + String(i + 1) + "' onClick=location.href='/LED" + String(i) + "=ON'> ENCENDER LED " + String(i + 1) + "</button><br><br>");
} else {
client.println("<button type='button' class='button button" + String(i + 1) + "' onClick=location.href='/LED" + String(i) + "=OFF'> APAGAR LED " + String(i + 1) + "</button><br><br>");
}
}
if (ledStates[0] == "off" && ledStates[1] == "off" && ledStates[2] == "off" && ledStates[3] == "off") {
client.println("<button type='button' class='button button5' onClick=location.href='/ALL=ON'> ENCENDER TODOS </button><br><br>");
} else {
client.println("<button type='button' class='button button5' onClick=location.href='/ALL=OFF'> APAGAR TODOS </button><br><br>");
}
int potValue = analogRead(potPin);
float voltage = (potValue / 4095.0) * 3.3;
client.printf("<h2 id='voltage'>Voltaje del potenciometro: %.2f V</h2>", voltage);
client.printf("<h2>Distancia medida: %d cm</h2>", DISTANCIA);
client.println("<script>setInterval(function(){fetch('/voltage').then(response => response.text()).then(data => document.getElementById('voltage').innerHTML = data);}, 1000);</script>");
client.println("</body></html>");
client.println();
break;
} else {
currentLine = "";
}
} else if (c != '\r') {
currentLine += c;
}
// Revisando datos recibidos para controlar LEDs
for (int i = 0; i < 4; i++) {
if (currentLine.indexOf("GET /LED" + String(i) + "=ON") != -1) {
digitalWrite(ledPins[i], HIGH);
ledStates[i] = "on";
}
if (currentLine.indexOf("GET /LED" + String(i) + "=OFF") != -1) {
digitalWrite(ledPins[i], LOW);
ledStates[i] = "off";
}
}
if (currentLine.indexOf("GET /ALL=ON") != -1) {
for (int i = 0; i < 4; i++) {
digitalWrite(ledPins[i], HIGH);
ledStates[i] = "on";
}
}
if (currentLine.indexOf("GET /ALL=OFF") != -1) {
for (int i = 0; i < 4; i++) {
digitalWrite(ledPins[i], LOW);
ledStates[i] = "off";
}
}
if (currentLine.indexOf("GET /voltage") != -1) {
int potValue = analogRead(potPin);
float voltage = (potValue / 4095.0) * 3.3;
client.printf("Voltaje del potenciometro: %.2f V", voltage);
break;
}
}
}
client.stop();
Serial.println("Cliente Desconectado");
}
}