ESP32 Alarma para Puertas | Enviar Alertas a WhatsApp con CallMeBot (Proyecto IoT)
📖 Resumen & Explicación del Proyecto
🛠️ Componentes & Materiales Requeridos
- ✓Placa ESP32
- ✓Sensor magnético para puertas/ventanas (Reed Switch)
- ✓Resistencia Pull-Up de 10kΩ
- ✓Protoboard y cables de conexión
- ✓Cuenta activa de WhatsApp y clave API CallMeBot
⚡ Conexión de Pines (Pinout)
| Pin Microcontrolador | Pin Dispositivo / Sensor | Función / Descripción |
|---|---|---|
GPIO 4 | Contacto Magnético | Lectura de estado de puerta (Normalmente Abierto/Cerrado) |
3V3 | Extremo Resistencia | Pull-up para estabilizar la línea lógica |
GND | Retorno Sensor | Referencia a tierra al cerrar contacto |
🔍 Esquema de alarma con sensor magnético y envío de notificación HTTP GET a la API de CallMeBot en WhatsApp.
💻 Códigos Fuente del Proyecto
Verificados en LaboratorioCopia y pega directamente los scripts en tu entorno de desarrollo (Arduino IDE, PlatformIO o editor de código):
Código 1: Firmware ESP32 de Detección y Envío a WhatsApp (C++)
#include <WiFi.h>
#include <HTTPClient.h>
#include <UrlEncode.h> // Para formatear el mensaje con espacios
const char* ssid = "TU_WIFI";
const char* password = "TU_PASSWORD";
// Credenciales de CallMeBot WhatsApp
String phoneNumber = "+57XXXXXXXXXX"; // Tu número internacional
String apiKey = "1234567"; // Clave obtenida del bot
#define PIN_SENSOR 4
bool estadoAnterior = HIGH;
void setup() {
Serial.begin(115200);
pinMode(PIN_SENSOR, INPUT_PULLUP);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi conectado. Sistema de alarma activo!");
}
void loop() {
bool estadoActual = digitalRead(PIN_SENSOR);
// Si la puerta se abre (transición de LOW a HIGH)
if (estadoActual == HIGH && estadoAnterior == LOW) {
Serial.println("¡Alerta! Puerta abierta detectada.");
enviarMensajeWhatsApp("⚠️ *ALERTA TORELEC:* Se ha abierto la puerta principal.");
delay(5000); // Retardo antirrebote y límite de ráfaga
}
estadoAnterior = estadoActual;
delay(100);
}
void enviarMensajeWhatsApp(String mensaje) {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String url = "https://api.callmebot.com/whatsapp.php?phone=" + phoneNumber +
"&text=" + urlEncode(mensaje) +
"&apikey=" + apiKey;
http.begin(url);
int httpCode = http.GET();
if (httpCode > 0) {
Serial.printf("Mensaje enviado con éxito. Código: %d\n", httpCode);
} else {
Serial.printf("Error al enviar mensaje: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
}
}
Código 2: URL Webhook y Prueba de API en Navegador o cURL
# Prueba rápida de envío de WhatsApp desde terminal usando cURL
curl "https://api.callmebot.com/whatsapp.php?phone=+573001234567&text=Prueba+de+alarma+ESP32+Torelec&apikey=TU_APIKEY"
# Respuesta esperada del servidor CallMeBot:
# HTTP/1.1 200 OK
# Content-Type: text/html
# <b>Success</b>: Message queued for delivery.
🚀 Puesta en Marcha Paso a Paso
-
1
Registrar tu número en CallMeBot enviando un mensaje a su número de WhatsApp oficial para recibir tu clave personal API Key.
-
2
Conectar el interruptor magnético (reed switch) al GPIO 4 con resistencia Pull-Up o usando INPUT_PULLUP.
-
3
Instalar la librería 'UrlEncode' en Arduino IDE para codificar caracteres especiales y espacios en la URL.
-
4
Cargar el sketch en el ESP32 y verificar la conexión a través del Monitor Serie a 115200 baudios.
-
5
Probar separando el imán del sensor para comprobar la recepción instantánea de la alarma en WhatsApp.