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_BWdisplay(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(){
}












1 Comentários
Dei Pause no video quando diz para fortalecer a comunidade do Fórum. Concordo Fernando.
ResponderExcluirmas 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.