Arduino - Display OLED SSD1309 128x64 | Tutorial do OLED I2C de 2,42 polegadas
Um display OLED (Organic Light-Emitting Diode, ou Diodo Orgânico Emissor de Luz) tem pixels que emitem a própria luz, o que oferece pretos profundos, alto contraste e amplos ângulos de visão — sendo uma ótima evolução em relação aos LCDs tradicionais. O SSD1309 é o CI driver encontrado com frequência nos módulos OLED I2C 128×64 de 2,42 polegadas (às vezes identificados como 2,4 polegadas).

Neste guia passo a passo, você vai aprender a conectar e programar o OLED SSD1309 128×64 com uma placa Arduino usando a biblioteca DIYables_OLED_SSD1309. Especificamente, vamos abordar:
- A ligação do OLED SSD1309 de 2,42 polegadas ao Arduino via I2C
- Como imprimir texto e números na tela
- Como centralizar texto vertical e horizontalmente
- Como desenhar formas geométricas (linhas, retângulos, círculos, triângulos, retângulos arredondados)
- Como exibir imagens bitmap monocromáticas
- A rolagem por hardware em quatro direções
- Como ajustar o contraste e escurecer o display
- Como usar fontes externas personalizadas da coleção de fontes Adafruit GFX
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables STEM V3 Starter Kit (Arduino included) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Display OLED SSD1309 de 2,42 Polegadas
O SSD1309 é um CI driver de OLED CMOS de chip único, projetado para painéis de matriz de pontos de 128×64. Ele é compatível em registradores com o popular SSD1306, então muitos exemplos de código existentes funcionam com mudanças mínimas. As principais diferenças de hardware são:
- Sem charge pump integrado — o SSD1309 precisa de uma linha VCC externa, mas praticamente todas as placas breakout (incluindo os módulos de 2,42 e 2,4 polegadas) já vêm com um conversor boost na placa, então isso é transparente para você.
- Maior tolerância de tensão — o SSD1309 aceita até 16 V no VCC, enquanto o SSD1306 é limitado a cerca de 4,2 V.
O módulo OLED de 2,42 polegadas (2,4 polegadas) geralmente usa o driver SSD1309 e tem resolução de 128×64 pixels com interface I2C. A cor do painel (branco, azul, amarelo, verde ou duas zonas) é determinada pelo material físico do OLED e não pode ser controlada por software.
Este tutorial se comunica com o display pelo barramento I2C, que precisa de apenas dois fios de sinal (SDA e SCL) e pode compartilhar o barramento com outros periféricos I2C.
Pinagem do OLED SSD1309 (Módulo I2C)
O módulo OLED I2C SSD1309 típico de 2,42 polegadas tem quatro pinos:
- GND — Conecte ao terra do Arduino.
- VCC — Entrada de alimentação. Ligue ao 5 V do Arduino (ou 3,3 V, dependendo do regulador presente no módulo).
- SCL — Linha de clock I2C.
- SDA — Linha de dados I2C.

※ Nota:
- A ordem dos pinos varia entre fabricantes. Sempre confira as identificações serigrafadas no seu módulo antes de fazer a ligação.
- Este tutorial foi verificado 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 da mesma forma.
Diagrama de Ligação — Arduino e OLED SSD1309 128×64
- Esquema de ligação entre o Arduino e o OLED SSD1309 128×64 de 2,42 polegadas

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

This image is created using Fritzing. Click to enlarge image
Ao usar outra variante de Arduino, os pinos I2C mudam. A tabela abaixo lista as conexões corretas:
| Módulo OLED | Arduino Uno, Nano | Arduino Mega |
|---|---|---|
| Vin | 5V | 5V |
| GND | GND | GND |
| SDA | A4 | 20 |
| SCL | A5 | 21 |
Primeiros Passos — OLED SSD1309 com Arduino
Passo 1: Instale a Biblioteca DIYables_OLED_SSD1309
- Abra o Arduino IDE e clique no ícone Libraries na barra lateral esquerda.
- Digite "DIYables_OLED_SSD1309" na caixa de pesquisa e localize a biblioteca publicada pela DIYables.
- Clique no botão Install.

- O IDE vai pedir que você instale a dependência necessária (Adafruit GFX Library). Clique em Install All para continuar.

Passo 2: Padrão Básico de Programação
Todo sketch que controla o SSD1309 segue o mesmo padrão: incluir os cabeçalhos, criar um objeto de display, inicializá-lo em setup(), desenhar no buffer fora da tela e, em seguida, enviar o buffer para a tela com display().
- Inclua os cabeçalhos necessários:
- Defina as dimensões da tela (128×64 para o módulo de 2,42 polegadas):
- Crie o objeto do display (passe -1 quando nenhum pino de reset estiver conectado):
- Inicialize o display dentro de setup():
- Depois disso, você pode chamar qualquer função de desenho (clearDisplay(), drawPixel(), print(), etc.) seguida de oled.display() para atualizar a tela.
※ Nota:
Todo o código de exemplo deste tutorial é para o OLED SSD1309 128×64 (2,42 polegadas) e usa a biblioteca DIYables_OLED_SSD1309.
Código Arduino — Hello World no OLED SSD1309
O ponto de partida mais simples: imprimir algumas linhas de texto em tamanhos diferentes.
Código Arduino — Exibir Texto no OLED SSD1309
O exemplo a seguir demonstra mais recursos de texto — vários tamanhos, formatação de números e a macro F() para economizar RAM.
Referência de Funções Úteis do Display
Abaixo está uma lista de referência rápida das funções mais usadas ao trabalhar com o OLED SSD1309 através da biblioteca DIYables:
- oled.clearDisplay() — limpa o frame buffer (todos os pixels apagados).
- oled.display() — transfere o buffer para o OLED para que as alterações fiquem visíveis.
- oled.drawPixel(x, y, color) — acende ou apaga um pixel individual.
- oled.setTextSize(n) — aumenta a fonte pelo fator *n* (1 = 6×8, 2 = 12×16, …, até 8).
- oled.setCursor(x, y) — move o cursor de texto para as coordenadas de pixel *(x, y)*.
- oled.setTextColor(SSD1309_PIXEL_ON) — apenas a cor do texto (o fundo é transparente).
- oled.setTextColor(SSD1309_PIXEL_OFF, SSD1309_PIXEL_ON) — texto com uma cor de fundo explícita.
- oled.println("message") — imprime uma string e avança para a próxima linha.
- oled.println(number) — imprime um número inteiro em decimal.
- oled.println(number, HEX) — imprime um número inteiro em 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) — escurece rapidamente o display ao mínimo ou restaura o contraste anterior.
- oled.invertDisplay(true/false) — inversão de cores em nível de hardware (pixels acesos ↔ pixels apagados).
Como Centralizar Texto Vertical e Horizontalmente no OLED SSD1309
Código Arduino — Desenhar Formas no OLED SSD1309
Como a biblioteca DIYables_OLED_SSD1309 estende a Adafruit_GFX, você tem um conjunto completo de primitivas de desenho: pixels, linhas, retângulos, retângulos preenchidos, círculos, círculos preenchidos, triângulos, triângulos preenchidos e retângulos arredondados. O sketch abaixo percorre todas elas com demonstrações animadas.
Código Arduino — Rolagem por Hardware no OLED SSD1309
O SSD1309 tem um mecanismo de rolagem integrado que desloca o conteúdo do display sem nenhuma carga na CPU. A biblioteca DIYables oferece quatro direções de rolagem: direita, esquerda, diagonal para a direita e diagonal para a esquerda. Cada uma recebe 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 enviar seu conteúdo ao OLED antes de iniciar uma rolagem. Evite desenhar novo conteúdo enquanto a rolagem estiver ativa — chame stopscroll() primeiro.
Código Arduino — Exibir Imagem Bitmap no OLED SSD1309
Para exibir um bitmap no OLED SSD1309, primeiro você precisa converter sua imagem em um array de bytes em C. Use a ferramenta online image2cpp gratuita para isso:
- Envie sua imagem (PNG, JPG, BMP, etc.).
- Defina o tamanho da área para 128×64 (ou menor).
- Escolha 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 na largura total:
※ Nota:
- As dimensões do bitmap não devem ultrapassar a resolução da tela (128×64 para o módulo de 2,42 polegadas).
Código Arduino — Contraste e Escurecimento no OLED SSD1309
O SSD1309 suporta 256 níveis de contraste (0–255). A biblioteca DIYables oferece setContrast() para um controle fino e dim() para alternar rapidamente entre o brilho mínimo e o nível configurado anteriormente.
Código Arduino — Fontes Externas Personalizadas no OLED SSD1309
A biblioteca Adafruit GFX vem com dezenas de fontes escaláveis FreeFont (Serif, Sans, Mono — cada uma em Regular, Bold, Italic e em quatro tamanhos). Você pode ativar 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 da fonte 5×7 integrada.
- As fontes externas são armazenadas na memória flash (PROGMEM). Em placas AVR com pouca memória (Arduino Uno = 32 KB de flash), use-as com moderação.
Solução de Problemas do OLED SSD1309
Se nada aparecer no OLED SSD1309 de 2,42 polegadas depois de carregar o seu sketch, faça estas verificações:
- Verifique a ligação — confirme que SDA, SCL, VCC e GND estão conectados aos pinos corretos do Arduino.
- Confirme o chip driver — esta biblioteca foi feita 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 scanner I2C abaixo para detectar o endereço real:
Saída esperada no Serial Monitor quando o SSD1309 é detectado:
- Certifique-se de que display() é 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 alimentação — o módulo de 2,42 polegadas consome mais corrente do que OLEDs menores. Garanta que sua fonte de alimentação possa fornecer corrente suficiente (normalmente 20–40 mA no brilho máximo).