A Raspberry Pi tem diversas utilidades, como por exemplo desenvolver projetos envolvendo IoT. Neste post vamos montar um Telegram Bot com Raspberry Pi 3, um sistema que permite envio de comandos através de mensagens instantâneas do software Telegram. Com este software é possível realizar o acionamento de relés, LEDs e monitorar ambientes, em qualquer lugar do mundo a qualquer hora.
O projeto funcionará da seguinte maneira: ao enviarmos comandos através de mensagens instantâneas do software Telegram, a Raspberry Pi processará qual comando foi enviado e poderá acionar algum pino da GPIO ou acionar a câmera e enviar as fotos tiradas para seu dispositivo (Mobile ou PC).
Material necessário para o Telegram Bot com Raspberry Pi 3
Para este projeto, vamos precisar de:
- Raspberry Pi 3 Model B+
- Cartão de memória de, no mínimo, 8 GB (recomendável: 16 GB)
- Jumpers diversos
- Câmera Raspberry Pi
- Fonte para Raspberry Pi
- LED Difuso 5mm Vermelho
- Resistor 220Ω 1/4W
O que é o Telegram?
O Telegram é um serviço de mensagens instantâneas multi-plataforma totalmente grátis e open-source! Isso significa que pode ser usado no Windows Desktop, iOS, Android, Linux e por aí vai. É um dos concorrentes do famoso WhatsApp.
Em relação ao seu rival WhatsApp, o Telegram possui como principal vantagem o fato de disponibilizar APIs para integração. Ou seja, é possível integrar facilmente sua aplicação com o Telegram, aumentando assim o potencial de suas soluções.
Configurando o Telegram Bot no celular
Primeiramente, baixe o Telegram em seu celular.
Através da Lupa no canto superior direito da tela procure por, “BotFather”.
Ao abrir a tela do BotFather, digite “/start”.
Para criar um novo Bot, use o comando “/newbot”:
Agora, para criar nome de usuário digite “username” e “username_bot”.
Guarde o código do “token to acess”, você vai precisar desse número nas próximas etapas.
Para acessar a página de comandos criada digite “t.me/username_bot.”
Para próxima etapa, vamos precisar do Chat ID, que é um código da sua conta no Telegram. Este número é privado e irá proteger você de receber SPAM.
Através da lupa no canto superior direito da tela procure por “get_id_bot”.
Ao abrir a tela, digite “/start”.
Guarde o código do “Chat_ID”, você vai precisar desse número nas próximas etapas.
Configurando a sua Raspberry Pi
Agora iremos configurar a Raspberry Pi e o acesso será feito via SSH. Para saber como fazer essa configuração, acesse o post Raspberry Pi Zero W: configuração rápida para Rede e SSH.
Agora, com a Raspberry Pi configurado para o acesso via SSH, é possível acessar o terminal através do software PuTTY e, assim, instalarmos os programas necessários para executar o software “Telegram_bot”.
Abra o PuTTY e conecte sua Raspberry Pi.
Instale os seguintes pacotes Python abaixo:
sudo apt-get install python3-pip
sudo apt-get install python3
python3 -m pip install --upgrade pip
Instale o “telepot”, conforme comando abaixo:
sudo pip3 install telepot
git clone https://github.com/nickoala/telepot.git
Preparação – Câmera Raspberry Pi
Antes de prosseguir com o projeto, é preciso preparar a Raspberry Pi para se comunicar com a câmera. Para isso, siga este nosso tutorial.
Instale o pacote Python abaixo:
pip install "picamera[array]"==1.10
Transformando a Raspberry Pi em um Telegram Bot
O esquemático do projeto Telegram Bot com Raspberry Pi 3 pode ser visto na figura abaixo:
Agora vamos criar o nosso programa executável. Para criar o arquivo, digite o seguinte comando dentro do terminal:
sudo nano telegram_bot.py
Agora, cole o código abaixo diretamente no terminal:
import sys import time import random import datetime import telepot import RPi.GPIO as GPIO import picamera GPIO.setwarnings(False) #LED def On(pin): GPIO.output(pin,GPIO.HIGH) return def Off(pin): GPIO.output(pin,GPIO.LOW) return # Numero dos pinos da Raspberry PI configurada no modo BOARD. GPIO.setmode(GPIO.BOARD) # Define pino 13 como saída GPIO.setup(13, GPIO.OUT) # Comandos que vem do software Telegram e sao processados pela Raspberry PI def handle(msg): chat_id = msg['chat']['id'] command = msg['text'] print ('got command: %s' % command) if command == 'On': bot.sendMessage(chat_id, On(13)) if command =='Off': bot.sendMessage(chat_id, Off(13)) if command =='Foto': # Chave do chatID chat_id = Cole aqui seu Chat_ID #Habilita disparo da camera através da Raspberry PI camera = picamera.PiCamera() camera.capture('./Capture.jpg') camera.close() # Envia a foto tirada para o software telegram através do Chat_ID bot.sendPhoto(chat_id=chat_id, photo=open('./Capture.jpg', 'rb')) # Permite que os comandos digitados no telegram sejam enviados a Raspberry PI bot = telepot.Bot('Cole aqui o token to acess') bot.message_loop(handle) print('Esperando Comando...') while 1: time.sleep(10)
No código acima, insira as suas informações dentro do campos “Chat_ID” (linha 36) e “token to acess” (linha 45).
Agora pressione Ctrl+X e depois Y (Inglês) ou S (Português) para sair e salvar o arquivo.
Pronto! O arquivo foi gerado, é possível executa-lo a qualquer momento, utilizando o seguinte comando:
python3 telegram_bot.py
Abra novamente o software Telegram e clique na página de comando criada anteriormente “t.me/username_bot.”
Resultado do Telegram Bot com Raspberry Pi 3
Ao clicar em começar, é só a disparar os comando configurados na sua Raspberry Pi, atenção com os caracteres especiais, acentos, letras maiúsculas e minúsculas pois se algum caractere não estiver de acordo a Raspberry PI não identificará o comando.
Através do terminal PuTTY é possível ver os comandos enviados do Telegram na Raspberry Pi.
Gostou do projeto Telegram Bot com Raspberry Pi 3? Então deixe seu comentário logo abaixo.
Olá!
Tentei copiar e colar o código do jeito que foi escrito mas ao executar o arquivo o python solicita que o código seja identado.
Tem como você enviar o código identado para o meu e-mail, por favor? [email protected]
Olá Sidney.
Para que possamos entender melhor o seu problema, favor entre em contato conosco no [email protected]
Att.
Vitor Mattos.
Suporte Técnico MakerHero.
Agora o WhatsApp começou a copiar a função do chat secreto, ao implementar a auto destruição de mensagem após 7 dias.
O melhor do Telegram é que ele permite configurar o tempo para a mensagem ser deletada.
import sys
import time
import datetime
import telepot
from telepot.loop import MessageLoop
import RPi.GPIO as GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(13, GPIO.OUT)
#LED
def On(pin):
GPIO.output(pin,GPIO.HIGH)
return
def Off(pin):
GPIO.output(pin,GPIO.LOW)
return
def action(msg):
chat_id = msg[‘chat’][‘id’]
command = msg[‘text’]
print (‘recebi a msg: %s’ % command)
if command == ‘On’:
message = “Ligar led”
telegram_bot.sendMessage (chat_id, message)
if command ==’Off’:
message = “Desligar led”
telegram_bot.sendMessage (chat_id, message)
if command ==’Foto’:
message = “Pegar Foto”
telegram_bot.sendMessage (chat_id, message)
telegram_bot = telepot.Bot(‘1055397896:AAHKcSSW6-18wyOiqJ3gl9C8VWCQbGwJ6TY’)
print (telegram_bot.getMe())
MessageLoop(telegram_bot, action).run_as_thread()
print(‘Esperando Comando…’)
while 1:
time.sleep(10)
Espaçamento das linhas de comando fazem a diferença
Aqui esta dando este erro..
Traceback (most recent call last):
File “/usr/lib/python3.7/ast.py”, line 35, in parse
return compile(source, filename, mode, PyCF_ONLY_AST)
File “/root/Desktop/telegram_bot.py”, line 13
GPIO.output(pin,GPIO.HIGH)
^
IndentationError: expected an indented block
Olá Davi,
Recomendo vou refazer o procedimento “Configurando a sua Raspberry Pi”.
Abraço!
Rosana – Equipe MakerHero
Olá Paulo teria ao invés de usar a pi noir teria como usar uma webcam usb
Olá, Guilherme,
A Raspberry Foundation tem um tutorial sobre como ligar uma webcam usb na Pi: https://www.raspberrypi.org/documentation/usage/webcams/
Depois disso, teria que fazer uma modificação no código para que, em vez de usar a picamera, a camera usb.
Abraços!
Diogo – Equipe MakerHero