#include <Arduino.h>
#include <WiFi.h>
#include <WebServer.h>
#include <ESPmDNS.h>
const char *ssid = "QUEEN";
const char *password = "12345678";
WebServer server(80);
#define TRIG_PIN 23
#define ECHO_PIN 22
#define LED1_PIN 25
#define LED2_PIN 26
#define LED3_PIN 27
#define BUZZER_PIN 32
volatile int distance = 0;
unsigned long lastMeasurementTime = 0;
TaskHandle_t SensorTaskHandle;
void measureDistanceTask(void *parameter) {
while (true) {
// Trigger the ultrasonic sensor
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Read pulse duration
long duration = pulseIn(ECHO_PIN, HIGH);
distance = duration * 0.0344 / 2;
// Control LEDs
digitalWrite(LED1_PIN, distance <= 5);
digitalWrite(LED2_PIN, distance <= 10);
digitalWrite(LED3_PIN, distance <= 15);
// Control buzzer
digitalWrite(BUZZER_PIN, distance <= 20);
// Task delay to reduce CPU usage
vTaskDelay(100 / portTICK_PERIOD_MS);
}
}
void sendDistanceData() {
String jsonResponse = "{\"distance\": " + String(distance) + "}";
server.send(200, "application/json", jsonResponse);
}
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
if (MDNS.begin("esp32")) {
Serial.println("MDNS responder started");
}
// Set up server routes
server.on("/", sendDistanceData);
server.onNotFound([]() {
server.send(404, "text/plain", "404: Not Found");
});
server.begin();
Serial.println("HTTP server started");
// Initialize pins
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LED1_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
pinMode(LED3_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
// Start sensor task on Core 1
xTaskCreatePinnedToCore(
measureDistanceTask, // Task function
"SensorTask", // Name of the task
2048, // Stack size
NULL, // Parameter
1, // Priority
&SensorTaskHandle, // Task handle
1 // Core 1
);
}
void loop() {
server.handleClient();
}