Neste artigo vou mostrar como fazer um ESP32 enviar uma mensagem no Telegram para a Telegram app no seu telemóvel ou computador. Também vamos adicionar um sensor infravermelho passivo (PIR) ao ESP32, que pode ser usado para enviar uma notificação de alarme de intrusão, caso seja detetado movimento.
Peças Necessárias
Abaixo encontra os componentes necessários. Para este projeto, usei uma placa ESP32 mais antiga, que já foi descontinuada, mas ainda pode ser encontrada a um preço muito baixo. No entanto, qualquer outro ESP32 também funcionará perfeitamente.
Listei dois tipos diferentes de sensores de movimento. Se quiser um tamanho pequeno, escolha o AM312. Mas se quiser detetar movimento apenas à noite, opte pelo HC-SR501, pois pode ser facilmente equipado com um sensor de luz e também tem uma distância de deteção maior.

ESP32 lite

Cabo USB de Dados

Conjunto de Fios Dupont

Breadboard

Sensor de Movimento

Sensor de Movimento PIR HC-SR501
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
Telegram Messenger
O Telegram Messenger é uma aplicação de mensagens baseada na cloud. Pode instalá-lo facilmente no seu smartphone (Android e iPhone) ou computador (PC, Mac e Linux). É completamente gratuito e não tem anúncios irritantes.
Permite enviar mensagens, fotos, vídeos, notas de voz, ficheiros, e fazer chamadas de voz ou vídeo. Uma característica destacada é o seu sistema de armazenamento na cloud, que permite aceder às conversas a partir de vários dispositivos sem problemas. O Telegram também suporta chats de grupo grandes, canais públicos de transmissão e bots, tornando-o popular tanto para comunicação pessoal como comunitária.
Quando comparado com WhatsApp ou Signal,Telegram é geralmente mais flexível e amigável para desenvolvedores. WhatsApp tem encriptação de ponta a ponta por defeito e é amplamente usado, mas tem suporte limitado a bots e menos opções de automação. Signal é o mais seguro em termos de privacidade, mas não tem as APIs e sistemas de bots que tornam o Telegram adequado para integração com hardware. Para receber mensagens de um ESP32, o Telegram é a plataforma mais fácil de usar devido à sua API de Bot bem documentada, que permite ao ESP32 enviar mensagens via HTTPS com configuração mínima.
Instalar Telegram
A instalação do Telegram é simples. Basta ir à sua Google Play ou App Store e descarregar e instalar a app Telegram. Também pode instalá-lo no Windows como aplicação de ambiente de trabalho.

Criar Bot no Telegram
Para receber mensagens enviadas de um ESP32 na sua app Telegram, primeiro precisamos criar um Bot. Bots são aplicações de terceiros que funcionam dentro do Telegram. Os utilizadores podem interagir com bots enviando-lhes mensagens, comandos e pedidos inline.
Vamos usar o bot BotFather para criar um novo bot que receberá as nossas mensagens. Abra o Telegram no seu telemóvel e procure por “botfather”. Depois clique no bot BotFather como mostrado abaixo ou abra o link t.me/botfather.

Certifique-se de escolher o bot correto. Existem bots com nomes semelhantes que deve evitar. Procure esta imagem para ter certeza ou use o link fornecido:

Se selecionar e clicar no BotFather Bot, a seguinte mensagem deverá aparecer. Pressione o botão /start (marcado a vermelho):

De seguida, escreva /newbot e siga as instruções para criar o seu bot. Tem de fornecer um nome, por exemplo “My_ESP32_receiver” e um nome de utilizador que deve terminar em ‘bot’, por exemplo “My_ESP32_receiver_bot”.

Muitos nomes já estão ocupados e provavelmente terá de tentar várias vezes até encontrar um nome disponível. Depois de criar o seu bot, verá uma mensagem com um link para aceder ao bot e o token do bot.
O token do bot é uma cadeia de caracteres que se parece com isto: 1234567811:fakeIodw9023sjjoj982qe23dSSDCDDDSSxx, mas será diferente para o seu bot. Certifique-se de guardar o token do bot – vamos precisar dele mais tarde. O ideal é copiá-lo no seu telemóvel e enviar para si próprio por email.

Obter ID de Utilizador do Telegram
De seguida, precisamos obter o nosso ID de utilizador do Telegram e vamos usar outro bot para isso. Abra o Telegram e procure por “IDBot” ou abra este link t.me/myidbot:

Receberá uma mensagem a explicar o que este bot faz. Responda a esta mensagem escrevendo /getid. Receberá uma resposta com o seu ID de utilizador, por exemplo ‘7221435846’. Como antes, certifique-se de guardar o ID de utilizador, pois vamos precisar dele mais tarde.

Agora temos toda a informação necessária. Na próxima secção vamos escrever o código que envia uma mensagem do ESP32 para o seu bot.
Código para enviar mensagens no Telegram
Vamos usar a UniversalTelegramBot Library para enviar mensagens no Telegram a partir do ESP32. Para instalar esta biblioteca, abra o LIBRARY MANAGER do Arduino IDE, procure por ‘UniversalTelegramBot’ e clique no botão INSTALL. Após a instalação bem-sucedida, deverá ver a biblioteca instalada:

Enviar mensagem simples
Neste primeiro exemplo de código enviamos uma mensagem simples e fixa para o nosso bot do Telegram como teste. Abaixo está o código completo. Dê uma vista rápida e depois discutimos os detalhes.
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
const char* SSID = "xxxx";
const char* PASSWORD = "xxxx";
const String BOT_TOKEN = "xxxxxxxx:xxxxxxxxxxxxxxxxxxxx";
const String CHAT_ID = "xxxx";
WiFiClientSecure client;
UniversalTelegramBot bot(BOT_TOKEN, client);
void setup() {
WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED) delay(100);
client.setCACert(TELEGRAM_CERTIFICATE_ROOT);
bot.sendMessage(CHAT_ID, "Message-1", "");
}
void loop() {}
O código começa por incluir as bibliotecas necessárias para comunicação WiFi e Telegram:
#include <WiFi.h> #include <WiFiClientSecure.h> #include <UniversalTelegramBot.h>
De seguida definimos as constantes SSID e PASSWORD para a autenticação WiFi e as constantes BOT_TOKEN e CHAT_ID para a app Telegram. Para CHAT_ID tem de usar o ID de utilizador que obteve do IDBot e o BOT_TOKEN que obteve do BotFather para o seu bot.
const char* SSID = "xxxx"; const char* PASSWORD = "xxxx"; const String BOT_TOKEN = "xxxxxxxx:xxxxxxxxxxxxxxxxxxxx"; const String CHAT_ID = "xxxx";
Com as constantes definidas, criamos os objetos para comunicação WiFi e Telegram:
WiFiClientSecure client; UniversalTelegramBot bot(BOT_TOKEN, client);
Finalmente, implementamos a funçãosetup, onde primeiro estabelecemos a comunicação WiFi. Depois definimos o certificado para uma comunicação segura com o Telegram e enviamos a mensagem ‘Message-1’ chamando bot.sendMessage():
void setup() {
WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED) delay(100);
client.setCACert(TELEGRAM_CERTIFICATE_ROOT);
bot.sendMessage(CHAT_ID, "Message-1", "");
}
Com este código, cada vez que reiniciar o seu ESP32, a mesma mensagem ‘Message-1’ será transmitida para o seu bot do Telegram.
A funçãoloopfica vazia. Aqui poderia enviar mensagens repetidamente, mas certifique-se de colocar um atraso no envio, caso contrário o seu bot do Telegram será inundado com mensagens!
Enviar mensagem com carimbo de data/hora
Muitas vezes quer que a sua mensagem tenha um carimbo de data/hora para saber quando foi enviada. O código seguinte é uma pequena extensão do código anterior que adiciona um carimbo de data/hora à mensagem:
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <time.h>
const char* SSID = "xxxx";
const char* PASSWORD = "xxxx";
const String BOT_TOKEN = "xxxxxxxx:xxxxxxxxxxxxxxxxxxxx";
const String CHAT_ID = "xxxx";
WiFiClientSecure client;
UniversalTelegramBot bot(BOT_TOKEN, client);
void sendMessage() {
struct tm t;
if (getLocalTime(&t)) {
char msg[64];
strftime(msg, sizeof(msg), "Message@%H:%M:%S", &t);
bot.sendMessage(CHAT_ID, msg, "");
}
}
void setup() {
configTime(0, 0, "pool.ntp.org"); // UTC
client.setCACert(TELEGRAM_CERTIFICATE_ROOT);
WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED) delay(100);
sendMessage();
}
void loop() { }
As principais diferenças estão na função sendMessage() e no setup. A função sendMessage() obtém a hora local, formata uma string com o carimbo de data/hora e envia a mensagem:
void sendMessage() {
struct tm t;
if (getLocalTime(&t)) {
char msg[64];
strftime(msg, sizeof(msg), "Message@%H:%M:%S", &t);
bot.sendMessage(CHAT_ID, msg, "");
}
}
A mensagem ficará algo como ‘Message@12:31:00’, por exemplo. Pode alterar o texto da mensagem ou o formato do carimbo de data/hora ao seu gosto. Consulte a documentação da função strftime.
Na funçãosetupconfiguramos primeiro o relógio do ESP32 para receber a hora de um serviço de tempo na internet chamando configTime(). Neste exemplo, o relógio está definido para a hora UTC, mas pode definir o seu próprio fuso horário.
void setup() {
configTime(0, 0, "pool.ntp.org"); // UTC
client.setCACert(TELEGRAM_CERTIFICATE_ROOT);
WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED) delay(100);
sendMessage();
}
Se quiser aprender mais sobre sincronização de relógio e formatos de strings de tempo, consulte os tutoriais How to synchronize ESP32 clock with SNTP servere talvez Digital Clock on e-Paper Display.
De seguida definimos o certificado para comunicação segura com o Telegram e estabelecemos a ligação WiFi. Finalmente, enviamos a mensagem chamandosendMessage().
Com este código, recebe uma nova mensagem com carimbo de data/hora cada vez que reiniciar o seu ESP32.
Enviar mensagem de alerta de movimento
No último exemplo de código vamos enviar uma mensagem de alerta para o nosso bot do Telegram se o ESP32 detetar movimento. Isto requer ligar um sensor de movimento ao ESP32. A imagem seguinte mostra como ligar o sensor PIR AM312 ao ESP32 lite:

Comece por ligar o pino menos (-) do AM312 ao pino de terra (G) do ESP32 e o pino mais (+) ao pino 3V. Liguei o pino de sinal (s) do AM312 ao pino 17, mas pode usar praticamente qualquer outro pino. Apenas certifique-se de ajustar o código abaixo em conformidade.
Se quiser aprender mais sobre ativação por movimento, consulte os nossos tutoriais How to Build a Motion Activated Night Light e How to use HC-SR501 PIR Motion Sensor with Arduino.
O código seguinte envia uma mensagem de alerta com carimbo de data/hora quando o sensor PIR ligado ao ESP32 deteta movimento e depois espera uma hora antes de permitir um novo alerta:
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <time.h>
const char* SSID = "xxxx";
const char* PASSWORD = "xxxx";
const String BOT_TOKEN = "xxxxxxxx:xxxxxxxxxxxxxxxxxxxx";
const String CHAT_ID = "xxxx";
const int PIR_PIN = 17;
const int WAIT_TIME = 60 * 60 * 1000; // wait one hour
WiFiClientSecure client;
UniversalTelegramBot bot(BOT_TOKEN, client);
void sendMessage() {
struct tm t;
if (getLocalTime(&t)) {
char msg[128];
strftime(msg, sizeof(msg), "Alert @ %Y-%m-%d %H:%M:%S", &t);
bot.sendMessage(CHAT_ID, msg, "");
}
}
void setup() {
pinMode(PIR_PIN, INPUT);
configTime(0, 0, "pool.ntp.org"); // UTC
client.setCACert(TELEGRAM_CERTIFICATE_ROOT);
WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED) delay(100);
}
void loop() {
if (digitalRead(PIR_PIN) == HIGH) {
sendMessage();
delay(WAIT_TIME);
}
}
O código é muito semelhante aos exemplos anteriores. A única diferença real está na função loop, onde agora verificamos se o sensor PIR detetou movimento. Se for o caso, enviamos a mensagem de alerta e depois esperamos o tempo definido em WAIT_TIME para evitar alertas frequentes.
Pode alterar a constante PIR_PIN para ligar o sensor a um pino diferente, e a constante WAIT_TIME para mudar o tempo mínimo de espera entre alertas. No entanto, não torne o WAIT_TIME muito pequeno, caso contrário o seu telemóvel pode ser inundado com mensagens.
Conclusão
Neste artigo aprendeu como enviar uma mensagem para a app Telegram no seu telemóvel a partir de um ESP32.
Também ligámos um sensor PIR ao ESP32 para enviar mensagens de alerta quando é detetado movimento. Poderia combinar esta função com um sistema de câmaras para ser notificado quando deve verificar o stream ou gravações da vigilância. Veja os tutoriais Surveillance Camera with ESP32-CAM,Take Photos with ESP32-CAMeMotion Activated ESP32-CAM sobre como construir um sistema assim.
Se não quiser apenas receber notificações, mas controlar o ESP32, por exemplo, ligar luzes, enviando mensagens no Telegram, veja o tutorial Control ESP32 from Telegram.
Se tiver alguma dúvida, sinta-se à vontade para deixar nos comentários.
Boas experiências ; )

