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