builderall

Sistema de Alerta com a ESP32 + Telegram



Já pensou receber um alerta no seu celular caso a porta da sua casa for aberta e você não estiver lá? Neste post vou te ensinar a fazer isso com a ESP32.


Para esse projeto vamos precisar de:


A primeira coisa que precisamos fazer é configurar o Telegram.


Vamos pesquisar pela conversa BotFather, onde criaremos o nosso bot para nos avisar sobre o sensor.





Abrindo a conversa vamos precisar alguns comandos. O primeiro é /newbot. Depois vamos dar o nome da nossa conversa, onde receberemos os alertas. Aqui no meu caso eu criei "Sensor de Porta e Janela".


E após isso vamos criar o nome de usuário do nosso bot. Ele necessariamente precisa terminar em "bot". No meu caso eu criei "Sensor_de_Porta_EngEasier_bot". Assim que você mandar, ele irá gerar também o Token que devemos armazenar que iremos utilizar depois:


Outra coisa que vamos precisar no Telegram é saber qual o nosso ID, para conseguirmos configurar no nosso código da ESP32 para a mensagem ser enviada para nós. Para isso, procuramos o chat "IDBot" e mandamos: /getid:


Lembrando que o seu ID é único, então você precisa fazer o seu. O da imagem é o meu ID.


Por enquanto a configuração no Telegram está pronta. Agora na IDE do Arduino, onde iremos programar a ESP32 (caso você não saiba configurar a IDE do Arduino para a ESP32, clique aqui e assista ao nosso vídeo), temos que adicionar algumas bibliotecas, que são:



Só pesquisar por elas no Gerenciador de Bibliotecas e instalar direto por lá.


O código que usaremos é com base em um exemplo na biblioteca, que é o SendMessageFromEvent:



Porém fiz algumas alterações para funcionar o nosso projeto:

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

// Dados do WiFi
#define WIFI_SSID ""
#define WIFI_PASSWORD ""
// Telegram BOT Token (Botfather)
#define BOT_TOKEN ""

// Use @myidbot (IDBot) para saber qual o seu ID
#define CHAT_ID ""

WiFiClientSecure secured_client;
UniversalTelegramBot bot(BOT_TOKEN, secured_client);

#define Sensor 4
bool flag = 1;

void setup() {

  pinMode(Sensor, INPUT);

  Serial.begin(115200);
  Serial.println();


  //conexão da rede:
  Serial.print("Connecting to Wifi SSID ");
  Serial.print(WIFI_SSID);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  secured_client.setCACert(TELEGRAM_CERTIFICATE_ROOT);  
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.print("\nWiFi connected. IP address: ");
  Serial.println(WiFi.localIP());

  Serial.print("Retrieving time: ");
  configTime(0, 0, "pool.ntp.org");  // get UTC time via NTP
  time_t now = time(nullptr);
  while (now < 24 * 3600) {
    Serial.print(".");
    delay(100);
    now = time(nullptr);
  }
  Serial.println(now);

  bot.sendMessage(CHAT_ID, "Bot iniciou", "");//envia mensagem dizendo que iniciou o BOT
}

void loop() {

  int Porta = digitalRead(Sensor);


  if (Porta == 0) {
    if (flag) {
      Serial.println("Porta Aberta");
      bot.sendMessage(CHAT_ID, "Porta Aberta", "");
      flag = 0;
    }
  } else {
    flag = 1;
  }
}??????

No código acima eu defini que o sensor será conectado ao pino 4 da ESP32. A ligação do sensor, por ser digital, é igual ligar um botão. Na imagem abaixo tem um exemplo da ligação, porém no pino 33. No lugar do botão, apenas ligamos o sensor.


ESP32 Deep Sleep : Push Button Message to IBM Watson IoT Sensor Magnético MC-38 NF


Com tudo conectado e o código passado para a ESP32, ao abrir o sensor, a mensagem "Porta Aberta" que foi definida no código é enviado para o nosso Telegram:




??No vídeo abaixo do nosso canal mostro o projeto mais em detalhes: