Sensor de Presença Integrado Com Bot do Telegram

Neste artigo iremos utilizar uma biblioteca, compatível com Arduino, que possibilita a comunicação de maneira fácil e rápida de um microcontrolador(no caso deste artigo o ESP32) com um robô(ou bot) criado com o aplicativo de mensagens Telegram. A ideia é utilizar um sensor de presença que através de uma interrupção configurado no ESP32, informa ao microcontrolador a detecção de movimento e o mesmo comunica-se, por uma conexão com a internet, com o bot e a mensagem pode ser visualizada pelo usuário.

Telegram

O Telegram é um aplicativo de mensagens disponível para Android e IOS. Para prosseguir, você pode baixar o aplicativo na loja de aplicativos do seu sistema operacional e criar uma conta. Uma funcionalidade bastante interessante presente no Telegram é a possibilidade de criação e programação de Bots que podem realizar diversas tarefas como: informar valor de algum ativo na bolsa de valores, enviar lembretes, Tweetar mensagens e etc…

O Bot utilizado neste artigo apenas replicará a mensagem recebida pelo microcontrolador. A seguir apresentaremos o procedimento para a criação e configuração do Bot utilizado.

Criação do Bot do Telegram

Os Bots são criados a partir de uma ferramenta chamada botfather. Após abrir o aplicativo, utilize a ferramenta de busca para encontrar o “@BotFather”.

bot do Telegram
Figura 1: Busca pelo @botfather no aplicativo do telegram.

A seguir envie o comando “/newbot”, na próxima mensagem forneça o nome do Bot e depois escolha um username para o bot(este nome deve necessariamente terminar com “bot”).

bot do Telegram
Figura 2: Configurando um nome e um “username” para o bot.

Após a criação um token será disponibilizado, salve-o, pois ele será necessário para a inicialização da biblioteca que fará a comunicação com o Bot. A figura a seguir ilustra onde localizar o Token gerado.

bot do Telegram
Figura 3: Token do bot.

Pronto! Seu Bot já está criado e pronto para ser utilizado. A seguir apresentaremos o microcontrolador utilizado para a comunicação com o Bot.

ESP32/8266 + Arduino IDE

A biblioteca utilizada para a comunicação com o Bot é compatível com o Arduino IDE e foi desenvolvida para microcontroladores das famílias ESP32 e ESP8266. Para que seja possível a programação dessas famílias de microcontroladores pelo ambiente Arduino, algumas configurações são necessárias, para isto basta seguir a sessão “Instalação do pacote ESP32 para Arduino” deste artigo do Embarcados: https://embarcados.com.br/franzininho-wifi-primeiros-passo-na-arduino-ide/ .

Para este tutorial utilizaremos a placa de desenvolvimento DO IT DEVKIT WROOVER.

Figura 4: Módulo ESP32 utilizado.


Sensor de Presença

Para a detecção de movimento utilizaremos o módulo HC-SR501 que utiliza um sensor PIR, capaz de detectar a variação de emissão de luz infravermelha emitida por um corpo.


Figura 5: Módulo sensor de movimento(HC-SR501) utilizado

O módulo pode ser alimentado com 5V e gera uma saída em 3V3, portanto compatível com o nível lógico utilizado pelo ESP32/ESP8266(3V3).

Diagrama das Conexões

O circuito utilizado é relativamente simples, a placa de desenvolvimento será alimentada pela USB(5V) e o pino “Vin” irá alimentar o módulo HC-SR501 e sua saída será ligada ao pino 27 da placa que será configurado como interrupção.

Figura 6: Esquema de conexões entre o Sensor de presença e o módulo ESP32.

Firmware

A seguir serão descritas as bibliotecas necessárias para o correto funcionamento do código e o próprio código explicado linha a linha.

Bibliotecas

A biblioteca utilizada para o gerenciamento do Bot pode ser baixada pelo link https://github.com/shurillu/CTBot ou pelo gerenciador de bibliotecas da própria Arduino IDE, como indicado na próxima imagem.

Figura 7: Download da biblioteca CTBot pelo gerenciador de bibliotecas da Arduino IDE.

Outra biblioteca necessária para o correto funcionamento da aplicação é a ArduinoJson que pode ser baixada pelo link https://github.com/bblanchon/ArduinoJson ou pelo gerenciador de bibliotecas da Arduino IDE. Neste tutorial está sendo utilizada a versão 5.13.5 desta biblioteca, mas como indicado na descrição da biblioteca “CTBot” ela possui suporte tanto para a versão 5 quanto para a versão 6 da ArduinoJson.

Figura 8: Download da biblioteca JSon pelo gerenciador de bibliotecas da Arduino IDE.

Código

Em linhas gerais o código apresentado envia mensagens ao Bot quando uma interrupção é detectada, indicando a presença ou movimento no cômodo. O código-fonte completo segue abaixo, leia com atenção os comentários para o completo entendimento do mesmo.

/*
Descrição: Sensor de presença informando presença em determinado cômodo a um Bot do Telegram.
Autor: Paulo Fernando.
*/
//Biblioteca para gerenciar comunicação com o Bot
#include "CTBot.h"
//Pino de interrupção utilizado com o módulo HC-SR501
#define PIR   27
//Inicializa objeto da biblioteca 
CTBot myBot;
//Flag que será tratada na rotina de interrupção 
bool pir_presence_flag = false;
//Função responsável pelo envia de mensagens ao Bot
void msgTelegramBot(void);
//Substituir pelo SSID de sua rede WiFi
String ssid  = ""; 
//Substituir pela senha de sua rede WiFi
String pass  = ""; 
//Substituir pelo Token do Bot criado.Este valor é recebido após a criação do Bot com o "@BotFather"
String token = ""; 
//Função chamada quando há interrupção,manter mais curta o possível 
void IRAM_ATTR ISR_0(){
    pir_presence_flag = true;
}
//SetUp
void setup(){
	//Pino de interrupção incializado em Pull Down
	pinMode(PIR, INPUT_PULLDOWN);
  	//Seta o pino como entrada, associa a interrupção a borda de subida e indica o nome da função que irá tratar a interrupção
	attachInterrupt(PIR, ISR_0, RISING);
	//Inicializa a porta serial para debug
	Serial.begin(115200);
	Serial.println("Iniciando TelegramBot...");
	//Inicia conexão com WiFi
	myBot.wifiConnect(ssid, pass);
	//Configura o Token do Bot 
	myBot.setTelegramToken(token);
	//Testa conexão com o Bot
	if(myBot.testConnection())
		Serial.println("\nTeste de Conexão OK");
	else
		Serial.println("\nTeste de Conexão NOK");
	delay(500);
	//Inicia 
	msgTelegramBot();	 
}

void loop(){
	//Nada a fazer	
}
//Verifica conexão com o Bot.Sai dessa função apenas quando a conexão é estabelecida.
bool reconnectTelgramBot(){
	while(!myBot.testConnection()){
		Serial.println("");
		//Tenta conexão com WiFi
		if(myBot.wifiConnect(ssid, pass)){
			Serial.println("Conexão estabelecida");
		}
		else{
			Serial.println("");
		}
	}
	return true;
}

void msgTelegramBot(){
	//Variable para armazenar mensagens vinda do Bot
	TBMessage msg;
	while(1){
		//Verifica se chegou alguma mensagem - Uma primeira mensagem é necessária ser enviada para iniciar o Bot
		if(CTBotMessageText == myBot.getNewMessage(msg)){
			//Envia mensagem de volta ao Bot
			myBot.sendMessage(msg.sender.id, msg.text);
			//Quando a primeira mensagem é recebida o MCU começa a monitorar o sensor de presença para enviar mensagens ao Bot
			while(1){
				//Movimento detectado
				if(pir_presence_flag){
					//Sinaliza que ocorreu a interrupção
					Serial.println("FLAG!");
					//Reseta o valor da Flag
					pir_presence_flag = false;
					//Envia mensagem ao Bot
					if(!myBot.sendMessage(msg.sender.id, "Presença Detectada!")){
						//Falha no envio da mensagem
						Serial.println("Falha no envio da mensagem.");
						//Verifica a conexão com o Bot
						while(!reconnectTelgramBot()){
							delay(10);
						}
					}
					//Aguarda 10 segundos para verificar novamente se a flag mudou de valor.
					delay(10000);
				}
				delay(10);
			}
		}
		delay(10);
	}
}

Saiba mais

Criando um bot com Telegram na Intel Edison

Dialogflow – Plataforma para desenvolvimento de ChatBots

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
5 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Robson Eduardo Muciarone
Robson Eduardo Muciarone
11/05/2024 11:41

Boa tarde a todos, estou com um problema que está me consumindo os neuronios, estou enviando 05 mensagens seguidas a Telegram, gostaria de estar quebrando ou pulando linha entre uma mensagem e outra para melhorar a leitura e ficar menos poluido, já tentei colocar \n em todos os pontos da minha linha de comando. Será que isso é possivel? Já pesquisei a exaustão sobre o assunto sem sucesso, tentei por conta proprio sem sucesso. Alguém ai tem a solução? OBRIGADO!

Marcelo
Marcelo
14/07/2022 15:38

Muito bom, rodou aqui legal.
Ele só se comunica com um usuário? Tem como se comunicar com mais?

Breno
Breno
03/05/2022 08:11

Muito bom! Uma versão 2 desse projeto poderia ser o uso do ESP32 cam (com Câmera) para envio de foto pro Telegram no momento de detecção do sensor de presença…. Seria ou não seria ótimo!? Parabéns pelo belo trabalho! 🙂

Home » Arduino » Sensor de Presença Integrado Com Bot do Telegram

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: