#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
const char* ssid = "******";
const char* password = "*******";
#define BOTtoken "*********" // Tu Bot Token (Obtener de Botfather)
#define CHAT_ID "*******"
unsigned long channelID = ********;
const char * writeAPIKey = "*********";
UniversalTelegramBot bot(BOTtoken, client);
const int motionSensor = 27;
bool motionDetected = false;
// Indica cuando se detecta movimiento
void IRAM_ATTR detectsMovement() {
void handleNewMessages(int numNewMessages) {
for (int i=0; i<numNewMessages; i++) {
String chat_id = String(bot.messages[i].chat_id);
bot.sendMessage(chat_id, "Usuario No Autorizado", "");
String text = bot.messages[i].text;
if (text == "/alarma_on") {
bot.sendMessage(chat_id, "Alarma activada", "");
digitalWrite(buzPin, HIGH);
if (text == "/alarma_off") {
bot.sendMessage(chat_id, "Alarma desactivada", "");
digitalWrite(buzPin, LOW);
// PIR Motion Sensor mode INPUT_PULLUP
pinMode(motionSensor, INPUT_PULLUP);
// Set motionSensor pin as interrupt, assign interrupt function and set RISING mode
attachInterrupt(digitalPinToInterrupt(motionSensor), detectsMovement, RISING);
Serial.print("Connecting Wifi: ");
WiFi.begin(ssid, password);
client.setCACert(TELEGRAM_CERTIFICATE_ROOT); // Add root certificate for api.telegram.org
while (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
Serial.println("Inicializando ThingSpeak...");
ThingSpeak.begin(client);
Serial.println("ThingSpeak inicializado correctamente");
bot.sendMessage(CHAT_ID, "Bot iniciado", "");
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
handleNewMessages(numNewMessages);
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
bot.sendMessage(CHAT_ID, "Movimiento detectado!!", "");
int writeResult = ThingSpeak.writeField(channelID, 1,1, writeAPIKey);
if (writeResult == 200) {
Serial.println("Datos enviados correctamente a ThingSpeak");
Serial.print("Error al enviar datos a ThingSpeak. Código de error: ");
Serial.println(writeResult);