Bot Telegram com ESP8266 NodeMCU

Neste tutorial vamos mostrar como criar um Bot Telegram com ESP8266 NodeMCU permitindo que você, de qualquer lugar do mundo (onde tenha conexão internet), envie comandos para o microcontrolador.

O nosso bot Telegram vai funcionar com comandos pré-definidos, mas o programa é facilmente adaptável para acionar outras portas do ESP8266, assim como obter e enviar dados de sensores ou acionar relés por exemplo.

Criando o Bot ESP8266 usando BotFather

Antes de mais nada vamos criar o perfil do nosso módulo ESP8266 no Telegram. Por meio desse perfil vamos enviar comandos para controlar suas portas e também receber mensagens de aviso.

Para criar o perfil vamos usar o BotFather. Entre no Telegram e procure por BotFather, adicionando-o conforme imagem abaixo:

Ao adicionar este perfil, será mostrada uma mensagem de boas vindas do BotFather. Clique em START para continuar.

Vamos criar o nosso bot enviando a mensagem /newbot. O BotFather retorna uma mensagem perguntando qual será o nome do seu bot. Escolhi ArduinoeCia_ESP8266, e esse vai ser o nome que aparecerá no perfil desse usuário.

O BotFather pede também que você selecione um nome de usuário para o seu bot. Este nome deve terminar como “bot”, então selecionei ArduinoeCia_ESP8266_bot:

A criação do bot é então finalizada e o BotFather fornece para você um token (conforme destacado na imagem abaixo). Anote esse token pois sem ele a comunicação entre o ESP e o Telegram não vai funcionar:

Você também pode adicionar uma descrição para o seu bot e criar uma imagem de perfil, entre outras opções. Digite /help no botFather para visualizar todos os comandos disponíveis.

Circuito de testes ESP8266 com Telegram

Para os testes de controle do Bot Telegram com ESP8266 vamos usar o módulo ESP8266 NodeMCU e dois leds que serão acesos de acordo com os comandos enviados pelo aplicativo:

O led vermelho está conectado na porta 4 e o verde na porta 3. Não utilizei resistores nos testes, liguei direto, ok?

Programa de controle ESP8266

A programação do NodeMCU será feita pela IDE do Arduino. Para utilizar esta placa, entre no menu Arquivo e em seguida em Preferências. No campo URLs Adicionais para Gerenciadores de Placas coloque o seguinte endereço:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Clique em OK e vá agora até o menu Ferramentas -> Placa -> Gerenciador de Placas e na tela do gerenciador, procure por ESP8266 e selecione o esp8266 by ESP8266 Community, clicando em seguida em Instalar:

Agora você terá as placas da linha ESP8266 na lista de placas disponíveis na IDE. Selecione NodeMCU 1.0:

Para o programa vamos usar duas bibliotecas: a ArduinoJson e a CTBot. Ambas podem ser instaladas à partir da IDE do Arduino.

Instalamos primeiro a CTBot. Entre no menu Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas e procure por CTBot, clicando em seguida em Instalar:

Faremos o mesmo procedimento para a biblioteca ArduinoJson mas nesse caso MUITA ATENÇÃO pois o CTBot exige uma versão específica da ArduinoJson, a 5.13.5. Então antes de clicar em instalar selecione a versão correta:

Finalizada a instalação das duas bibliotecas, carregue o programa abaixo no ESP8266. Atenção para as linhas 8, 9 e 10 onde você deve colocar, respectivamente, o nome da sua rede wifi, a senha da rede e por último o token que você anotou durante a instalação do BotFather:

//Programa: Bot Telegram com ESP8266 NodeMCU
//Autor: Arduino e Cia

#include "CTBot.h"
CTBot myBot;

//Definicoes da rede wifi e conexao
String ssid  = "NOME_WIFI"; //Nome da sua rede wifi
String pass  = "SENHA_WIFI"; //Senha da sua rede wifi
String token = "881505328:AAFWpkKFuq2cAFDDERE-1kKDg"; //Token bot Telegram

//Pinos dos leds
uint8_t led1 = D4;
uint8_t led2 = D3;

void setup()
{
  Serial.begin(115200);
  Serial.println("Inicializando bot Telegram...");

  //Conexao na rede wifi
  myBot.wifiConnect(ssid, pass);

  //Define o token
  myBot.setTelegramToken(token);

  //Verifica a conexao
  if (myBot.testConnection())
    Serial.println("nConexao Ok!");
  else
    Serial.println("nFalha na conexao!");

  //Define os pinos dos leds como saida e apaga os leds
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  digitalWrite(led1, HIGH);
  digitalWrite(led2, HIGH);
}

void loop()
{
  //Variavel que armazena a mensagem recebida
  TBMessage msg;

  //Verifica se chegou alguma mensagem
  if (myBot.getNewMessage(msg))
  {
    //Verifica se foi recebia a mensagem "Liga 1"
    if (msg.text.equalsIgnoreCase("LIGA 1"))
    {
      //Liga o led 1 (vermelho)
      digitalWrite(led1, LOW);
      //Retorna uma pensagem informando que o led foi aceso
      myBot.sendMessage(msg.sender.id, "LED 1 Aceso!");
    }
    else if (msg.text.equalsIgnoreCase("DESLIGA 1"))
    {
      digitalWrite(led1, HIGH);
      myBot.sendMessage(msg.sender.id, "LED 1 Apagado!");
    }
    else if (msg.text.equalsIgnoreCase("LIGA 2"))
    {
      digitalWrite(led2, LOW);
      myBot.sendMessage(msg.sender.id, "LED 2 Aceso!");
    }
    else if (msg.text.equalsIgnoreCase("DESLIGA 2"))
    {
      digitalWrite(led2, HIGH);
      myBot.sendMessage(msg.sender.id, "LED 2 Apagado!");
    }
    else
    {
      //Caso receba qualquer outro comando, envia uma
      //mensagem generica/informativa
      String reply;
      reply = (String)"Ola " + msg.sender.username + (String)"! Acesse www.arduinoecia.com.br e confira mais posts sobre ESP8266, Arduino e IoT!";
      myBot.sendMessage(msg.sender.id, reply);
    }
  }
  delay(500);
}

Após o carregamento do programa, aguarde alguns segundos até que o módulo faça a conexão com a internet. Você pode acompanhar esse processo pelo Serial Monitor, que vai mostrar se tudo está funcionando corretamente.

Controlando o ESP8266 com Telegram

Agora é só adicionar o seu bot na lista de contatos do Telegram e enviar os comandos para ligar os leds. Os comandos Liga 1 e Liga 2 acionam respectivamente os leds vermelho e verde. Para desligar os leds, utilize os comandos Desliga 1 e Desliga 2.

Veja como fica a tela do Telegram usando um smartphone com Android:

O ESP8266 vai receber os comandos e também responder com mensagens como Led 1 Aceso ou Led 2 Apagado, por exemplo. Você pode customizar essas mensagens de acordo com as suas necessidades.

Gostou? Confira também o post Painel de Avisos acionado por Bot Telegram, onde uso o mesmo princípio para mostrar as mensagens em um painel matriz de leds 8×8.

4.3/5 - (31 votos)

Related posts

Use o Blynk para controlar o Arduino por bluetooth

by Arduino e Cia
7 anos ago

Automação residencial usando MQTT

by Arduino e Cia
3 anos ago

Como usar o NodeMCU ESP8266 com display Oled I2C

by Arduino e Cia
7 anos ago
Sair da versão mobile