#include #include const char* ssid = "ITC-Alumnos"; const char* password = "ITC-neuquen"; #define TRIG 4 #define ECHO 5 #define LED 2 WebServer server(80); bool modoAutomatico = true; bool sensorActivo = true; bool ledEncendido = false; long distancia = 0; const int nivelEncenderBomba = 4; const int nivelApagarBomba = 14; // ---------------- MEDIR DISTANCIA ---------------- long medirDistancia() { digitalWrite(TRIG, LOW); delayMicroseconds(2); digitalWrite(TRIG, HIGH); delayMicroseconds(10); digitalWrite(TRIG, LOW); long dur = pulseIn(ECHO, HIGH, 30000); long d = dur * 0.034 / 2; return d > 0 ? d : distancia; } // ---------------- CONTROL AUTOMÁTICO ---------------- void controlarBomba() { if (modoAutomatico && sensorActivo) { if (distancia <= nivelEncenderBomba) { digitalWrite(LED, HIGH); ledEncendido = true; } else if (distancia >= nivelApagarBomba) { digitalWrite(LED, LOW); ledEncendido = false; } } } // ---------------- PAGINA WEB ---------------- String paginaWEB() { return R"=====( Monitor Tanque

Monitor de Nivel del Tanque

Modo: Automático
Bomba: Apagada
Sensor: Activo
)====="; } // ---------------- ENDPOINTS ---------------- void handleWeb() { server.send(200, "text/html", paginaWEB()); } void handleNivel() { if (sensorActivo) distancia = medirDistancia(); controlarBomba(); Serial.print("Distancia medida: "); Serial.print(distancia); Serial.println(" cm"); String json = "{"; json += "\"nivel\":" + String(distancia) + ","; json += "\"led\":" + String(ledEncendido ? "true" : "false"); json += "}"; server.send(200, "application/json", json); } void handleLedOn() { if(!modoAutomatico){ digitalWrite(LED, HIGH); ledEncendido = true; } server.send(200,"application/json","{\"led\":true}"); } void handleLedOff() { if(!modoAutomatico){ digitalWrite(LED, LOW); ledEncendido = false; } server.send(200,"application/json","{\"led\":false}"); } void handleModeAuto(){ modoAutomatico=true; server.send(200,"text/plain","OK"); } void handleModeManual(){ modoAutomatico=false; server.send(200,"text/plain","OK"); } void handleSensorOn(){ sensorActivo=true; server.send(200,"text/plain","OK"); } void handleSensorOff(){ sensorActivo=false; server.send(200,"text/plain","OK"); } // ---------------- SETUP ---------------- void setup() { Serial.begin(9600); pinMode(TRIG, OUTPUT); pinMode(ECHO, INPUT); pinMode(LED, OUTPUT); WiFi.begin(ssid, password); while(WiFi.status()!=WL_CONNECTED) delay(300); Serial.println("ESP32 listo en IP:"); Serial.println(WiFi.localIP()); server.on("/", handleWeb); server.on("/nivel", handleNivel); server.on("/led/on", handleLedOn); server.on("/led/off", handleLedOff); server.on("/mode/auto", handleModeAuto); server.on("/mode/manual", handleModeManual); server.on("/sensor/on", handleSensorOn); server.on("/sensor/off", handleSensorOff); server.begin(); } // ---------------- LOOP ---------------- void loop() { server.handleClient(); }