You are on page 1of 6

Início  Arduino  Como conectar o Display Oled ao Arduino

Como conectar o Display Oled ao


Arduino
Arduino, Display 
15 de junho de 2015 
Adilson Thomsen


rPesquisar produtos…
m n 0 0
Neste tutorial vamos ver um outro tipo de display, o display OLED I2C com
controlador SSD1306 e resolução de 128×64 pixels, onde é possível mostrar
com muita nitidez imagens e caracteres em amarelo, na faixa superior, ou em
azul, na parte inferior do display.

Com o uso da tecnologia OLED, não há necessidade de utilização de luz de


fundo (backlight), o que torna esse display extremamente econômico em
termos de consumo de energia, e nesse post vamos ver como  utilizar esse
módulo com o Arduino.

OLED  signi ca Organic Light-Emiting Diode, ou Diodo Emissor de Luz


Orgânico.  Esse tipo de display é composto por uma camada de material
orgânico que é colocado entre dois eletrodos sendo que um deles
geralmente é transparente. Esse material orgânico, ao ser estimulado por um
campo eletromagnético, emite luz, dispensando assim o uso do backlight.

Conexão display OLED e Arduino



rPesquisar produtos…
m n 0 0
Vamos testar o display OLED com o Arduino Uno, realizando a comunicação
via interface I2C por meio dos pinos analógicos A4 (SDA) e A5 (SCL):

O display aceita alimentação entre 3 e 5V, e não são utilizados componentes


adicionais para conexão ao Arduino:

Programa e biblioteca u8glib


No programa vamos utilizar a biblioteca U8Glib (download) para

r m n
acionamento do display. Ela possui uma grande variedade de con gurações
para os mais diversos tipos de controladores e displays,
0 bastando incluir
0 a
 Pesquisar produtos…
linha correspondente ao display que você está utilizando.

Na linha 22, selecionamos a linha referente ao controlador SSD1306 com


interface I2C (U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK)),
correspondente ao nosso display. Entre as linhas 10 e 21 temos outros
exemplos de controladores suportados.  Para uma lista completa desses
controladores, veri que este link.

1 // Programa: Teste Display OLED SSD1306


2 // Autor: FILIPEFLOP
3  
4 #include "U8glib.h"
5  
6 // setup u8g object, please remove comment from one of the following con
7 // IMPORTANT NOTE: The following list is incomplete. The complete list o
8 // devices with all constructor calls is here: http://code.google.com/p/
9  
10 //U8GLIB_ST7920_192X32_4X u8g(10); // SPI Com: SCK = en = 13, MOSI
11 //U8GLIB_ST7920_202X32_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   /
12 //U8GLIB_ST7920_202X32_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   /
13 //U8GLIB_ST7920_202X32_1X u8g(18, 16, 17); // SPI Com: SCK = en = 18, M
14 //U8GLIB_DOGXL160_2X_GR u8g(13, 11, 10, 9); // SPI Com: SCK = 13, MOSI =
15 //U8GLIB_PCD8544 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI =
16 //U8GLIB_PCF8812 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI =
17 //U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 );   //
18 //U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 1
19 //U8GLIB_SSD1306_128X64 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (
20 //U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C
21 //U8GLIB_SSD1306_128X64_2X u8g(U8G_I2C_OPT_NONE);
22 U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does no
23  
24 void draw()
25 {
26   //Comandos graficos para o display devem ser colocados aqui
27   //Seleciona a fonte de texto
28   u8g.setFont(u8g_font_8x13B);
29   //Linha superior - temperatura
30   u8g.drawStr( 5, 15, "23");
31   u8g.drawCircle(28,8,3);
32   u8g.drawStr( 34, 15, "C");
33   //Hora
34   u8g.setFont(u8g_font_fub30);

r m n
35   u8g.drawStr( 10, 57, "09:35");
36   //Texto - AM
37   u8g.setFont(u8g_font_5x7); 0 0
 Pesquisar produtos…
38   u8g.drawStr( 115, 33, "AM");
39   //moldura relogio
40   u8g.drawRFrame(0,18, 128, 46, 4);
41   //Desenho bateria
42   u8g.drawRFrame(105, 3, 20,12 , 0);
43   u8g.drawBox(125, 6, 2,6);
44   u8g.drawBox(107, 5, 4,8);
45   u8g.drawBox(114, 5, 4,8);
46   //Desenho linhas sinal
47   u8g.drawVLine(99,0, 15);
48   u8g.drawVLine(98,0, 15);
49   u8g.drawVLine(96,4, 11);
50   u8g.drawVLine(95,4, 11);
51   u8g.drawVLine(93,8, 7);
52   u8g.drawVLine(92,8, 7);
53   u8g.drawVLine(90,12, 3);
54   u8g.drawVLine(89,12, 3);
55 }
56  
57 void setup(void)
58 {
59   Serial.begin(9600);
60   if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
61     u8g.setColorIndex(255);     // white
62   }
63   else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
64     u8g.setColorIndex(3);         // max intensity
65   }
66   else if ( u8g.getMode() == U8G_MODE_BW ) {
67     u8g.setColorIndex(1);         // pixel on
68   }
69   else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
70     u8g.setHiColorByRGB(255,255,255);
71   }
72 }
73  
74 void loop(void)
75 {
76   u8g.firstPage();  
77   do
78   {
79     draw();
80   } while( u8g.nextPage() );
81   
82   delay(50);
83 }


r
Pesquisar produtos…
m n 0 0
O programa contém uma seção chamada Draw, onde cam os comandos de
acionamento do display. Dentro dele, temos os comandos para escrever na
tela (u8g.drawStr()), desenhar retângulos (u8g.drawRFrame()), círculos
(u8g.drawCircle()), assim como selecionar a fonte utilizada para o texto.

Utilizamos esses comandos para desenhar na parte superior da tela símbolos


de bateria e sinal. Na parte inferior, mostramos uma sugestão de utilização
para mostrar a hora atual, caso você queira utilizar o display com um módulo
de relógio de tempo real como o DS1307, que abordamos neste artigo.

Também é possível utilizar os comandos disponíveis na biblioteca U8glib


para desenhar retângulos preenchidos, triângulos, linhas, exibir imagens, etc.
Uma lista completa dos  comandos disponíveis na biblioteca você
encontra aqui.


r
Pesquisar produtos…
m n 0 0

You might also like