Utilizando o ESP32-C3 em conjunto com o display OLED para exibir imagens

05/10/2023 09:37 Comentário(s) Por Carlos Korovsky

No tutorial de hoje vamos mostrar como usar o ESP32-C3 em conjunto com o display OLED para exibir imagens.


Materiais utilizados:

1. ESP32-C3 (UKT-ESP32C3-DEV-MINI-USB) - (Onde comprar)

2. Display LCD (128x32);

3. Jumper’s ou fios.


Esquemático:

Bibliotecas Arduíno utilizadas:

  • SSD1306 by Adafruit.

E dependências das respectivas bibliotecas acima.


Seleção da placa na Arduíno IDE:

Selecionamos o módulo ESP32C3.


Código:

#include "Adafruit_SSD1306.h"

// Define o tamanho do display OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32

const unsigned char uktech_negativo_branco [] PROGMEM = {
	// 'uktech_negativo_branco, 128x32px
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x70, 0x3d, 0xe0, 0xff, 0xfe, 0xff, 0xe0, 0xfc, 0x1c, 0x0e, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x70, 0x3d, 0xe1, 0xff, 0xfe, 0xff, 0xe3, 0xff, 0x3c, 0x1e, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x70, 0x3d, 0xe3, 0xff, 0xfe, 0xff, 0xe7, 0xff, 0xbc, 0x1e, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x70, 0x3d, 0xe7, 0x81, 0xe0, 0xf0, 0x0f, 0xcf, 0xbc, 0x1e, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x70, 0x3d, 0xef, 0x01, 0xe0, 0xf0, 0x0f, 0x02, 0x3c, 0x1e, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x70, 0x3d, 0xfe, 0x01, 0xe0, 0xf0, 0x1e, 0x00, 0x3c, 0x1e, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x70, 0x3d, 0xfe, 0x01, 0xe0, 0xff, 0xde, 0x00, 0x3f, 0xfe, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x70, 0x3d, 0xfe, 0x01, 0xe0, 0xff, 0xde, 0x00, 0x3f, 0xfe, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x70, 0x3d, 0xff, 0x01, 0xe0, 0xff, 0xde, 0x00, 0x3f, 0xfe, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x78, 0x3d, 0xe7, 0x81, 0xe0, 0xf0, 0x1e, 0x00, 0x3c, 0x1e, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x78, 0x3d, 0xe3, 0xc1, 0xe0, 0xf0, 0x0f, 0x03, 0xbc, 0x1e, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x3c, 0x79, 0xe3, 0xc1, 0xe0, 0xff, 0xef, 0xcf, 0xbc, 0x1e, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x3f, 0xf9, 0xe1, 0xe1, 0xe0, 0xff, 0xe7, 0xff, 0xbc, 0x1e, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x1f, 0xf1, 0xe0, 0xf1, 0xe0, 0xff, 0xe3, 0xff, 0x3c, 0x1e, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x0f, 0xc1, 0xe0, 0xf9, 0xe0, 0xff, 0xe0, 0xfc, 0x3c, 0x1e, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x20, 0x20, 0x1c, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x13, 0x24, 0xb2, 0xe8, 0x89, 0x2c, 0xa9, 0x88, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x12, 0xcf, 0x6a, 0xad, 0xcb, 0xc9, 0x76, 0x98, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x1a, 0x6d, 0x6e, 0xbd, 0xcb, 0xe9, 0xad, 0x98, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);


void setup() {
  //Velocidade do monitor serial
  Serial.begin(115200);
  // Pinos do barramento I2C
  Wire.begin(18, 19);

   // Verifica estado de inicialização do display, acusa falha em caso de erro
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0, false, true)) {
    Serial.println(F("Falha ao inicializar o SSD1306"));
    for (;;)
      ;
  }

}

void loop() {
display.clearDisplay();
  display.drawBitmap(0, 0, uktech_negativo_branco, 128, 32, SSD1306_WHITE); // Draw the bitmap
  display.display(); // Show the image on the display
  delay(1000); // Pause for 1 second

}

Onde o vetor uktech_negativo_branco[] foi gerado a partir da seguinte imagem.

Como obter o vetor de bytes a partir de uma imagem: 

Basta utilizar algum das ferramentas abaixo:

Resultado:

Sobre o autor:

Matheus Ernan Reichert

Matheus desempenha o papel de desenvolvedor de sistemas de tecnologia da informação dentro da equipe da UKTech. Possui experiência no domínio de micro controladores e desenvolvimento de software, e está na reta final de sua graduação em Engenharia de Computação. Em seus momentos de lazer, ele se dedica a interesses como jogos de computador e a apreciação de animes.

Partilhar -