ESP32 - 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 — tornando-o uma ótima evolução em relação aos LCDs tradicionais. O SSD1309 é o CI controlador 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 ESP32 usando a biblioteca DIYables_OLED_SSD1309. Mais especificamente, vamos abordar:
- A ligação do OLED SSD1309 de 2.42 polegadas ao ESP32 via I2C
- Como imprimir texto e números na tela
- Como centralizar o texto na vertical e na horizontal
- 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 ESP32 Starter Kit (ESP32 included) | |
| 1 | × | DIYables ESP32 S3 Starter Kit (ESP32 S3 included) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Display OLED SSD1309 de 2.42 Polegadas
O SSD1309 é um CI controlador 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 embutida — o SSD1309 exige 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 elevador (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 controlador SSD1309 e tem resolução de 128×64 pixels com interface I2C. A cor do painel (branca, azul, amarela, verde ou de 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:
- Pino GND: deve ser conectado ao terra do ESP32
- Pino VCC: deve ser conectado ao pino 3.3V ou 5V do ESP32 (verifique as especificações do seu módulo)
- Pino SCL: é o pino de clock do I2C. Conecte ao GPIO 22 (SCL padrão)
- Pino SDA: é o pino de dados do I2C. Conecte ao GPIO 21 (SDA padrão)

※ Nota:
A ordem dos pinos pode variar entre fabricantes. Sempre confira as identificações impressas no seu módulo OLED.
Diagrama de Ligação
- Como conectar o ESP32 ao display OLED SSD1309 128x64 usando uma protoboard

This image is created using Fritzing. Click to enlarge image
Se você não sabe como alimentar o ESP32 e outros componentes, veja as instruções no tutorial a seguir: Como alimentar o ESP32.
- Como conectar o ESP32 ao display OLED SSD1309 128x64 usando uma placa breakout com bornes de parafuso

This image is created using Fritzing. Click to enlarge image
Como Programar o ESP32 para o OLED SSD1309
Instale a Biblioteca DIYables_OLED_SSD1309
A biblioteca DIYables_OLED_SSD1309 foi feita especialmente para displays SSD1309 e estende a Adafruit_GFX para oferecer mais recursos gráficos.
- Abra a Arduino IDE
- Vá até o ícone Libraries na barra lateral esquerda
- Pesquise DIYables_OLED_SSD1309
- Clique em Install
- Uma janela de dependências vai aparecer — clique em Install All para instalar também a Adafruit GFX Library (necessária para desenhar formas e usar fontes)

Etapas de Programação
- Inclua as bibliotecas necessárias
- Defina as dimensões da tela
- Declare o objeto do display
- Inicialize o OLED em setup()
- Mostre o conteúdo
Código ESP32 — Hello World no OLED SSD1309
O ponto de partida mais simples: imprimir algumas linhas de texto em tamanhos diferentes.
Código ESP32 — Mostrar 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 por meio da biblioteca DIYables:
- oled.clearDisplay() — limpa o frame buffer (todos os pixels apagados).
- oled.display() — transfere o buffer para o OLED para que as mudanças 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() — para qualquer rolagem por hardware ativa.
- oled.setContrast(value) — ajusta o brilho do display (0–255).
- oled.dim(true/false) — escurece rapidamente o display para o mínimo ou restaura o contraste anterior.
- oled.invertDisplay(true/false) — inversão de cores por hardware (pixels acesos ↔ pixels apagados).
Como Centralizar o Texto na Vertical e na Horizontal no OLED SSD1309
Código ESP32 — Desenhar Formas no OLED SSD1309
Como a biblioteca DIYables_OLED_SSD1309 estende a Adafruit_GFX, você tem um conjunto completo de funções básicas para desenhar formas: 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 ESP32 — Rolagem por Hardware no OLED SSD1309
O SSD1309 tem um mecanismo de rolagem embutido 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 ESP32 — Mostrar Imagem Bitmap no OLED SSD1309
Para mostrar um bitmap no OLED SSD1309, primeiro você precisa converter sua imagem em um array de bytes em C. Use a ferramenta online image2cpp, que é gratuita, para fazer essa conversão:
- Envie o arquivo da sua imagem (PNG, JPG, BMP etc.).
- Defina o tamanho da tela de desenho como 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 com a largura total da tela:
※ Nota:
- As dimensões do bitmap não podem ultrapassar a resolução da tela (128×64 para o módulo de 2.42 polegadas).
Código ESP32 — Contraste e Escurecimento no OLED SSD1309
O SSD1309 suporta 256 níveis de contraste (0–255). A biblioteca DIYables oferece setContrast() para um controle preciso e dim() para alternar rapidamente entre o brilho mínimo e o nível configurado anteriormente.
Código ESP32 — 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 arquivo de 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 embutida.
- As fontes externas são armazenadas na memória flash (PROGMEM). O ESP32 tem bastante memória flash, então fique à vontade para usar vários arquivos de fonte no seu projeto.
Solução de Problemas do OLED SSD1309 com ESP32
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 se SDA, SCL, VCC e GND estão conectados aos pinos corretos do ESP32.
- Confirme o chip controlador — 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 o endereço padrão 0x3C, 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:
- Garanta que display() seja chamada — 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 do que OLEDs menores. Garanta que sua fonte de alimentação consiga fornecer corrente suficiente (normalmente de 20 a 40 mA com brilho máximo). Se você usa alimentação USB, isso geralmente não é um problema com o ESP32.
- Pinos I2C personalizados (opcional) — se você precisar usar pinos I2C diferentes do padrão, inicialize o Wire com Wire.begin(SDA_PIN, SCL_PIN) antes de chamar display.begin().
Conclusão
Este guia abordou tudo o que é essencial para usar o display OLED SSD1309 de 2.42 polegadas (128×64) com o ESP32, incluindo:
- Conexões de hardware e ligação I2C
- Exibição de texto e números em vários tamanhos
- Desenho de formas (retângulos, círculos, triângulos)
- Exibição de imagens bitmap
- Rolagem por hardware em quatro direções
- Controle de contraste e brilho
- Fontes externas personalizadas
A biblioteca DIYables_OLED_SSD1309 simplifica a programação do SSD1309 oferecendo funções de alto nível para texto, gráficos e controle do display, enquanto aproveita a Adafruit GFX para recursos de desenho mais amplos.
Para mais projetos e tutoriais com ESP32, visite esp32io.com