Arduino Uno R4 - Display OLED SSD1309 128x64 | Guia do OLED I2C de 2,42 polegadas
Os displays de diodo orgânico emissor de luz (OLED) têm pixels autoiluminados que produzem pretos verdadeiros, taxas de contraste superiores e excelentes ângulos de visão em todas as direções — oferecendo vantagens significativas sobre a tecnologia LCD convencional. O chip driver SSD1309 alimenta os módulos OLED monocromáticos de 128×64 de 2,42 polegadas (também vendidos como 2,4 polegadas) que usam comunicação I2C.

Este guia prático mostra como interligar o OLED SSD1309 128×64 com a sua placa Arduino Uno R4 por meio da biblioteca DIYables_OLED_SSD1309. Você vai descobrir como:
- Ligar o OLED SSD1309 de 2,42 polegadas ao Arduino Uno R4 usando o barramento I2C
- Exibir textos e valores numéricos na tela
- Posicionar o texto no centro, na horizontal e na vertical
- Renderizar primitivas geométricas (linhas, retângulos, círculos, triângulos, formas arredondadas)
- Mostrar gráficos bitmap monocromáticos
- Ativar a rolagem por hardware em várias direções
- Controlar os níveis de brilho e de contraste do display
- Integrar fontes personalizadas da biblioteca de fontes Adafruit GFX
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Display OLED SSD1309 de 2,42 Polegadas
O SSD1309 é um CI driver CMOS dedicado, projetado para matrizes OLED de 128×64 pixels. O seu conjunto de registradores é compatível com o popular SSD1306, o que permite reutilizar o código com pequenos ajustes. As principais diferenças de hardware incluem:
- Necessidade de alimentação externa — ao contrário da bomba de carga integrada do SSD1306, o SSD1309 depende de uma alimentação VCC externa. No entanto, as placas breakout disponíveis no mercado (incluindo as versões de 2,42 e 2,4 polegadas) incorporam conversores boost na própria placa, o que torna essa diferença transparente durante o uso.
- Faixa de tensão ampliada — o SSD1309 suporta até 16 V de entrada VCC, enquanto o SSD1306 se limita a cerca de 4,2 V.
O módulo OLED de 2,42 polegadas (2,4 polegadas) normalmente usa o controlador SSD1309 e oferece um display com resolução de 128×64 que se comunica pelo protocolo I2C. A cor do display (branco, azul, amarelo, verde ou zonas bicolores) depende do substrato OLED físico e não pode ser modificada por comandos de software.
Este tutorial se comunica com o display pelo barramento I2C, que exige apenas duas linhas de sinal (SDA e SCL) e permite compartilhar o barramento com outros periféricos I2C.
Pinagem do OLED SSD1309 (Módulo I2C)
Os módulos OLED I2C SSD1309 padrão de 2,42 polegadas têm quatro pinos de conexão:
- GND — Conecte ao GND do Arduino Uno R4.
- VCC — Entrada de alimentação. Ligue à saída de 5 V do Arduino Uno R4 (ou de 3,3 V, se o módulo suportar).
- SCL — Linha do sinal de clock I2C.
- SDA — Linha do sinal de dados I2C.

※ Nota:
- A disposição dos pinos varia de um fabricante para outro. Sempre confira os rótulos serigrafados no seu módulo específico antes de fazer as conexões.
- Este guia foi validado com o display OLED SSD1309 de 2,42 polegadas da DIYables. Outros módulos de 2,4/2,42 polegadas baseados no SSD1309 devem funcionar de forma idêntica.
Diagrama de Ligação — Arduino Uno R4 e OLED SSD1309 128×64
- Conexões esquemáticas entre o Arduino Uno R4 e o OLED SSD1309 128×64 de 2,42 polegadas

This image is created using Fritzing. Click to enlarge image
- Foto da ligação física entre o Arduino Uno R4 e o OLED SSD1309 128×64

This image is created using Fritzing. Click to enlarge image
Veja A melhor forma de alimentar o Arduino Uno R4 e outros componentes.
O Arduino Uno R4 usa as mesmas posições dos pinos I2C que o Uno clássico. Detalhes da conexão:
| Módulo OLED | Arduino Uno R4 |
|---|---|
| Vin | 5V |
| GND | GND |
| SDA | A4 (ou pino SDA) |
| SCL | A5 (ou pino SCL) |
Primeiros Passos — OLED SSD1309 com Arduino Uno R4
Passo 1: Instale a Biblioteca DIYables_OLED_SSD1309
- Abra a Arduino IDE e clique no ícone Libraries na barra lateral esquerda.
- Digite "DIYables_OLED_SSD1309" no campo de busca e encontre a biblioteca da DIYables.
- Clique no botão Install.

- A IDE vai pedir para você instalar a dependência necessária (Adafruit GFX Library). Clique em Install All.

Passo 2: Estrutura Básica de Programação
Todos os sketches do SSD1309 seguem esta estrutura consistente: incluir os cabeçalhos, instanciar um objeto de display, inicializá-lo em setup(), desenhar o conteúdo no frame buffer e, por fim, transferir o buffer para a tela usando display().
- Inclua os cabeçalhos necessários:
- Defina as dimensões da tela (128×64 para o módulo de 2,42 polegadas):
- Instancie o objeto de display (use -1 quando nenhum pino de reset estiver conectado):
- Inicialize o display dentro de setup():
- Depois da inicialização, chame as funções de desenho (clearDisplay(), drawPixel(), print(), etc.) seguidas de oled.display() para atualizar a tela.
※ Nota:
Todos os exemplos de código deste guia são para o OLED SSD1309 128×64 (2,42 polegadas) e usam a biblioteca DIYables_OLED_SSD1309 com o Arduino Uno R4.
Código Arduino Uno R4 — Hello World no OLED SSD1309
A demonstração mais simples: exibir texto em vários tamanhos.
Código Arduino Uno R4 — Exibir Texto no OLED SSD1309
Este exemplo mostra recursos avançados de texto — tamanhos variáveis, formatação numérica e a macro F() para economizar RAM.
Referência das Funções de Display Mais Úteis
Referência rápida das funções do OLED SSD1309 mais usadas por meio da biblioteca DIYables:
- oled.clearDisplay() — apaga o frame buffer (todos os pixels desligados).
- oled.display() — transfere o buffer para o OLED para tornar as alterações visíveis.
- oled.drawPixel(x, y, color) — liga ou desliga um único pixel.
- oled.setTextSize(n) — amplia a fonte pelo fator *n* (1 = 6×8, 2 = 12×16, …, até 8).
- oled.setCursor(x, y) — posiciona o cursor de texto nas coordenadas de pixel *(x, y)*.
- oled.setTextColor(SSD1309_PIXEL_ON) — apenas a cor do texto (fundo transparente).
- oled.setTextColor(SSD1309_PIXEL_OFF, SSD1309_PIXEL_ON) — texto com cor de fundo explícita.
- oled.println("message") — imprime uma string e passa para a próxima linha.
- oled.println(number) — imprime um inteiro no formato decimal.
- oled.println(number, HEX) — imprime um inteiro no formato hexadecimal.
- oled.startscrollright(start, stop) — rolagem por hardware para a direita entre a página *start* e a página *stop*.
- oled.startscrollleft(start, stop) — rolagem por hardware para a esquerda.
- oled.startscrolldiagright(start, stop) — rolagem por hardware na diagonal para a direita.
- oled.startscrolldiagleft(start, stop) — rolagem por hardware na diagonal para a esquerda.
- oled.stopscroll() — interrompe qualquer rolagem por hardware ativa.
- oled.setContrast(value) — ajusta o brilho do display (0–255).
- oled.dim(true/false) — reduz rapidamente o display ao brilho mínimo ou restaura o contraste anterior.
- oled.invertDisplay(true/false) — inversão de cores em nível de hardware (pixels ligados ↔ pixels desligados).
Como Centralizar o Texto na Vertical e na Horizontal no OLED SSD1309
Código Arduino Uno R4 — Desenhar Formas no OLED SSD1309
A biblioteca DIYables_OLED_SSD1309 herda de Adafruit_GFX e oferece recursos completos de desenho de formas: pixels, linhas, retângulos, retângulos preenchidos, círculos, círculos preenchidos, triângulos, triângulos preenchidos e retângulos arredondados. O sketch a seguir demonstra todos eles com sequências animadas.
Código Arduino Uno R4 — Rolagem por Hardware no OLED SSD1309
O SSD1309 inclui um mecanismo de rolagem por hardware que move o conteúdo do display sem intervenção da CPU. A biblioteca DIYables oferece quatro modos de rolagem: direita, esquerda, diagonal para a direita e diagonal para a esquerda. Cada um aceita um parâmetro de página inicial e de página final (as páginas são faixas horizontais de 8 pixels de altura, numeradas de 0 a 7 em um display de 64 pixels de altura).
※ Nota:
Sempre chame display() para transferir o seu conteúdo para o OLED antes de iniciar uma rolagem. Evite renderizar novo conteúdo enquanto a rolagem estiver ativa — chame stopscroll() primeiro.
Código Arduino Uno R4 — Exibir Imagem Bitmap no OLED SSD1309
Para exibir um bitmap no OLED SSD1309, você precisa primeiro converter a sua imagem em um array de bytes em C. Use a ferramenta online image2cpp gratuita para essa conversão:
- Envie o arquivo da sua imagem (PNG, JPG, BMP, etc.).
- Configure o tamanho do canvas para 128×64 (ou menor).
- Selecione Arduino code como formato de saída.
- Copie o array gerado para o seu sketch.

O exemplo abaixo alterna entre um ícone de coração de 16×16 e um logotipo da DIYables em largura total:
※ Nota:
- As dimensões do bitmap não devem exceder a resolução da tela (128×64 para o módulo de 2,42 polegadas).
Código Arduino Uno R4 — Contraste e Dim no OLED SSD1309
O SSD1309 oferece 256 níveis de contraste (0–255). A biblioteca DIYables fornece setContrast() para um controle preciso e dim() para alternar rapidamente entre o brilho mínimo e o nível definido anteriormente.
Código Arduino Uno R4 — Fontes Externas Personalizadas no OLED SSD1309
A biblioteca Adafruit GFX inclui dezenas de fontes FreeFont escaláveis (Serif, Sans, Mono — cada uma em Regular, Bold, Italic e vários tamanhos). Você pode usar qualquer uma delas no display SSD1309 incluindo o cabeçalho correspondente e chamando setFont().
※ Nota:
- Quando uma fonte externa está ativa, a coordenada Y do cursor se refere à linha de base do texto, e não ao canto superior esquerdo. Isso é diferente do comportamento da fonte 5×7 integrada.
- As fontes externas ficam armazenadas na flash (PROGMEM). Em placas com pouca memória, como o Uno clássico (32 KB de flash), use-as com moderação. O Arduino Uno R4 tem mais memória, o que permite mais flexibilidade.
Vídeo
O vídeo de demonstração abaixo usa o código abaixo:
Solução de Problemas do OLED SSD1309 com Arduino Uno R4
Se o OLED SSD1309 de 2,42 polegadas continuar em branco depois de você carregar o sketch, siga estes passos de diagnóstico:
- Verifique as conexões — confirme que SDA, SCL, VCC e GND estão ligados aos pinos corretos do Arduino Uno R4.
- Confirme o chip driver — esta biblioteca foi projetada para o SSD1309. Se o seu módulo usa outro controlador (por exemplo, SH1106), ele não vai responder corretamente.
- Verifique o endereço I2C — a maioria dos módulos SSD1309 usa 0x3C por padrão, mas alguns usam 0x3D. Execute o sketch de I2C scanner abaixo para detectar o endereço real:
Saída esperada no Serial Monitor quando o SSD1309 é detectado:
- Garanta que display() seja chamado — o SSD1309 usa um frame buffer. As funções de desenho só modificam o buffer na RAM; nada aparece na tela até você chamar oled.display().
- Verifique a fonte de alimentação — o módulo de 2,42 polegadas consome mais corrente que os OLEDs menores. Garanta que a sua fonte de alimentação consiga fornecer corrente suficiente (normalmente 20–40 mA com brilho máximo).