#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>
// Dados do WiFi
#define WIFI_SSID "LabTI_34"
#define WIFI_PASSWORD "c1b3r$r3d3s"
// Telegram BOT Token (Botfather)
#define BOT_TOKEN "7061326486:AAGu4jrqbl-hfPOgl__ucaaJHXWfsDtjQpc"
// Use @myidbot (IDBot) para saber qual o seu ID
#define CHAT_ID "-1002493561972"
// Definir o pino do LED
#define LED_PIN 2
WiFiClientSecure secured_client;
UniversalTelegramBot bot(BOT_TOKEN, secured_client);
// Variável para armazenar a última verificação de mensagens
unsigned long lastTimeBotRan;
const int botDelay = 1000; // Checar mensagens a cada 1 segundo
// Função para enviar inline keyboard com os botões
void sendLedControlButtons(String chat_id) {
String keyboardJson = "[[{\"text\":\"Ligar LED\",\"callback_data\":\"ligar_led\"},{\"text\":\"Desligar LED\",\"callback_data\":\"desligar_led\"}]]";
bot.sendMessage(chat_id, "Escolha uma ação:", "", keyboardJson);
}
void handleNewMessages(int numNewMessages) {
Serial.print("Recebendo mensagens: ");
Serial.println(numNewMessages);
for (int i = 0; i < numNewMessages; i++) {
String chat_id = String(bot.messages[i].chat_id);
// Se for uma mensagem de texto normal, mostra os botões
if (bot.messages[i].type == "text") {
sendLedControlButtons(chat_id);
} else if (bot.messages[i].type == "callback_query") {
String callback_data = bot.messages[i].callback_query.data;
// Ação ao pressionar o botão "Ligar LED"
if (callback_data == "ligar_led") {
digitalWrite(LED_PIN, HIGH); // Liga o LED
bot.sendMessage(chat_id, "LED ligado!", "");
Serial.println("LED ligado com sucesso.");
}
// Ação ao pressionar o botão "Desligar LED"
else if (callback_data == "desligar_led") {
digitalWrite(LED_PIN, LOW); // Desliga o LED
bot.sendMessage(chat_id, "LED desligado!", "");
Serial.println("LED desligado com sucesso.");
}
}
}
}
void setup() {
Serial.begin(115200);
// Configuração do LED
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW); // Começa com o LED desligado
// Conexão com a rede WiFi
Serial.print("Connecting to WiFi SSID: ");
Serial.println(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
secured_client.setCACert(TELEGRAM_CERTIFICATE_ROOT); // Define o certificado do Telegram
// Aguarda conexão com a rede WiFi
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.print("\nWiFi connected. IP address: ");
Serial.println(WiFi.localIP());
// Sincroniza o tempo via NTP
configTime(0, 0, "pool.ntp.org"); // Obter UTC via NTP
time_t now = time(nullptr);
while (now < 24 * 3600) {
Serial.print(".");
delay(100);
now = time(nullptr);
}
Serial.println(now);
// Envia uma mensagem de boas-vindas com botões de controle
if (bot.sendMessage(CHAT_ID, "Bot iniciado! Use os botões para controlar o LED.", "")) {
sendLedControlButtons(CHAT_ID); // Mostra os botões após a mensagem de boas-vindas
Serial.println("Mensagem de boas-vindas enviada com sucesso!");
} else {
Serial.println("Falha ao enviar a mensagem de boas-vindas.");
}
lastTimeBotRan = millis();
}
void loop() {
// Verifica se há novas mensagens no bot a cada 1 segundo
if (millis() - lastTimeBotRan > botDelay) {
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
while (numNewMessages) {
handleNewMessages(numNewMessages);
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
}
lastTimeBotRan = millis();
}
}