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.
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.
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.
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.
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.
Para quem não entendeu algumas partes desse artigo, segue um material complementar:
- PySerial?—?Short Introduction
- python-telegram-bot?—?Your First Bot
- Tutorial de Python: Desenvolva seu primeiro aplicativo na linguagem
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.