Como Integrar Arduino com Bots do Telegram

Redação SempreUpdate
Redação SempreUpdate

Nesse tutorial, vamos aprender como Integrar Arduino com Bots do Telegram feito em Python. Faremos uma simples implementação para controlar o LED que já vem no Arduíno com um simples bot do Telegram. Para o momento, vamos considerar que todos possuem os conhecimentos necessários:

  • Python básico;
  • Noções de POO;
  • Arduino básico.

Configurando o ambiente

Inicialmente precisaremos instalar algumas bibliotecas no nosso ambiente. Primeiro, temos que instalar  python-telegram-bot (lib de comunicação com o Telegram):

pip install python-telegram-bot --upgrade

Caso você não tenha instalado o pip na sua distribuição, temos esses post que que mostra como instalar.

Instalando a PySerial (lib de comunicação com o Arduino):

pip install pyserial --upgrade

Precisamos baixar também a IDE do Arduino nesse link.

Mexendo com Arduino

Iremos criar um arquivo básico, onde o Arduino estará ouvindo na porta 9600 os comandos que serão enviados através do código python (pelo bot).

//arduino_python.ino
int led = 13;                       
void setup() {                         
    Serial.begin(9600);
    pinMode(led, OUTPUT);
}                                               
void loop() {
    char light = Serial.read();
    if(light == '0') {
        digitalWrite(led, false);
    }else if(light == '1') {
        digitalWrite(led, true);
    }
}

O código vai ascender a luz que está associada ao pino 13 da placa. Ao receber o zero ‘0’, a luz será apagada e, ao receber o ‘1’ a luz será acesa.

 # python_serial.py

from serial import Serial

serial_port = '/dev/ttyUSB0'
boud_rate = 9600

conn = Serial(serial_port, boud_rate)

def light_on():
    conn.write(b'1')

def light_off():
    conn.write(b'0')

Aqui criamos duas funções responsáveis por acender e apagar a luz com o comando que escreve na porta serial /dev/ttyUSB0 , em 9600 bits por segundos.

Arduino com Bots do Telegram

Agora vou introduzir um conceito novo para muitos de vocês, que é a programação de bots para Telegram. Um bot é um programa (script) desenvolvido para automatizar procedimentos geralmente repetitivos. A palavra ‘bot’ é um apelido para ‘robot’, robô em inglês.

Um bot para Telegram é algum serviço que fica online em um chat especifico. Neste caso, você pode fazer desde download de vídeos ou áudios de links do YouTube, até transições entre carteiras de criptomoedas.

Primeiro temos que iniciar uma conversa com o ‘pai dos bots’, o botfather. Para configurarmos um ‘domínio’ para nosso bot. Será com ele que pegaremos um username e definir algumas configurações iniciais como permissão para grupos e tipos de privacidade.

Como Integrar Arduino Com Bots Do Telegram

Após iniciar o botão para dar inicio à conversa com o bot, ele vai enviar uma mensagem com todos os comandos possíveis. Iremos utilizar o comando /newbot.

Como Integrar Arduino Com Bots Do Telegram

Essa é a conversa necessária para criar seu bot. Tudo ocorrendo bem, ao final do processo, ele te enviará um token, que será de suma importância quando formos desenvolver o bot (Não se preocupem, já revoquei o token do bot três vezes após esse print).

BOTando tudo junto

Agora vamos unir todas as partes que fizemos até agora. Primeiro temos que subir o código do Arduino (arduino_python.ino) para a plaquinha e abrir o Serial Monitor’ (caso prefira, pode fechar a IDE e testar o código diretamente com python).

Vamos reutilizar o código para comunicação serial (python_serial.py).

# python_bot.py

from telegram.ext import (Updater, CommandHandler, MessageHandler, Filters)
import logging

from python_serial import (light_on, light_off)

logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
                    level=logging.INFO)

logger = logging.getLogger(__name__)


def start(bot, update):
    update.message.reply_text('Bem vind@ ao bot do ArduinoDay!!')

def set_light_on(bot, update):
    light_on()
    update.message.reply_text('O led está ligado!')

def set_light_off(bot, update):
    light_off()
    update.message.reply_text('O led está desligado!')

def help(bot, update):
    update.message.reply_text('Comando ainda não implementado!')

def error(bot, update, error):
    logger.warning('Update "%s" caused error "%s"', update, error)

def main():
    updater = Updater("TOKEN")
    dp = updater.dispatcher
    dp.add_handler(CommandHandler("start", start))
    dp.add_handler(CommandHandler("help", help))
    dp.add_handler(CommandHandler("light_on", set_light_on))
    dp.add_handler(CommandHandler("light_off", set_light_off))
    dp.add_error_handler(error)
    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()

As funções que serão usadas como comandos terão que receber dois parâmetros: bot e update. O bot é para executar funções, como enviar mensagens, imagens, etc. Já o update é para capturar mensagens enviadas para o bot (suas atualizações).

Cada comando é muito bem definido. O comando /start é para enviar uma mensagem quando um usuário iniciar a conversa (ou simplesmente enviar o comando). O /help envia uma mensagem quando alguém enviar um comando de ajuda (geralmente se coloca o funcionamento padrão do bot). Já os comandos /light_on e /light_off são para ligar e desligar a luz do Arduino, respectivamente.

O que nos vai dar acesso ao bot que nós criamos, é a chave de autorização (token) que nos foi enviada no final de sua criação. Após isso, iremos criar manipuladores para cada comando (ou tipos de comandos, utilizando filtros) para cada possível comando que quisermos adicionar ao nosso serviço.

É também utilizado uma função de erro, que não será enviado nada para o usuário. Mas sim, para o log do servidor. Esse comando é utilizado para cada erro que o bot apresentar.

Para executar o bot, basta rodar esse arquivo com o comando:

python python_bot.py

E se não for dado nenhum retorno, ou erro, é porque o bot está executando perfeitamente. Só irá aparecer alguma mensagem se houver algum erro (nesse nosso caso). Para finalizar o bot, basta pressionar CTRL+C e esperar o serviço finalizar.

Testado

Agora que estamos com o bot rodando, vamos fazer nosso primeiro teste.

Como Integrar Arduino Com Bots Do Telegram

Perceba que todas as mensagens que definimos no código, foram enviadas nos devidos comandos. Quando os comandos para acender e apagar as luzes são enviados, além de executarem sua função, mostram ao usuário que o comando foi realizado com sucesso.

Como Integrar Arduino Com Bots Do Telegram

Prestem atenção em uma coisa: comandos são todos as palavras que se iniciam com ‘/’. Caso não se inicie com a barra, será tratado como um texto comum e não funcionará como gostaria.

Esses foram nossos primeiros passos para integrar todas essas tecnologias maravilhosas!

EXTRA

Aqui listo alguns possíveis próximos passos que vocês podem fazer para complementar a integração do Arduino com Bots do Telegram. Algumas configurações no @BotFather:

  • Permitir/bloquear a entrada do seu bot em grupos;
  • Configurar a privacidade dos grupos;
  • Permitir/bloquear o modo inline;
  • Colocar uma foto de perfil;
  • Alterar o nome do Bot;
  • Revocar o Token;
  • Deletar o bot.

Dicas de implementação:

  • Adicionar sensores para receber dados e enviar pela porta serial é uma ótima ideia para brincar;
  • Adicionar outros aparatos como reles para o controle de coisas maiores;
  • Implementar um emissor infravermelho para ligar certos eletrônicos.
OBS.: Vale lembrar que estamos levando em consideração que o script do bot vai rodar na mesma máquina em que se encontra o Arduino conectado à porta serial. Caso queira hospedar o código do bot em algum outro lugar, terá que utilizar de outras artimanhas, como uma API para mandar estados de uma maquina para outra, por exemplo.

Para quem não entendeu algumas partes desse artigo, segue um material complementar:

Esse tutorial de como Integrar Arduino com Bots do Telegram foi feito para complementar uma palestra ministrada no Arduino Day de Natal-RN, feito por Victor Matheus de Castro.

Share This Article
Os artigos vinculados à este usuário são de terceiros. A informação aqui contida não foi elaborada originalmente por nós do SempreUpdate. Mas, publicamos conforme solicitação, envio ou recomendações do próprio autor, assessoria e outros departamentos comerciais ou não comerciais.