Você está na página 1de 8

Integrantes:

Matheus Lodi Marques RA: 21803800


Pedro de Lucena Campos RA: 21800612
Adriano Sales RA: 21805218
Sarkis Junior RA:21804790

Sistema de Notificação do Preço do Bitcoin via


Arduino e Telegram

Prof. Hudson Capanema


Brasília, 2022
1. Introdução

Com a maior liquidez do mercado, a variação de preço dos ativos se tornou


dinâmica e imprevisível. Assim, acompanhar preços de ativos em tempo real de
forma manual mostra-se inviável e ineficiente. Para isso, o desenvolvimento de um
software para acompanhamento de preços é uma solução eficaz para este tipo de
análise, ainda mais quando há interação do software com um hardware: um sistema
via Arduino que, por meio de avisos luminosos ou sonoros, avisa o usuário sobre a
variação de preço do ativo. Ademais, para quando o usuário estiver distante do
hardware desenvolvido, um serviço de mensageria via Telegram irá avisá-lo com as
notificações necessárias.

2. Objetivo

Desenvolver um software que acompanha preços de cripto ativos, em tempo


real e, simultaneamente, ativa um hardware que dispara um sinal sonoro de aviso e
visual com base no preço desejado, definido pelo usuário. Ademais, implementar
um sistema de mensageria para envio de notificações de preço também ao celular
do usuário.

3. Cronograma

Atividade Prevista Data Prevista

● Configuração dos ambientes 22/08/2022


(colab / vs code / jupyter)
● Definição da arquitetura (api,
websocket, loop simples)
● Definição de Componentes
Eletrônicos

● Desenvolvimento da 05/09/2022
aquisição de dados

● Desenvolvimento da 12/09/2022
transmissão dos dados para
o Arduino

● Desenvolvimento do front-end 26/09/2022

● Desenvolvimento do serviço 30/09/2022


de mensageria (telegram)

● Documentação 03/10/2022

4. Desenvolvimento

4.1. Aquisição dos Dados

A arquitetura que foi definida foi de realizar chamadas de API para a Binance.
Como nosso dado é esperado de ser em tempo real, a binance permite até 1000
requisições por minuto, o que é mais do que suficiente para o desenvolvimento
desejado. O custo benefício de desenvolver um websocket não seria viável ao
projeto.
Como primeiro passo, necessita-se trazer o dado do preço do bitcoin para o
software. Assim, foi utilizada a API da Binance, via chamado HTTP, utilizando a
biblioteca Requests:

Figura 1: Chamada HTTP

Após isto, é necessário tratar o json() que a requisição retorna, para aí sim
obter o valor atual do bitcoin:
Figura 2: Tratamento da Requisição, onde valor real armazena o preço atual
do bitcoin

4.2. Transmissão dos dados para o Arduino

Primeiro, o ambiente do python deve ser tratado para que a transmissão


serial aconteça. Assim, utilizando a biblioteca pyserial, destina-se a variável arduino
para a porta serial COM3, com o número de bits de 9600.

Figura 3: Pyserial no python


Após isto, cria-se a função que recebe o valor da função de aquisição do
preço do bitcoin, e configura-se uma string a ser transmitida para o arduino, onde a
string “C”, representa o sinal de compra, e a string “V” representando a venda. A
função arduino.write é responsável por enviar os dados. Ao final, utiliza-se a função
arduino.flush() para limpar os dados da porta serial.

Figura 4: Função de Envio da String ao Arduino


Já no Arduino, o código lê a variável recebida pelo Python na porta serial,
para realizar as notificações em tempo real. Caso a string recebida pelo código seja
C, o led vermelho se acende. Caso seja V, o led se apaga.

Figura 3: Código do Arduino em C

4.3. Desenvolvimento do front-end

Para o front-end, foi desenvolvida uma página utilizando React. Possuindo,


por agora, apenas uma opção de criptomoeda, o usuário pode, por meio de um
campo de texto, estipular seu valor-alvo para compra/venda do referido ativo.
Após inserir os dados desejados, o usuário receberá um prompt onde poderá
decidir ser notificado pelo Telegram quando algum de seus valores forem atingidos.
Caso aceite o prompt, o Telegram será aberto para o usuário iniciar o serviço do bot
de mensageria.

Figura 4: Front-end
Figura 5: Código JavaScript do Front-end

O mais importante do código acima, é a função fetchAlert(), que é a


responsável por atualizar a tela, sempre que o valor do bitcoin muda, mantendo o
valor atualizado ao usuário

Por fim, os dados são enviados do backend ao front por meio desta função:

Figura 6: Função POST para envio dos dados da API da Binance

4.4. Desenvolvimento do serviço de mensageria (Telegram)

Foi desenvolvido um bot para o Telegram que se comunica com o front-end e


com os dados inseridos pelo usuário. Após o usuário enviar uma mensagem ao bot
ele responde com a informações do front-end com o valor do bitcoin.
Figura 7: Função de envio de Notificações via Telegram

A função acima é responsável pelo envio da mensagem ao Telegram por


meio da biblioteca Telegram Bot. Como cada usuário do app possui um chat id,
precisa-se ter este registrado no código para que possamos enviar a notificação.
Para isso, necessita-se coletar o chat id dos usuários que enviem mensagem
ao nosso bot:

Figura 8: Código que recebe a notificação de recebimento da mensagem e


extrair o chat id
Assim, cada vez que o usuário enviar uma mensagem ao bot ele o informa
como demonstrado abaixo:

Figura 9: Notificação do Telegram

5. Resultados
Após toda essa implementação e comunicação estabelecida entre o
front-end, arduino e o telegram, é esperado que o usuário tenha acesso às
informações do bitcoin de forma mais prática. No momento, a aplicação se
encontra em processo de desenvolvimento, onde as seguintes funções já
estão em funcionamento: Estabelecer preço mínimo da moeda, envio da
mensagem aos usuários participantes e ativação do led ao ser atingido o
preço alvo do ativo.
Como funções pendentes, ainda devem ser desenvolvidas e aplicadas
as seguintes: Adicionar botões de compra/venda no front-end da aplicação,
criação de um banco de dados para armazenar os dados de usuários
cadastrados e seus respectivos lançamentos para cada ativo, implementar
um led RGB e um buzzer no arduino para garantir um aviso personalizado
para cada moeda, além de um aviso sonoro para o usuário.
Durante o desenvolvimento do projeto, até o momento, foram
encontrados alguns problemas. Um dos possíveis problemas, o qual está
sendo analisado, aconteceria pelo excesso de chamadas ao bot do telegram,
onde interações em demasiado iria bloquear o bot de ser acessado. Outro
problema, este resolvido por ora, foi identificado ao receber um erro de portas
ao tentar utilizar o arduino no laptop. Ao conectar o arduino à porta USB do
notebook, o terminal informa a impossibilidade de utilizar a porta. Para
solucionar o erro, foi-se necessário fechar e abrir a porta em tempo de
aplicação para garantir a disponibilidade desta para uso.

Figura 10: Solução para erro no acesso à portas

Você também pode gostar