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.

Bot Telegram com ESP8266

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:

Adicionando BotFather

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:

Criando Bot no BotFather

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:

Bot Telegram Token

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:

Circuito ESP8266 NodeMCU e Leds

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:

ESP8266 IDE Arduino

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

Configuração ESP8266 NodeMCU 1.0 Board IDE Arduino

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:

Biblioteca Bot Telegram Arduino

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:

Bot Telegram com ESP8266

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)