15 de julio de 2026 · 10 min

Alarma casera con ESP32 y sensor PIR: aviso al celular en segundos

Un sensor de movimiento, un ESP32 y un bot de Telegram: cuando algo se mueve en tu casa, garaje o local, te llega el mensaje al toque. Sin abonos, sin nube paga, sin instalador.

esp32pirseguridadtelegramproyectos

Las alarmas comerciales con monitoreo cuestan un abono todos los meses. Este proyecto no reemplaza una alarma profesional para un comercio con mercadería valiosa — pero para el garaje, el quincho, la casilla del fondo o saber si alguien entró a tu pieza, funciona igual de bien y cuesta lo que cuestan dos componentes: cuando el sensor PIR detecta movimiento, el ESP32 te manda un mensaje de Telegram al celular. Estés donde estés.

Lista de compra

ComponenteCantidadPara qué
ESP32 DevKit1WiFi + cerebro
Sensor PIR HC-SR5011Detecta movimiento hasta ~7 m
Buzzer activo 5V1Sirena local (opcional)
Fuente 5V 2A1Alimentación permanente
Cables dupont1 juegoConexionado

Preparar el bot de Telegram (5 minutos, gratis)

  1. En Telegram, buscá @BotFather, mandale /newbot y seguí los pasos. Te da un token (guardalo).
  2. Buscá @userinfobot y mandale cualquier cosa: te responde tu chat ID (un número).
  3. Abrile chat a tu bot nuevo y mandale un “hola” (si no, no puede escribirte primero).

Con token + chat ID, el ESP32 ya puede hablarte.

Conexionado

El código

Instalá UniversalTelegramBot y ArduinoJson desde el gestor de librerías.

#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>

const char* WIFI_SSID = "TU_RED";
const char* WIFI_PASS = "TU_CLAVE";
const char* BOT_TOKEN = "123456:ABC-TU-TOKEN";
const char* CHAT_ID   = "TU_CHAT_ID";

const int PIN_PIR = 27;
const int PIN_BUZZER = 26;
const unsigned long ENFRIAMIENTO_MS = 30000;  // 1 aviso cada 30 s max

WiFiClientSecure cliente;
UniversalTelegramBot bot(BOT_TOKEN, cliente);

bool armada = true;
unsigned long ultimoAviso = 0;
unsigned long ultimoChequeo = 0;

void setup() {
  pinMode(PIN_PIR, INPUT);
  pinMode(PIN_BUZZER, OUTPUT);
  digitalWrite(PIN_BUZZER, LOW);
  WiFi.begin(WIFI_SSID, WIFI_PASS);
  while (WiFi.status() != WL_CONNECTED) delay(300);
  cliente.setInsecure();  // TLS sin validar certificado (suficiente aca)
  bot.sendMessage(CHAT_ID, "Alarma en linea y armada.", "");
  delay(60000);  // el PIR necesita ~1 min para estabilizarse
}

void loop() {
  // 1) deteccion
  if (armada && digitalRead(PIN_PIR) == HIGH &&
      millis() - ultimoAviso > ENFRIAMIENTO_MS) {
    ultimoAviso = millis();
    bot.sendMessage(CHAT_ID, "MOVIMIENTO detectado!", "");
    digitalWrite(PIN_BUZZER, HIGH);
    delay(3000);
    digitalWrite(PIN_BUZZER, LOW);
  }

  // 2) comandos: /armar /desarmar /estado (cada 2 s)
  if (millis() - ultimoChequeo > 2000) {
    ultimoChequeo = millis();
    int n = bot.getUpdates(bot.last_message_received + 1);
    for (int i = 0; i < n; i++) {
      if (bot.messages[i].chat_id != String(CHAT_ID)) continue;  // solo vos
      String txt = bot.messages[i].text;
      if (txt == "/armar")    { armada = true;  bot.sendMessage(CHAT_ID, "Armada.", ""); }
      if (txt == "/desarmar") { armada = false; bot.sendMessage(CHAT_ID, "Desarmada.", ""); }
      if (txt == "/estado")   { bot.sendMessage(CHAT_ID, armada ? "Armada." : "Desarmada.", ""); }
    }
  }
}

La manejás desde el mismo chat: /desarmar cuando llegás a casa, /armar cuando te vas, /estado para verificar.

Errores comunes

  1. Lluvia de falsos positivos el primer minuto. El HC-SR501 necesita ~60 segundos de estabilización al energizar. Nuestro código los espera; no lo saques.
  2. Falsos positivos permanentes: el PIR apuntando a una ventana con sol, una estufa o el paso de aire caliente dispara detecciones. Reubicalo mirando hacia el interior, lejos de fuentes de calor.
  3. Sensibilidad al máximo. Con Sx al tope detecta al gato del vecino a través del vidrio. Ajustalo con la puerta cerrada probando desde donde te importa detectar.
  4. El bot no responde: casi siempre es que nunca le mandaste el primer mensaje al bot (paso 3 de la preparación), o que el chat ID está mal.

Para llevarlo más lejos

Todo en un pedido

ESP32, PIR, buzzer y fuente: todo en electronicabyp.com.ar con envío a todo el país. ¿Local comercial con varias zonas? Consultanos por WhatsApp y lo dimensionamos.


¿Necesitás los componentes de esta guía? Los encontrás en electronicabyp.com.ar — hacemos envíos a toda Argentina. Para cotizaciones por cantidad, escribinos por WhatsApp.