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.