Pequeno display OLED 0,49 polegadas

Posted by

Hoje vou apresentar a vocês um minúsculo display OLED de 0,49″, algo que encontrei no Aliexpress (link aqui) e resolvi ver se vale a pena. Ele se comunica via i2c com qualquer microcontrolador, além de ser necessário apenas alimentá-lo com 3,3V.

Display OLED 0,49 polegadas
Display OLED 0,49 polegadas

Sua resolução é 64×32 pixels, o meu é somente a cor branca (há opções com Amarelo+Azul, somente azul e somente amarelo. Ele é realmente pequeno e sua biblioteca tem muitas fontes disponíveis. Você pode encontrar um bom tutorial de ponto de partida aqui e todas as fontes aqui.

Conexões (hardware)

Conforme dito acima, há necessidade de apenas quatro conexões, i2c (SDA e SCL/SCK), GND e 3V3. Abaixo você pode vê-lo conectado a uma placa de circuito ESP32-C3 que eu fiz. Há também um termistor NTC de 10k Ohm em série com um resistor de 10k Ohm, conectado à entrada analógica A3.

Aqui está o pinout e o guia do ESP32-C3 mini para referência.

Conexões elétricas do display OLED 0,49 polegadas
Conexões elétricas do display OLED 0,49 polegadas
Display OLED em uma protoboard com o ESP32-C3
Display OLED em uma protoboard com o ESP32-C3
Display OLED 0,49 polegadas em protoboard
Display OLED 0,49 polegadas em protoboard

Software e testes

Implementaremos dois testes para este pequeno display, um mostrando apenas texto (várias linhas) e o outro mostrando a temperatura em graus Celsius lida de um termistor NTC. Para isso, você precisará de uma biblioteca chamada u8G2, instalada no IDE do Arduino. Estou usando a versão 2.2.x do IDE.

Para instalar a biblioteca necessária, no IDE do Arduino vá em “Sketch > Include library > Manage library ..” e digite “u8g2”, instale o do “Oliver”. Agora cole o código abaixo no IDE, compile e carregue no seu Arduino.

// Display - https://pmdway.com/collections/oled-displays/products/0-49-64-x-32-white-graphic-oled-i2c
// Guide - https://pmdway.com/blogs/product-guides-for-arduino/tutorial-using-the-0-49-64-x-32-graphic-i2c-oled-display-with-arduino

#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>

U8G2_SSD1306_64X32_1F_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

void setup() {
  u8g2.begin();
}

// fonts https://github.com/olikraus/u8g2/wiki/fntlistall#4-pixel-height

void loop()
{
  u8g2.clearBuffer();					// clear the internal memory
  u8g2.setFont(u8g2_font_u8glib_4_tf);	// choose a suitable font
  u8g2.drawStr(0, 5, "Hello,");	 // write something to the internal memory
  u8g2.drawStr(0, 10, "World...");
  u8g2.drawStr(0, 15, "I'm tiny...");
  u8g2.drawStr(0, 20, "So tiny!");
  u8g2.drawStr(0, 25, "However you can");
  u8g2.drawStr(0, 30, "have six lines");
  u8g2.sendBuffer();					// transfer internal memory to the display
  delay(1000);

  u8g2.clearBuffer();          // clear the internal memory
  u8g2.setFont(u8g2_font_t0_11_tf);  // choose a suitable font
  u8g2.drawStr(0, 10, "Hello,");  // write something to the internal memory
  u8g2.drawStr(0, 20, "World...");
  u8g2.drawStr(0, 30, "I'm tiny...");
  u8g2.sendBuffer();          // transfer internal memory to the display
  delay(1000);

  u8g2.clearBuffer();          // clear the internal memory
  u8g2.setFont(u8g2_font_tenstamps_mf);  // choose a suitable font
  u8g2.drawStr(0, 12, "ABCD");  // write something to the internal memory
  u8g2.drawStr(0, 30, "1234");
  u8g2.sendBuffer();          // transfer internal memory to the display
  delay(1000);

  for (int a = 999; a >= 0; --a)
  {
    u8g2.clearBuffer();          // clear the internal memory
    u8g2.setFont(u8g2_font_inb24_mr );  // choose a suitable font
    u8g2.setCursor(0, 24);
    u8g2.print(a);
    a = a - 47;
    u8g2.sendBuffer();          // transfer internal memory to the display
    delay(100);
  }
  delay(1000);
}

É um código de demonstração que encontrei aqui, mostrando diferentes fontes e variáveis ​​sendo impressas na tela. Então eu mesmo fiz um código de demonstração, um que lê a temperatura de um termistor NTC e mostra na tela a cada um segundo. Você pode encontrá-lo abaixo.

#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>

U8G2_SSD1306_64X32_1F_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

// Conexão do termistor
const int pinTermistor = A3;
 
// Parâmetros do termistor
const double beta = 4000.0;
const double r0 = 10000.0;
const double t0 = 273.0 + 25.0;
const double rx = r0 * exp(-beta/t0);
 
// Parâmetros do circuito
const double vcc = 3.3;
const double R = 10000.0;
 
// Numero de amostras na leitura
const int nAmostras = 5;

void setup(){
  u8g2.begin();
    
}
void loop(){

  int soma = 0;
  for (int i = 0; i < nAmostras; i++) {
    soma += analogRead(pinTermistor);
    delay (100);
  }
 
  // Determina a resistência do termistor
  double v = (vcc*soma)/(nAmostras*4096.0);
  double rt = (vcc*R)/v - R;
 
  // Calcula a temperatura
  double t = beta / log(rt/rx);
  t= t-273;

  u8g2.clearBuffer();					// clear the internal memory
  //u8g2.setFont(u8g2_font_9x18_mn);	// choose a suitable font
  u8g2.setFont(u8g2_font_t0_17_tn);
  //u8g2.drawStr(0, 5, "Hello,");	 // write something to the internal memory
  //u8g2.drawStr(15, 5, "World...");
  //u8g2.drawStr(0, 15, "I'm tiny...");
  u8g2.setCursor(0, 20);
  u8g2.drawStr(40, 20, "C");
  u8g2.print(t);
  
  
  u8g2.sendBuffer();					// transfer internal memory to the display
  delay(1000);  
  
}

Ele utiliza a entrada analógica A3 da placa ESP32-C3, lendo-a e aplicando uma equação para obter a temperatura diretamente em graus Celsius.

Vendo como funciona, vídeo

Fiz um vídeo para você ver os dois códigos acima em ação, ilustrando como imprimir texto e variáveis ​​alternadamente na pequena tela de 0,49″.

Quer conhecer mais displays OLED? veja este artigo.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *