Manual

do

Maker

.

com

Display 128x64 com Arduino utilizando u8g2 lib

Display 128x64 com Arduino utilizando u8g2 lib

Há alguns anos não era tão simples configurar um display em Arduino sem um bocado de código e a leitura do datasheet. Mas os tempos mudam, e sempre para melhor. Com o aprimoramento e entrada de novos programadores na área de embarcados, acabamos absorvendo novos recursos, como por exemplo, a u8g2 ou u8glib. Veja só que interessante, uma biblioteca que tende a abstrair a camada de comunicação entre o display e a microcontroladora de forma que você apenas precisa definir alguns parâmetros e começar a utilizar. Veremos nesse artigo como fazer uma configuração básica do display 128x64 com Arduino e imprimir alguns exemplos na tela para, posteriormente, fazermos algumas brincadeiras mais avançadas com esse display em outra plataforma.

Display 128x64 com Arduino Leonardo

A melhor plataforma para resultados rápidos hoje em dia é sem dúvida o Arduino. Tem biblioteca pra tudo praticamente, coisa que o torna bastante flexível para brincadeiras e projetos rápidos. Por isso estou iniciando a série de artigos com esse display pelo Arduino Leonardo.

O Arduino Leonardo não é tão popular e não consigo imaginar qual a razão disso. Ele possui 2 seriais, sendo uma delas a serial que vai para a USB e a outra, a serial dos pinos 0 e 1. Isso é ótimo para flexibilizar a comunicação entre duas MCUs via serial com direito a debug pela USB. Mas não espero convencê-lo a ter um Arduino Leonardo, apesar de eu gostar dele mais do que de um Arduino UNO. Em relação ao pinout, não há com o que se preocupar, uma vez que ele é basicamente o mesmo que o Arduino UNO, com excessão do I2C. No Arduino Leonardo o I2C está disposto ao final dos GPIO digital, um pouco acima do pino 13.

Wiring

display_128x64-wiring.webp

Instalar a biblioteca u8g2 e U8glib

Essas bibliotecas estão disponíveis pelo próprio gerenciador de bibliotecas da  IDE do Arduino. Vá  ao  menu  Sketch > Include Library > Manage Librariese procure por u8g. Entre as opções, as supracitadas estarão contidas. Se desejar, já instale as relacionadas à criação de menus. Após instaladas, estarão disponíveis para uso de imediato.

Como selecionar o display?

Abra um dos exemplos para pegar as referências. Os exemplos estão disponíveis em File > Examples > u8glib . Logo pelo começo do artigo você verá montes de linhas comentadas. entre elas, você deve escolher o seu display e descomentá-la. Se tiver dúvidas, acesse esse link com a descrição  dos modelos em tabelas, desse modo não restará dúvidas.

Quais os recursos oferecidos pela biblioteca u8glib?

Essa biblioteca tem uma quantidade considerável de recursos, não vou descrevê-las todas aqui. Invés disso, deixo o link de referências da biblioteca, que você encontra através desse link. O manual de referências está em inglês, mas tudo o que você precisa atentar-se é ao exemplo do método, que é bastante simples.

Exemplo de uso

Estou disponibilizando um exemplo bem básico para demonstrar a utilização de alguns dos recursos e demonstrar como inicializar o display. Do jeito que está, ele desloca as formas primitivas da imagem de destaque desse artigo, da esquerda para a direita.

#include "U8glib.h"  

//instancia da classe especifica do  display 126x64
U8GLIB_ST7920_128X64_1X u8g(6, 5, 4 ,7); //Enable, RW, RS, RESET   

char bb[] = "Do bit Ao  Byte\0";

char shifting = 0;

void startParams(){
    u8g.setFont(u8g_font_6x10);  
    u8g.setFontRefHeightExtendedText();  
    u8g.setDefaultForegroundColor();  
    u8g.setFontPosTop();
}

void dStr(int posX,int posY,char *myStr){
    u8g.setFont(u8g_font_unifont);  
    u8g.drawStr( posX, posY, myStr);
}

void dFrame(int startX, int startY, int endX, int  endY){
    u8g.drawFrame(startX,startY,endX,endY);
}

void dCicle(int posX, int posY, int cicleSize){
  u8g.drawCircle(posX,posY,cicleSize);
}

void draw(){
    startParams();
    dStr(5,10,bb);
    dFrame(0,0,128,64);
    dFrame(0,0,128,12);
    dCicle(shifting,30,10);  
    dFrame(shifting+20,20, 20,20);
    u8g.drawTriangle(shifting+60,20, shifting+65,30, shifting+60,42);
}

void displaySetup(){ 
  if (u8g.getMode()== U8G_MODE_R3G3B2){  
     u8g.setColorIndex(255);
  }
  else if (u8g.getMode()==U8G_MODE_GRAY2BIT){  
     u8g.setColorIndex(1);
  }
  else if (u8g.getMode()==U8G_MODE_BW){
     u8g.setColorIndex(1);
  }
}

void setup() {
  displaySetup();
}

void loop() {
  u8g.firstPage();
  do{
      draw();
      shifting = shifting > 120 ? 0 : shifting + 1;
  }
  while(u8g.nextPage());
  delay(500);
}

 

Outros artigos relacionados a display

Aproveito para deixar algumas sugestões de artigos relacionados a outros displays:

Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.