O código Python é uma aplicação Flask que utiliza a biblioteca Flask para criar um servidor web. Ele recebe solicitações GET e retorna informações sobre o saldo de uma conta bancária. Abaixo estão as explicações dos principais pontos do código:
-
Importação de bibliotecas:
from flask import Flask, request: Importa a classe Flask e o objeto request da biblioteca Flask. Essas bibliotecas são usadas para criar o servidor web e processar as solicitações HTTP.
-
Definição das variáveis:
app = Flask(__name__): Cria uma instância da classe Flask para iniciar o servidor.url_banco = "https://www.asaas.com/api/v3/finance/balance": Define a URL da API que será utilizada para obter o saldo bancário.headers: Define os cabeçalhos da solicitação HTTP, incluindo o token de acesso necessário para autenticação.prev = [2]: Cria uma lista para armazenar os saldos anteriores.
-
Rota e função principal:
@app.route("/", methods=['POST', 'GET']): Define a rota principal do servidor. Aceita solicitações GET e POST.def enviar(): Função que será executada quando uma solicitação for feita para a rota principal.if request.method == "GET":: Verifica se a solicitação é do tipo GET.response = requests.get(url_banco, headers=headers): Faz uma solicitação GET para a URL da API para obter o saldo bancário.real = json.loads(response.text): Converte a resposta em um objeto JSON.js = real['balance']: Obtém o saldo da conta bancária a partir do objeto JSON.if js not in prev:: Verifica se o saldo atual não está presente na lista de saldos anteriores.diferenca = float(js) - float(prev[-1]): Calcula a diferença entre o saldo atual e o saldo anterior.text = f'R${diferenca:.2f} recebido!': Formata uma string com a diferença de saldo.prev.append(js): Adiciona o saldo atual à lista de saldos anteriores.return text: Retorna a diferença de saldo se for a primeira vez que o saldo é recebido, caso contrário, retorna o saldo atual.
-
Execução do servidor:
if __name__ == "__main__":: Verifica se o código está sendo executado diretamente (não importado como módulo).serve(app, host="0.0.0.0", port=8080): Inicia o servidor Flask usando o Waitress como servidor HTTP.
O código Arduino utiliza um microcontrolador ESP8266 para se conectar a uma rede Wi-Fi e fazer uma solicitação HTTPS a uma API. Abaixo estão as explicações dos principais pontos do código:
-
Importação de bibliotecas:
#include <LiquidCrystal_I2C.h>: Importa a biblioteca LiquidCrystal_I2C, que é utilizada para controlar um display LCD de 16x2 através de uma conexão I2C.#include <ESP8266WiFi.h>: Importa a biblioteca ESP8266WiFi, que é responsável por gerenciar a conexão Wi-Fi do ESP8266.#include <ESP8266HTTPClient.h>: Importa a biblioteca ESP8266HTTPClient, que fornece uma interface simplificada para fazer solicitações HTTP.#include <WiFiClientSecureBearSSL.h>: Importa a biblioteca WiFiClientSecureBearSSL, que permite criar uma conexão segura SSL/TLS.
-
Definição das variáveis:
const char* ssid = "wifi_name";: Define o nome da rede Wi-Fi à qual o ESP8266 irá se conectar. Substitua "wifi_name" pelo nome correto da sua rede.const char* password = "wifi_password";: Define a senha da rede Wi-Fi. Substitua "wifi_password" pela senha correta da sua rede.const int lcdColumns = 16;: Define o número de colunas do display LCD.const int lcdRows = 2;: Define o número de linhas do display LCD.LiquidCrystal_I2C lcd(0x3F, lcdColumns, lcdRows);: Cria uma instância da classe LiquidCrystal_I2C para controlar o display LCD.
-
Configuração inicial:
void setup(): Função executada uma vez no início do programa.pinMode(buttonPin, INPUT);: Configura o pino do botão como entrada.lcd.init();: Inicializa o display LCD.lcd.backlight();: Liga o backlight do display LCD.WiFi.mode(WIFI_STA);: Configura o modo de operação do ESP8266 para estação (cliente) Wi-Fi.WiFi.begin(ssid, password);: Inicia a conexão com a rede Wi-Fi utilizando o nome e senha definidos anteriormente.lcd.print("Procurando WI-FI");: Exibe a mensagem "Procurando WI-FI" no display LCD.while (WiFi.waitForConnectResult() != WL_CONNECTED) { delay(1000); }: Aguarda a conexão Wi-Fi ser estabelecida. A funçãoWiFi.waitForConnectResult()retorna quando a conexão é bem-sucedida (retornaWL_CONNECTED) ou ocorre algum erro.
-
Loop principal:
void loop(): Função executada continuamente após a configuração inicial.int buttonState = digitalRead(buttonPin);: Lê o estado do botão.if (WiFi.status() == WL_CONNECTED) {: Verifica se o ESP8266 está conectado à rede Wi-Fi.std::unique_ptr<BearSSL::WiFiClientSecure> client(new BearSSL::WiFiClientSecure);: Cria um objeto client do tipo WiFiClientSecureBearSSL para estabelecer uma conexão segura com o servidor.client->setInsecure();: Desativa a verificação de certificado SSL, permitindo conexões com servidores sem certificado válido.HTTPClient https;: Cria um objeto https do tipo HTTPClient para fazer a solicitação HTTP.if (https.begin(*client, "your_api")) {: Inicia a solicitação HTTP para a URL da API desejada. Substitua "your_api" pelo endereço correto da API.int httpCode = https.GET();: Realiza uma solicitação GET e armazena o código de status HTTP retornado.if (httpCode > 0) {: Verifica se a solicitação foi bem-sucedida (código de status HTTP maior que zero).if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {: Verifica se o código de status HTTP é OK (200) ou MOVED_PERMANENTLY (301).String payload = https.getString();: Obtém a resposta da solicitação HTTP como uma string.lcd.clear();: Limpa o display LCD.Serial.println(payload);: Imprime a resposta no monitor serial.lcd.setCursor(0, 0);: Define a posição do cursor do display LCD.lcd.print(payload);: Exibe a resposta no display LCD.https.end();: Encerra a conexão HTTP.} else {: Caso não seja possível estabelecer a conexão com o servidor.Serial.printf("[HTTPS] Unable to connect\n");: Exibe uma mensagem de erro no monitor serial.}: Fecha o blocoif (https.begin(*client, "your_api")).}: Fecha o blocoif (WiFi.status() == WL_CONNECTED).
-
Delay:
delay(1000);: Aguarda 1 segundo antes de repetir o loop principal.