Preço do Nano (XNO) no OLED com Lolin D1 Mini Pro

ESP8266 Lolin D1 Mini Pro mostrando o preço do Nano (XNO) em um OLED

Se você gosta de acompanhar o preço do Nano (XNO) em tempo real e tem um Lolin D1 Mini Pro (ESP8266), este projeto é para você! Vamos utilizar um display OLED e a API do CoinGecko para exibir o valor do Nano em reais (BRL).

Este guia cobre desde a conexão ao Wi-Fi até a integração com a API, usando a biblioteca ArduinoJson para processar os dados e o U8g2 para exibir as informações no display.

Componentes Necessários

  • Lolin D1 Mini Pro (ESP8266)
  • Display OLED 64×48 I2C
  • Jumpers para conexão
  • Arduino IDE configurado para ESP8266

Biblioteca Necessárias

Antes de iniciar, instale as seguintes bibliotecas no Gerenciador de Bibliotecas do Arduino:

  • ESP8266WiFi
  • ESP8266HTTPClient
  • WiFiClientSecure
  • ArduinoJson
  • U8g2

Esquema de Ligação

Conecte o display OLED ao ESP8266 conforme o esquema abaixo:

Display OLED (I2C)ESP8266 (Lolin D1 Mini Pro)
VCC3V3
GNDGND
SCLD1 (GPIO5)
SDAD2 (GPIO4)

Código Completo

Aqui está o código que faz a conexão com o Wi-Fi, busca o preço do Nano (XNO) e exibe o valor no display OLED:

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClientSecure.h>
#include <ArduinoJson.h>
#include <Wire.h>
#include <U8g2lib.h>

// Inicializa o display OLED 64x48 via I2C
U8G2_SSD1306_64X48_ER_F_SW_I2C u8g2(U8G2_R0, 5, 4, U8X8_PIN_NONE);

// Credenciais do Wi-Fi
const char* ssid = "Nome do Wi-Fi";
const char* password = "Senha do Wi-Fi";

// URL da API do preço do Nano (BRL)
const char* apiUrl = "https://api.coingecko.com/api/v3/simple/price?ids=nano&vs_currencies=brl";

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);

  Serial.print("Conectando ao Wi-Fi");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nConectado ao Wi-Fi!");

  Serial.print("Endereço IP: ");
  Serial.println(WiFi.localIP());  // Exibe o IP local do ESP8266

  // Inicializa o display OLED
  u8g2.begin();
  u8g2.enableUTF8Print();

  // Mostra a animação de carregamento antes de buscar o preço
  showLoadingAnimation();

  // Busca e exibe o preço do Nano
  fetchNanoPrice();
}

// Função para exibir a animação de carregamento com pontos na linha abaixo
void showLoadingAnimation() {
  u8g2.setFont(u8g2_font_5x7_tf);

  for (int i = 0; i < 6; i++) {  
    u8g2.clearBuffer();
    u8g2.setCursor(5, 29);
    u8g2.print("Conectando");  // Primeira linha: "Conectando"

    u8g2.setCursor(8, 40);  // Segunda linha: os pontos abaixo
    for (int j = 0; j < i; j++) {  
      u8g2.print(". ");
    }

    u8g2.sendBuffer();
    delay(500);  // Atraso antes de aparecer o próximo ponto
  }
}

// Função para buscar o preço do Nano na API
void fetchNanoPrice() {
  if (WiFi.status() == WL_CONNECTED) {
    WiFiClientSecure client;
    client.setInsecure();  // Ignora a verificação SSL

    HTTPClient http;
    Serial.println("Conectando à API...");
    http.begin(client, apiUrl);

    int httpCode = http.GET();
    Serial.print("Código de resposta HTTP: ");
    Serial.println(httpCode);

    if (httpCode > 0) {
      String payload = http.getString();
      Serial.println("Resposta: " + payload);

      // Faz o parsing do JSON recebido
      DynamicJsonDocument doc(1024);
      deserializeJson(doc, payload);
      float nanoPrice = doc["nano"]["brl"];

      // Exibe o preço do Nano no OLED
      u8g2.clearBuffer();
      u8g2.setFont(u8g2_font_6x12_tf);
      u8g2.setCursor(5, 29);
      u8g2.print("Nano XNO");
      u8g2.setCursor(5, 43);
      u8g2.print("R$");
      u8g2.print(nanoPrice, 2);
      u8g2.sendBuffer();

      Serial.print("Preço do Nano (BRL): R$");
      Serial.println(nanoPrice);
    } else {
      Serial.print("Erro HTTP: ");
      Serial.println(httpCode);
    }

    http.end();
  } else {
    Serial.println("Wi-Fi desconectado!");
  }
}

void loop() {
  fetchNanoPrice();
  delay(30000);  // Atualiza o preço a cada 30 segundos
}

Explicação do Código

  1. Conexão Wi-Fi: O ESP8266 se conecta à rede Wi-Fi usando o SSID e senha definidos.
  2. Animação de Carregamento: Antes de buscar os dados, o display mostra uma animação com pontos.
  3. Requisição à API: O ESP8266 faz uma conexão segura via WiFiClientSecure para ignorar SSL e obter os dados do CoinGecko.
  4. Processamento do JSON: O código usa ArduinoJson para extrair o valor do Nano em BRL.
  5. Exibição no OLED: O preço atualizado aparece no display em um formato fácil de ler.
  6. Loop com Atualização: A cada 30 segundos, o preço é atualizado automaticamente.

Resultado Final

Ao carregar o código no ESP8266, o display OLED exibirá o preço do Nano (XNO) em reais (BRL) atualizado a cada 30 segundos.

Related Posts

Deixe um comentário