Sensor de Presença Integrado Com Bot do Telegram

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

Busca pelo bot

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

Configurando 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.

Token

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.

Módulo ESP32

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.

Sensor de movimento

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.

Diagrama de conexões

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.

biblioteca

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.

biblioteca

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/