Cotação de Bitcoin com ESP32 e display e-Paper

Hoje vamos ver um módulo muito interessante e com inúmeras possibilidades de utilização: o Módulo WiFi ESP32 com Display e-Paper, com tela de 2.13″ e que vamos usar para mostrar a cotação atual de uma famosa criptomoeda, o Bitcoin.

O e-Paper é a tecnologia que procura imitar um papel convencional de forma digital, ou seja, imprimindo eletronicamente textos e imagens que posteriormente podem ser alteradas ou apagadas.

Telas usando o Papel Eletrônico (mais conhecidas como e-Paper ou epaper) estão se tornando cada vez mais comuns e você pode encontrar esse tipo de tela nos populares leitores digitais Kindle ou em etiquetas de supermercados e lojas como essa mostrada na imagem acima.

E qual a vantagem disso? Eu particularmente sou um fã incondicional de livros físicos, mas não podemos negar que a popularização do e-paper pode salvar muitas árvores das quais é extraída a celulose para a produção do papel.

No caso do módulo que vamos ver hoje e que possui conexão WiFi, as informações do display podem ser atualizadas à distância. É o mesmo caso do Kindle que citei anteriormente: livros, revistas e jornais podem ser atualizados remotamente via wifi. Talvez essa facilidade de atualização possa servir para cortarmos menos árvores. 🙂

O módulo WiFi ESP32 com display e-Paper

O módulo que vamos usar é esse da imagem abaixo, com tela de 2.13″ e com as demais características do ESP32, como WiFi e Bluetooth embutidos.

Ele possui 32 pinos e interfaces serial, SPI e I2C, além de conversores analógico/digitais. Possui ainda uma chave liga-desliga, botão RST e um botão conectado na IO39.

Na parte traseira temos leds indicadores, conector para bateria de Lipo, slot para cartão microSD e conector U.Fl para antena externa. O conector microUSB serve tanto para alimentar o módulo como para transferir os programas.

A imagem acima, da Lilygo (fabricante do módulo) mostra de forma geral as conexões da placa.

Instalação das bibliotecas

O ESP32 já vem pré-gravado com algumas imagens e animações de exemplo, mostrando o que é capaz de ser feito com esse display. Neste post vamos mostrar um programa que vai buscar as informações da cotação do Bitcoin na internet e mostrá-las no display e-Paper.

Primeiramente vamos habilitar a IDE do Arduino para incluir placas da linha ESP32. Para isso, entre na IDE do Arduino e depois no menu Arquivo -> Preferências. Na janela de configuração, no campo URLs Adicionais para Gerenciadores de Placas use o seguinte endereço:

https://dl.espressif.com/dl/package_esp32_index.json

Sua tela deve ficar assim:

Depois disso, acesse o menu Ferramentas -> Placa -> Gerenciadores de Placas e procure por “ESP32”, instalando o pacote esp32 by Espressif Systems:

Feito isso, as placas da linha ESP32 devem aparecer no menu Ferramentas -> Placa da IDE do Arduino. Você vai selecionar a primeira da lista, a ESP32 Dev Module:

Não esqueça também de selecionar a porta COM (serial) correspondente a essa placa no menu Ferramentas, ok?

Um detalhe importantíssimo antes de continuar, é sobre a versão da placa. Aqui eu estou usando a TTGO T5 V2.0.

Isso é importante porque existem muitas versões (e hardwares diferentes), então temos a versão T5 V1.2, 2.0, 2.1… assim vai até a versão 2.8. Dependendo da versão, os pinos de conexão da interface SPI e do display e-Paper podem variar.

Assim, se a sua placa não for a versão 2.0, sugiro dar uma olhada neste link, checar a pinagem e realizar as alterações no programa, se necessário.

Para enviar dados para o display e-Paper você vai precisar da biblioteca GxEPD, que vamos instalar a partir da IDE do Arduino.

Acesse o menu Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas. No Gerenciador de Bibliotecas, procure por GXEPD e selecione a biblioteca conforme imagem abaixo clicando em seguida em Instalar:

Faça a mesma coisa com a biblioteca Arduino_Json, que vamos utilizar para buscar os dados da cotação do Bitcoin na internet.

Dúvidas na instalação da biblioteca? Confira o post Como instalar uma biblioteca na IDE Arduino.

Programa cotação de Bitcoin com ESP32 e display e-Paper

Com as bibliotecas instaladas, vamos agora ao programa que vai gerar no display e-Paper a imagem que você viu no começo deste post, com a logo do Bitcoin no lado esquerdo e a cotação (em Reais) no lado direito.

Antes de carregar o programa preencha nas linhas 12 e 13 os dados da rede WiFi na qual o ESP32 vai se conectar para acessar a internet.

Na linha 16 temos a URL de onde vamos buscar esses dados, que são fornecidos em formato Json.

Nas linhas 32 a 39 temos as definições dos pinos que são utilizados pelo display e pela interface SPI. São essas linhas que você irá alterar se o seu módulo ESP32 não for do mesmo modelo que o meu (V2.0).

As linhas 163 a 176 são as responsáveis por acessar a URL definida, baixar os dados no formato Json e depois separar a informação que queremos, no caso, o campo LAST que é a cotação atual do Bitcoin. Para verificar o formato Json que é fornecido pela URL e também as demais informações disponíveis, acesse este link.

Feito o tratamento dos dados, o programa chama a rotina atualiza_epaper(), que mostra as informações atualizadas na tela.

//Programa: Cotacao de Bitcoin com ESP32 e display E-paper
//Autor: Arduino e Cia

#include <WiFi.h>
#include <HTTPClient.h>
#include <Arduino_JSON.h>
#include <GxEPD.h>
#include <SPI.h>
#include <GxGDE0213B1/GxGDE0213B1.h>      // 2.13" b/w

//Dados de acesso WiFi
const char* ssid = "NOME_DA_REDE_WIFI";
const char* password = "SENHA_DA_REDE_WIFI";

//URL de onde serao coletados os dados do Bitcoin
const char* serverName = "https://www.mercadobitcoin.net/api/BTC/ticker/";

//Intervalo entre requisicoes
unsigned long lastTime = 0;
//Seta o intervalo em 5 segundos
unsigned long timerDelay = 5000;

//FreeFonts from Adafruit_GFX
#include <Fonts/FreeMonoBold9pt7b.h>
#include <Fonts/FreeMonoBold12pt7b.h>
#include <Fonts/FreeMonoBold18pt7b.h>
#include <Fonts/FreeMonoBold24pt7b.h>

#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <GxIO/GxIO.h>

#define SPI_MOSI 23
#define SPI_MISO -1
#define SPI_CLK 18

#define ELINK_SS 5
#define ELINK_BUSY 4
#define ELINK_RESET 16 //antes 16
#define ELINK_DC 17 //antes 17

#define BUTTON_PIN 39

GxIO_Class io(SPI, /*CS=5*/ ELINK_SS, /*DC=*/ ELINK_DC, /*RST=*/ ELINK_RESET);
GxEPD_Class display(io, /*RST=*/ ELINK_RESET, /*BUSY=*/ ELINK_BUSY);

SPIClass sdSPI(VSPI);

int startX = 0, startY = 0;
String valor;

//Bitmap - Logo Bitcoin
int bmpWidth = 100, bmpHeight = 93;
const unsigned char bitcoin_logo [] PROGMEM = {
  0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff,
  0xff, 0xfe, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00,
  0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x0f,
  0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff,
  0xf0, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff,
  0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0x80, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0x00, 0x00, 0x3f, 0xff, 0xe0,
  0x00, 0x07, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xfc, 0x00, 0x03, 0xff, 0xff, 0xfc, 0x00, 0x03, 0xff,
  0xff, 0xf0, 0xff, 0xff, 0xf8, 0x00, 0x0f, 0xff, 0xff, 0xff, 0x80, 0x00, 0xff, 0xff, 0xf0, 0xff,
  0xff, 0xf0, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x7f, 0xff, 0xf0, 0xff, 0xff, 0xe0, 0x01,
  0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x3f, 0xff, 0xf0, 0xff, 0xff, 0xc0, 0x03, 0xff, 0xff, 0xff,
  0xff, 0xfe, 0x00, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x80, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
  0x0f, 0xff, 0xf0, 0xff, 0xff, 0x00, 0x1f, 0xff, 0x83, 0xf0, 0x7f, 0xff, 0xc0, 0x07, 0xff, 0xf0,
  0xff, 0xfe, 0x00, 0x3f, 0xff, 0x83, 0xf0, 0x7f, 0xff, 0xe0, 0x03, 0xff, 0xf0, 0xff, 0xfc, 0x00,
  0xff, 0xff, 0x83, 0xf0, 0x7f, 0xff, 0xf0, 0x01, 0xff, 0xf0, 0xff, 0xf8, 0x01, 0xff, 0xff, 0x83,
  0xf0, 0x7f, 0xff, 0xf8, 0x01, 0xff, 0xf0, 0xff, 0xf8, 0x03, 0xff, 0xff, 0x83, 0xf0, 0x7f, 0xff,
  0xfc, 0x00, 0xff, 0xf0, 0xff, 0xf0, 0x07, 0xff, 0xff, 0x83, 0xf0, 0x7f, 0xff, 0xfe, 0x00, 0x7f,
  0xf0, 0xff, 0xe0, 0x07, 0xff, 0xff, 0x83, 0xf0, 0x7f, 0xff, 0xff, 0x00, 0x3f, 0xf0, 0xff, 0xe0,
  0x0f, 0xff, 0xff, 0x83, 0xf0, 0x7f, 0xff, 0xff, 0x80, 0x3f, 0xf0, 0xff, 0xc0, 0x1f, 0xff, 0xff,
  0x83, 0xf0, 0x7f, 0xff, 0xff, 0xc0, 0x1f, 0xf0, 0xff, 0x80, 0x3f, 0xff, 0xff, 0x83, 0xf0, 0x7f,
  0xff, 0xff, 0xc0, 0x1f, 0xf0, 0xff, 0x80, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xe0,
  0x0f, 0xf0, 0xff, 0x00, 0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x0f, 0xf0, 0xff,
  0x00, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xf0, 0x07, 0xf0, 0xff, 0x00, 0xff, 0xf8,
  0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x07, 0xf0, 0xfe, 0x01, 0xff, 0xf8, 0x00, 0x00, 0x00,
  0x00, 0x1f, 0xff, 0xf8, 0x03, 0xf0, 0xfe, 0x01, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff,
  0xfc, 0x03, 0xf0, 0xfc, 0x03, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x07, 0xff, 0xfc, 0x03, 0xf0,
  0xfc, 0x03, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x07, 0xff, 0xfe, 0x01, 0xf0, 0xfc, 0x03, 0xff,
  0xff, 0xe0, 0x03, 0xff, 0x00, 0x03, 0xff, 0xfe, 0x01, 0xf0, 0xf8, 0x07, 0xff, 0xff, 0xe0, 0x03,
  0xff, 0xc0, 0x03, 0xff, 0xfe, 0x01, 0xf0, 0xf8, 0x07, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xe0, 0x03,
  0xff, 0xff, 0x00, 0xf0, 0xf8, 0x07, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xf0, 0x03, 0xff, 0xff, 0x00,
  0xf0, 0xf8, 0x0f, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xf0, 0x03, 0xff, 0xff, 0x00, 0xf0, 0xf8, 0x0f,
  0xff, 0xff, 0xf0, 0x03, 0xff, 0xf0, 0x03, 0xff, 0xff, 0x00, 0xf0, 0xf0, 0x0f, 0xff, 0xff, 0xf0,
  0x03, 0xff, 0xf0, 0x03, 0xff, 0xff, 0x80, 0xf0, 0xf0, 0x0f, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xf0,
  0x03, 0xff, 0xff, 0x80, 0x70, 0xf0, 0x0f, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xe0, 0x03, 0xff, 0xff,
  0x80, 0x70, 0xf0, 0x0f, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xc0, 0x07, 0xff, 0xff, 0x80, 0x70, 0xf0,
  0x0f, 0xff, 0xff, 0xf0, 0x03, 0xff, 0x80, 0x07, 0xff, 0xff, 0x80, 0x70, 0xf0, 0x1f, 0xff, 0xff,
  0xf0, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0x80, 0x70, 0xf0, 0x1f, 0xff, 0xff, 0xf0, 0x00, 0x00,
  0x00, 0x0f, 0xff, 0xff, 0x80, 0x70, 0xf0, 0x1f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x07, 0xff,
  0xff, 0x80, 0x70, 0xf0, 0x1f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x80, 0x70,
  0xf0, 0x1f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0x80, 0x70, 0xf0, 0x0f, 0xff,
  0xff, 0xf0, 0x03, 0xff, 0xe0, 0x01, 0xff, 0xff, 0x80, 0x70, 0xf0, 0x0f, 0xff, 0xff, 0xf0, 0x03,
  0xff, 0xf8, 0x00, 0xff, 0xff, 0x80, 0x70, 0xf0, 0x0f, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xfc, 0x00,
  0xff, 0xff, 0x80, 0x70, 0xf0, 0x0f, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xfc, 0x00, 0x7f, 0xff, 0x80,
  0xf0, 0xf0, 0x0f, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xfe, 0x00, 0x7f, 0xff, 0x80, 0xf0, 0xf8, 0x0f,
  0xff, 0xff, 0xf0, 0x03, 0xff, 0xfe, 0x00, 0x7f, 0xff, 0x00, 0xf0, 0xf8, 0x0f, 0xff, 0xff, 0xf0,
  0x03, 0xff, 0xfe, 0x00, 0x7f, 0xff, 0x00, 0xf0, 0xf8, 0x07, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xfc,
  0x00, 0x7f, 0xff, 0x00, 0xf0, 0xf8, 0x07, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xfc, 0x00, 0x7f, 0xff,
  0x00, 0xf0, 0xf8, 0x07, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xf8, 0x00, 0x7f, 0xfe, 0x01, 0xf0, 0xfc,
  0x03, 0xff, 0xff, 0xe0, 0x03, 0xff, 0xf0, 0x00, 0xff, 0xfe, 0x01, 0xf0, 0xfc, 0x03, 0xff, 0xff,
  0xe0, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x01, 0xf0, 0xfc, 0x03, 0xff, 0xff, 0xc0, 0x00, 0x00,
  0x00, 0x01, 0xff, 0xfc, 0x03, 0xf0, 0xfe, 0x01, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,
  0xfc, 0x03, 0xf0, 0xfe, 0x01, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xf8, 0x03, 0xf0,
  0xff, 0x00, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xf8, 0x07, 0xf0, 0xff, 0x00, 0xff,
  0xfc, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xf0, 0x07, 0xf0, 0xff, 0x00, 0x7f, 0xfc, 0x00, 0x00,
  0x00, 0x00, 0x3f, 0xff, 0xf0, 0x0f, 0xf0, 0xff, 0x80, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0xff,
  0xff, 0xe0, 0x0f, 0xf0, 0xff, 0x80, 0x3f, 0xff, 0xff, 0x83, 0xf0, 0x7f, 0xff, 0xff, 0xc0, 0x1f,
  0xf0, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0x83, 0xf0, 0x7f, 0xff, 0xff, 0xc0, 0x1f, 0xf0, 0xff, 0xe0,
  0x0f, 0xff, 0xff, 0x83, 0xf0, 0x7f, 0xff, 0xff, 0x80, 0x3f, 0xf0, 0xff, 0xe0, 0x07, 0xff, 0xff,
  0x83, 0xf0, 0x7f, 0xff, 0xff, 0x00, 0x3f, 0xf0, 0xff, 0xf0, 0x07, 0xff, 0xff, 0x83, 0xf0, 0x7f,
  0xff, 0xfe, 0x00, 0x7f, 0xf0, 0xff, 0xf8, 0x03, 0xff, 0xff, 0x83, 0xf0, 0x7f, 0xff, 0xfc, 0x00,
  0xff, 0xf0, 0xff, 0xf8, 0x01, 0xff, 0xff, 0x83, 0xf0, 0x7f, 0xff, 0xf8, 0x01, 0xff, 0xf0, 0xff,
  0xfc, 0x00, 0xff, 0xff, 0x83, 0xf0, 0x7f, 0xff, 0xf0, 0x01, 0xff, 0xf0, 0xff, 0xfe, 0x00, 0x3f,
  0xff, 0x83, 0xf0, 0x7f, 0xff, 0xe0, 0x03, 0xff, 0xf0, 0xff, 0xff, 0x00, 0x1f, 0xff, 0x83, 0xf0,
  0x7f, 0xff, 0xc0, 0x07, 0xff, 0xf0, 0xff, 0xff, 0x80, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
  0x0f, 0xff, 0xf0, 0xff, 0xff, 0xc0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x1f, 0xff, 0xf0,
  0xff, 0xff, 0xe0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x3f, 0xff, 0xf0, 0xff, 0xff, 0xf0,
  0x00, 0x7f, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x7f, 0xff, 0xf0, 0xff, 0xff, 0xf8, 0x00, 0x0f, 0xff,
  0xff, 0xff, 0x80, 0x00, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xfc, 0x00, 0x03, 0xff, 0xff, 0xfc, 0x00,
  0x03, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0x00, 0x00, 0x3f, 0xff, 0xe0, 0x00, 0x07, 0xff, 0xff,
  0xf0, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0xff, 0xff,
  0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xf0, 0x00,
  0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00,
  0x03, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff,
  0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xf0, 0xff,
  0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff,
  0xff, 0xf0, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xf0
};

void setup()
{
  Serial.begin(115200);
  SPI.begin(SPI_CLK, SPI_MISO, SPI_MOSI, ELINK_SS);

  //Parametros iniciais do display
  display.init();
  display.eraseDisplay();
  display.setRotation(1);
  display.fillScreen(GxEPD_WHITE);
  display.setTextColor(GxEPD_BLACK);

  //Inicializa a conexao WiFi
  WiFi.begin(ssid, password);
  Serial.println("Conectando");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Conectado na rede WiFi com o endereco IP: ");
  Serial.println(WiFi.localIP());
}

void loop()
{
  //Envia o HTTP request no tempo estabelecido
  if ((millis() - lastTime) > timerDelay) {
    //Verifica o status da conexao Wifi
    if (WiFi.status() == WL_CONNECTED) {

      String dados_cotacao = httpGETRequest(serverName);
      JSONVar myObject = JSON.parse(dados_cotacao);

      //Verifica se o formato recebido e valido
      if (JSON.typeof(myObject) == "undefined") {
        Serial.println("Parsing input failed!");
        return;
      }

      //Extrai o valor da ultima cotacao do Json e armazena na variavel valor
      valor = ((const char*) (myObject["ticker"]["last"]));
      valor.remove(9);
      Serial.print("Valor do Bitcoin = ");
      Serial.println(valor);
      
      //Chama a rotina que atualiza o display
      atualiza_epaper();
    }
    else {
      Serial.println("WiFi Desconectado");
    }
    lastTime = millis();
  }
}

String httpGETRequest(const char* serverName)
{
  HTTPClient http;
  // Your IP address with path or Domain name with URL path
  http.begin(serverName);
  // Send HTTP POST request
  int httpResponseCode = http.GET();
  String payload = "{}";
  if (httpResponseCode > 0) {
    Serial.print("HTTP Response code: ");
    Serial.println(httpResponseCode);
    payload = http.getString();
  }
  else {
    Serial.print("Error code: ");
    Serial.println(httpResponseCode);
  }
  // Free resources
  http.end();

  return payload;
}

void atualiza_epaper()
{
  //Seta cor do texto e fonte
  display.setTextColor(GxEPD_BLACK);
  display.setFont(&FreeMonoBold12pt7b);
  //Atualizacao dos dados no e-paper
  display.updateWindow(0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, false);
  display.fillRect(115, 65, 130, 30, GxEPD_WHITE);
  //Mostra o logo do Bitcoin
  display.drawBitmap(bitcoin_logo, 8, 15,  bmpWidth, bmpHeight, GxEPD_WHITE);
  //Posiciona o cursor e mostra a cotacao na tela
  display.setCursor(170, 55);
  display.println("R$");
  display.setCursor(115, 85);
  display.println(valor);
  display.updateWindow(115, 65, 130, 30 , true);
}

Você pode acompanhar também todo o processo no serial monitor.

Essa foi uma parte muito pequena de tudo que é possível fazer com o módulo ESP32 e display e-Paper. Em um próximo post vamos mostrar como você pode alterar remotamente as informações mostradas na tela.

Gostou? Confira outros posts usando ESP32 aqui mesmo no Arduino e Cia!

Avalie este post!

Related posts

Programe o módulo bluetooth HC-05 com conversor FTDI

by Arduino e Cia
9 anos ago

Diferença entre os módulos bluetooth HC-05 e HC-06

by Arduino e Cia
10 anos ago

Como usar o módulo GSM SIM808 com Raspberry Pi

by Arduino e Cia
4 anos ago
Sair da versão mobile