#include <WiFi.h>
#include <HTTPClient.h>
// --- Pines del ESP32 ---
const int trigPin = 4; // TRIG del HC-SR04
const int echoPin = 18; // ECHO del HC-SR04
const int buzzerPin = 19; // BZ1 del buzzer activo
long duration;
int distance;
// --- Configuración WiFi (Wokwi) ---
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// --- API ---
const char* apiurl = "https://arrangement-insulation-goat-luke.trycloudflare.com/api/iot";
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzerPin, OUTPUT);
Serial.begin(115200); // Para ver la distancia y el envío en la consola
// Conectar al WiFi
Serial.println("Conectando a WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\n✅ Conectado al WiFi!");
}
void loop() {
// --- Medir distancia ---
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
Serial.print("Distancia: ");
Serial.print(distance);
Serial.println(" cm");
// --- Activar buzzer si distancia < 20 cm ---
if (distance > 0 && distance < 20) {
digitalWrite(buzzerPin, HIGH); // Enciende buzzer
} else {
digitalWrite(buzzerPin, LOW); // Apaga buzzer
}
// --- Preparar JSON dinámico ---
bool buzzerStatus = digitalRead(buzzerPin);
String jsonData = "{";
jsonData += "\"device_name\":\"ESP32 Entrada\",";
jsonData += "\"location\":\"Puerta Principal\",";
jsonData += "\"distance_cm\":" + String(distance) + ",";
jsonData += "\"buzzer_status\":" + String(buzzerStatus ? "true" : "false") + ",";
jsonData += "\"status\":\"online\"";
jsonData += "}";
// --- Enviar datos a la API ---
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin(apiurl);
http.addHeader("Content-Type", "application/json");
int httpResponseCode = http.POST(jsonData);
if (httpResponseCode > 0) {
Serial.print("HTTP Response: ");
Serial.println(httpResponseCode);
String response = http.getString();
Serial.println("Server Response: " + response);
} else {
Serial.print("Error en POST: ");
Serial.println(httpResponseCode);
}
http.end();
} else {
Serial.println("⚠️ WiFi desconectado!");
}
delay(1000); // Espera 1 segundo antes de la siguiente medición
}