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 128×64 com Arduino e imprimir alguns exemplos na tela para, posteriormente, fazermos algumas brincadeiras mais avançadas com esse display em outra plataforma.
Tópicos
Display 128×64 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

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 Libraries e 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
#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:
- Display 16×2 com Arduino e PCF8574
- Display OLED 128×64
- Display LCD com Arduino
- Multiplexação com shift register 74HC595 para display de 7 segmentos
- LCD Nokia 5110
Inscreva-se no nosso newsletter, alí em cima à direita e receba novos posts por email.
Siga-nos no Do bit Ao Byte no Facebook.
Prefere twitter? @DobitAoByte.
Inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.
Nossos grupos:
Arduino BR – https://www.facebook.com/groups/microcontroladorarduinobr/
Raspberry Pi BR – https://www.facebook.com/groups/raspberrybr/
Orange Pi BR – https://www.facebook.com/groups/OrangePiBR/
Odroid BR – https://www.facebook.com/groups/odroidBR/
Sistemas Embarcados BR – https://www.facebook.com/groups/SistemasEmbarcadosBR/
MIPS BR – https://www.facebook.com/groups/MIPSBR/
Do Bit ao Byte – https://www.facebook.com/groups/dobitaobyte/
Próximo post a caminho!
Você precisa fazer log in para comentar.