#include <WiFi.h>
#include <HTTPClient.h>
// Pines del ESP32
const int pinBotonTimbre = 12; // Botón 1 para timbre
const int pinBotonCerradura = 13; // Botón 2 para abrir cerradura (controlado por relé)
const int pinRele = 14; // Relé conectado a la cerradura
// Credenciales WiFi
const char* ssid = "WiFi-3.0";
const char* password = "";
// Dirección del servidor que maneja las notificaciones (App Inventor)
const char* serverUrl = "http://<IP_APP_INVENTOR>/notificacion_timbre";
// Estado del botón
int estadoBotonTimbre = 0;
int estadoBotonCerradura = 0;
void setup() {
// Configuración de los pines
pinMode(pinBotonTimbre, INPUT_PULLUP);
pinMode(pinBotonCerradura, INPUT_PULLUP);
pinMode(pinRele, OUTPUT);
// Conexión WiFi
Serial.begin(115200);
conectarWiFi();
}
void conectarWiFi() {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Conectando a WiFi...");
}
Serial.println("Conectado a WiFi");
}
void enviarNotificacion() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin(serverUrl);
http.addHeader("Content-Type", "application/json");
String jsonPayload = "{\"mensaje\": \"Timbre tocado\", \"evento\": \"timbre\"}";
int httpResponseCode = http.POST(jsonPayload);
if (httpResponseCode > 0) {
Serial.println("Notificación enviada");
} else {
Serial.println("Error al enviar notificación");
}
http.end();
}
}
void loop() {
estadoBotonTimbre = digitalRead(pinBotonTimbre);
estadoBotonCerradura = digitalRead(pinBotonCerradura);
if (estadoBotonTimbre == LOW) { // Botón timbre presionado
Serial.println("Timbre activado");
enviarNotificacion();
delay(1000);
}
if (estadoBotonCerradura == LOW) { // Botón para abrir cerradura
Serial.println("Abriendo cerradura");
digitalWrite(pinRele, HIGH); // Activa el relé
delay(5000); // Mantiene la cerradura abierta durante 5 segundos
digitalWrite(pinRele, LOW); // Cierra la cerradura
}
delay(100);
}