Páginas
sábado, 7 de febrero de 2026
domingo, 18 de enero de 2026
control y monitoreo por mensajeria de telegram curso iot con esp32 No16
codigo bien explicado
/*************************************************
* ESP32 - CONTROL DE LED Y PULSADOR CON TELEGRAM
* Código educativo y fácil de explicar
* Repositorio de la librería Telegram usada:
* https://github.com/witnessmenow/Universal-Arduino-Telegram-Bot
* https://t.me/botfather
* Bot para obtener tu Chat ID:
* https://t.me/myidbot → escribe /getid
* Repositorio de ArduinoJson:
* https://github.com/bblanchon
*************************************************/
// ---------- LIBRERÍAS ----------
// Librería para manejar la conexión WiFi del ESP32
#include <WiFi.h>
// Librería para manejar conexiones seguras HTTPS (necesaria para Telegram)
#include <WiFiClientSecure.h>
// Librería para interactuar con bots de Telegram
#include <UniversalTelegramBot.h>
// ---------- WIFI ----------
// Nombre de la red WiFi a la que se conectará el ESP32
const char* ssid = "NOMBRE_DE_TU_WIFI";
// Contraseña de la red WiFi
const char* password = "CONTRASEÑA_DE_TU_WIFI";
// ---------- TELEGRAM ----------
// Token del bot de Telegram (entregado por BotFather)
#define BOT_TOKEN "AQUI_TU_TOKEN"
// ID del chat autorizado para controlar el ESP32
#define CHAT_ID "AQUI_TU_CHAT_ID"
// Cliente seguro para comunicación HTTPS
WiFiClientSecure client;
// Objeto bot que manejará la comunicación con Telegram
UniversalTelegramBot bot(BOT_TOKEN, client);
// ---------- PINES ----------
// Pin donde está conectado el LED (GPIO 2)
const int ledPin = 2;
// Pin donde está conectado el pulsador (GPIO 4)
const int buttonPin = 4;
// ---------- VARIABLES ----------
// Guarda el estado anterior del botón (HIGH = no presionado)
bool estadoBotonAnterior = HIGH;
// Variable para controlar el tiempo entre lecturas de Telegram
unsigned long lastTime = 0;
// Intervalo de tiempo para revisar mensajes (1000 ms = 1 segundo)
const unsigned long intervalo = 1000;
// ---------- FUNCIÓN SETUP ----------
void setup() {
// Inicializa la comunicación serial para depuración
Serial.begin(115200);
// Configura el pin del LED como salida
pinMode(ledPin, OUTPUT);
// Configura el pin del pulsador como entrada con resistencia pull-up interna
pinMode(buttonPin, INPUT_PULLUP);
// Asegura que el LED inicie apagado
digitalWrite(ledPin, LOW);
// Mensaje en el monitor serial indicando inicio de conexión WiFi
Serial.print("Conectando a WiFi");
// Inicia la conexión WiFi con SSID y contraseña
WiFi.begin(ssid, password);
// Espera hasta que el ESP32 se conecte al WiFi
while (WiFi.status() != WL_CONNECTED) {
delay(500); // Espera 500 ms
Serial.print("."); // Muestra puntos mientras conecta
}
// Indica que la conexión WiFi fue exitosa
Serial.println("\n WiFi conectado");
// Muestra la IP asignada al ESP32
Serial.println(WiFi.localIP());
// Desactiva la verificación del certificado HTTPS (simplifica el uso de Telegram)
client.setInsecure();
// Envía un mensaje inicial al chat de Telegram indicando que el ESP32 está listo
bot.sendMessage(
CHAT_ID,
"🤖 ESP32 listo\n"
"Comandos:\n"
"/on Encender LED\n"
"/off Apagar LED",
""
);
}
// ---------- FUNCIÓN LOOP ----------
void loop() {
// ---------- REVISAR MENSAJES DE TELEGRAM ----------
// Verifica si ya pasó el intervalo de tiempo definido
if (millis() - lastTime > intervalo) {
// Obtiene los nuevos mensajes desde el último recibido
int numMensajes = bot.getUpdates(bot.last_message_received + 1);
// Mientras existan mensajes pendientes
while (numMensajes) {
// Procesa los mensajes recibidos
manejarMensajes(numMensajes);
// Vuelve a verificar si llegaron más mensajes
numMensajes = bot.getUpdates(bot.last_message_received + 1);
}
// Actualiza el tiempo de la última revisión
lastTime = millis();
}
// ---------- REVISAR PULSADOR ----------
// Lee el estado actual del pulsador
bool estadoBotonActual = digitalRead(buttonPin);
// Detecta la transición de NO presionado (HIGH) a presionado (LOW)
if (estadoBotonAnterior == HIGH && estadoBotonActual == LOW) {
// Envía un mensaje a Telegram indicando que el botón fue presionado
bot.sendMessage(CHAT_ID, "🔘 Pulsador presionado", "");
// Retardo simple para evitar rebotes del pulsador
delay(300);
}
// Guarda el estado actual del botón para la próxima lectura
estadoBotonAnterior = estadoBotonActual;
}
// ---------- FUNCIÓN PARA MANEJAR MENSAJES DE TELEGRAM ----------
void manejarMensajes(int numMensajes) {
// Recorre todos los mensajes recibidos
for (int i = 0; i < numMensajes; i++) {
// Obtiene el ID del chat que envió el mensaje
String chat_id = bot.messages[i].chat_id;
// Obtiene el texto del mensaje recibido
String texto = bot.messages[i].text;
// ---------- SEGURIDAD BÁSICA ----------
// Si el mensaje no proviene del chat autorizado
if (chat_id != CHAT_ID) {
// Envía mensaje de acceso denegado
bot.sendMessage(chat_id, "⛔ Acceso no autorizado", "");
// Salta al siguiente mensaje
continue;
}
// ---------- COMANDO /on ----------
// Si el usuario escribe "/on"
if (texto == "/on") {
// Enciende el LED
digitalWrite(ledPin, HIGH);
// Envía confirmación por Telegram
bot.sendMessage(chat_id, "💡 LED ENCENDIDO", "");
}
// ---------- COMANDO /off ----------
// Si el usuario escribe "/off"
if (texto == "/off") {
// Apaga el LED
digitalWrite(ledPin, LOW);
// Envía confirmación por Telegram
bot.sendMessage(chat_id, "🌑 LED APAGADO", "");
}
}
}
domingo, 21 de diciembre de 2025
sábado, 13 de diciembre de 2025
sábado, 15 de noviembre de 2025
domingo, 9 de noviembre de 2025
domingo, 2 de noviembre de 2025
domingo, 26 de octubre de 2025
domingo, 12 de octubre de 2025
sábado, 4 de octubre de 2025
domingo, 28 de septiembre de 2025
domingo, 21 de septiembre de 2025
domingo, 14 de septiembre de 2025
sábado, 13 de septiembre de 2025
jueves, 11 de septiembre de 2025
domingo, 7 de septiembre de 2025
domingo, 31 de agosto de 2025
Suscribirse a:
Comentarios (Atom)
