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.