
Sensor de Presença Integrado Com Bot do Telegram
ÍNDICE DE CONTEÚDO
- Telegram
- Criação do Bot do Telegram
- ESP32/8266 + Arduino IDE
- Sensor de Presença
- Diagrama das Conexões
- Firmware
- Bibliotecas
- Código
- Saiba mais
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”.

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”).

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.

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://www.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); } }
Fonte:
https://www.embarcados.com.br
https://www.embarcados.com.br/sensor-de-presenca-integrado-com-bot-do-telegram/