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.

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: