Recents in Beach


Receba o meu conteúdo GRATUITAMENTE


ESSE DISPLAY FUNCIONA SEM ENERGIA!


Pessoal, hoje vou mostrar para você o funcionamento de um ESP32 Display E-Paper. A diferença dele pro LCD ou Oled, por exemplo, é que ele foi concebido para não gastar nenhuma energia. Ou seja, ele exibe a imagem que você escolher enquanto está desligado. Isso significa que ele é totalmente útil para a Internet das Coisas. O modelo que usei no vídeo é da TTGO, na versão 1.3, mas já existem versões mais novas.





ESP32 Display E-Paper

Além do poderoso ESP32, essa placa possui saída para antena WiFi externa e antena Bluetooh.



TTGO T5 V2.2 ESP32 2.9 "E-Paper Plus Módulo e Tinta-Alto-falantes



TTGO T5 V1.3 ESP32 E-Paper Plus Module


TTGO T5 V1.3 ESP32 E-Paper Plus Module


E-Paper-v1_3_IP5306-Injoinic.pdf (Em chinês): 




Bitmap Monocromático

Abra a imagem que você deseja no Paint e escolha salvar como BMP



Na janela que abrir escolha a opção Bitmap monocromático e clique em salvar





Image2Lcd

Baixe o programa Image2Lcd aqui: https://www.waveshare.com/wiki/File:Image2Lcd.7z
Configure como na imagem, menos as dimensões, estas devem ser iguais aos da imagem que você quer usar.


Após colocar a largura e altura clique no seta à direita dos valores da dimensão


Clique no botão “Save” e dê um nome ao arquivo que será gerado. Nesse caso vamos chamar de logo.h. Salve o arquivo na mesma pasta que o arquivo .ino que for usar.





Biblioteca GxEPD2

Na IDE do Arduino vá em Sketch->Incluir Biblioteca->Gerenciar Bibliotecas...
Instale GxEPD2





Código

ESP32_Display_ePaper.ino 

#include <GxEPD2_BW.h>
#include <Fonts/FreeMonoBold9pt7b.h>
#include "logo.h"

//Largura e altura do logo, altere pelos valores de sua imagem
#define LOGO_WIDTH 233
#define LOGO_HEIGHT 96

//Objeto responsável por controlar o display
GxEPD2_BW display(GxEPD2_290(/*CS=*/ 5, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 4));

//Mensagens que irão aparecer na parte de baixo do display
const char message1[] = "Fernando K. Tecnologia";
const char message2[] = "Visite o blog";
const char message3[] = "fernandok.com";



ESP32_Display_ePaper.ino - setup

void setup()
{
  //Inicializa o display
  display.init(115200);
  //Rotaciona o display
  display.setRotation(1);
  //Mostra o logo
  showLogo();
  //Espera 2 segundos
  delay(2000);
  //Mostra as mensagens
  showMessages();
  //Tira a energia do display
  display.powerOff();
}



ESP32_Display_ePaper.ino - showLogo

void showLogo()
{
  //Reseta de volta para o começo da tela
  display.firstPage();
  do
  {
    //Limpa a tela com fundo branco
    display.fillScreen(GxEPD_WHITE);
    //Calcula a posição x do logo para ficar centralizado
    int16_t x = (display.width() - LOGO_WIDTH) / 2;
    //Calcula a posição y do logo para ficar centralizado
    int16_t y = (display.height() - LOGO_HEIGHT) / 2;
    //Desenha o logo no centro da tela com a cor preta
    //Coloque o mesmo nome da variável que está no logo.h (no caso gImage_logo)
    display.drawBitmap(x, y, gImage_logo, LOGO_WIDTH, LOGO_HEIGHT, GxEPD_BLACK);
  }
  while (display.nextPage()); //Renderiza cada parte da tela até o fim
}



ESP32_Display_ePaper.ino - showLogo

void showMessages()
{
  //Modifica a fonte
  display.setFont(&FreeMonoBold9pt7b);
  //Coloca a cor do texto como preta
  display.setTextColor(GxEPD_BLACK);
  //Manda o display trabalhar apenas com a área abaixo, sem modificar o resto da tela
  display.setPartialWindow(0, display.height() - 15, display.width(), 15);
  //Mostra as mensagens com 2seg de espera entre cada
  showMessage(message1);
  delay(2000);
  showMessage(message2);
  delay(2000);
  showMessage(message3);

  //Manda o display trabalhar de novo com a tela inteira
  display.setFullWindow();
}



ESP32_Display_ePaper.ino - showMessage

void showMessage(const char* message)
{
  //Variáveis que guardarão posição e dimensão do texto
  int16_t textBoundX, textBoundY; 
  uint16_t textBoundWidth, textBoundHeight;
  //Calcula o tamanho do texto
  //Só precisamos do tamanho, a posição vamos calcular de acordo com a largura,
  //então vamos passar a posição 0, 0
  display.getTextBounds(message, 0, 0, &textBoundX, &textBoundY, &textBoundWidth, &textBoundHeight);
  //Calcula a posição do texto
  int16_t cursorX = (display.width() - textBoundWidth) / 2;
  int16_t cursorY = display.height() - 5;
  
  //Reseta de volta para o começo da tela
  display.firstPage();
  do
  {
    //Limpa a tela com fundo branco
    display.fillScreen(GxEPD_WHITE);
    //Posiciona o cursor de texto
    display.setCursor(cursorX, cursorY);
    //Escreve o texto
    display.print(message);
  }
  while (display.nextPage()); //Renderiza cada parte da tela até o fim
}



ESP32_Display_ePaper.ino - loop

void loop(){
}





FAÇA O DOWNLOAD DOS ARQUIVOS:





Postar um comentário

1 Comentários

  1. Dei Pause no video quando diz para fortalecer a comunidade do Fórum. Concordo Fernando.
    mas esta complicado se manter ativo no Fórum. essa situação de aguardar aprovação de moderadores.
    acaba com a interatividade do Fórum. e no próprio Telegram já fiz enquetes e todos os ativos reclamam do Fórum, demora para aprovar mensagens, e com isso Poucas ou quase nenhuma interação,
    Desativa isso, põe um botão "Denunciar" ou "Reportar" sei lá, no que é enviado, e se algo foge dos padrões de regras é reportado e os moderadores excluem, removem, etc... mas aguardar quase uma semana para ser aprovado uma resposta de um Tópico esta matando o Fórum.

    ResponderExcluir