ESP8266 - Display OLED SSD1309 128x64 | Tutorial de OLED I2C de 2,42 polegadas
Este tutorial ensina você a usar o ESP8266 com um display OLED I2C SSD1309 de 2,42 polegadas (2,4") (resolução 128×64). Em detalhes, vamos aprender:
- Como conectar um display OLED SSD1309 de 2,42 polegadas ao ESP8266.
- Como programar o ESP8266 para exibir texto no OLED SSD1309.
- Como programar o ESP8266 para desenhar formas no OLED SSD1309.
- Como habilitar a rolagem por hardware no OLED SSD1309 com o ESP8266.
- Como programar o ESP8266 para exibir imagens bitmap no OLED SSD1309.
- Como ajustar o brilho/contraste do OLED SSD1309.
- Como usar fontes externas com o display OLED SSD1309.

Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Display OLED SSD1309
O SSD1309 é um chip driver de display OLED monocromático. A versão de 2,42 polegadas oferece resolução de 128×64 pixels. Ele se comunica pelo protocolo I2C, exigindo apenas dois pinos (SDA e SCL) além das conexões de alimentação. Isso o torna ideal para projetos com ESP8266 que têm poucos pinos disponíveis.
Principais características do OLED SSD1309:
- Tamanho do display: 2,42 polegadas (diagonal)
- Resolução: 128×64 pixels
- Comunicação: I2C (interface de 2 fios)
- Endereço I2C padrão: 0x3C
- Tensão de operação: compatível com 3,3V ou 5V (o ESP8266 usa 3,3V)
- Suporte embutido a rolagem por hardware
- Contraste/brilho ajustável
- Baixo consumo de energia
Pinagem do Display OLED SSD1309
O módulo OLED I2C SSD1309 de 2,42 polegadas normalmente possui 4 pinos:
- GND: Pino de terra - conecte ao GND do ESP8266
- VCC: Pino de alimentação - conecte ao 3,3V do ESP8266
- SDA: Linha de dados I2C - conecte ao D2 (GPIO4) do ESP8266
- SCL: Linha de clock I2C - conecte ao D1 (GPIO5) do ESP8266

※ Nota:
- Os pinos de um módulo OLED podem variar entre fabricantes e tipos de módulo. É essencial sempre consultar os rótulos impressos no módulo OLED. Preste atenção!
- Este tutorial usa o display OLED que possui o driver SSD1309 I2C. Testamos com o display OLED da DIYables e ele funciona perfeitamente.
Diagrama de Ligação
Conecte o display OLED SSD1309 de 2,42 polegadas ao ESP8266 seguindo esta ligação:

This image is created using Fritzing. Click to enlarge image
Para mais informações, veja Pinagem do ESP8266 e como alimentar o ESP8266 e outros componentes.
| OLED SSD1309 | ESP8266 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| SDA | D2 (GPIO4) |
| SCL | D1 (GPIO5) |
Como Usar o OLED SSD1309 com o ESP8266
Instalar a Biblioteca DIYables_OLED_SSD1309
- Clique no ícone Libraries na barra de navegação esquerda da Arduino IDE.
- Digite DIYables_OLED_SSD1309 na caixa de pesquisa e procure a biblioteca da DIYables.
- Clique no botão Install para adicionar a biblioteca.

A biblioteca DIYables_OLED_SSD1309 depende da biblioteca Adafruit_GFX. Se a Adafruit_GFX ainda não estiver instalada, a Arduino IDE solicitará automaticamente que você a instale quando instalar a DIYables_OLED_SSD1309.
Código ESP8266 - Exibir "Hello World" no OLED SSD1309
O código abaixo mostra como exibir texto no display OLED SSD1309 de 2,42 polegadas:
Explicação
- Inclua as bibliotecas necessárias e defina as constantes
- Crie o objeto de display com o endereço I2C 0x3C
- Inicialize o display no setup()
- Defina o tamanho do texto, a cor e a posição do cursor
- Imprima o texto no buffer do display usando print() e println()
- Chame display.display() para enviar o conteúdo do buffer para a tela
※ Nota:
A macro F() armazena strings na memória flash em vez da RAM. Isso economiza RAM valiosa no ESP8266.
Código ESP8266 - Exibir Texto com Vários Formatos
Este código demonstra a exibição de texto com diferentes tamanhos e formatação de números:
Código ESP8266 - Desenhar Formas no OLED SSD1309
O código abaixo mostra como desenhar pixels, linhas, retângulos, círculos e triângulos:
Funções de desenho disponíveis:
- drawPixel(x, y, color) - Desenha um único pixel
- drawLine(x0, y0, x1, y1, color) - Desenha uma linha
- drawRect(x, y, w, h, color) - Desenha o contorno de um retângulo
- fillRect(x, y, w, h, color) - Desenha um retângulo preenchido
- drawRoundRect(x, y, w, h, radius, color) - Desenha um retângulo arredondado
- drawCircle(x, y, radius, color) - Desenha o contorno de um círculo
- fillCircle(x, y, radius, color) - Desenha um círculo preenchido
- drawTriangle(x0, y0, x1, y1, x2, y2, color) - Desenha o contorno de um triângulo
- fillTriangle(x0, y0, x1, y1, x2, y2, color) - Desenha um triângulo preenchido
Código ESP8266 - Rolagem por Hardware no OLED SSD1309
O SSD1309 suporta rolagem baseada em hardware. Este código demonstra as quatro direções de rolagem:
Funções de rolagem:
- startscrollright(start, stop) - Rola para a direita
- startscrollleft(start, stop) - Rola para a esquerda
- startscrolldiagright(start, stop) - Rola na diagonal para a direita
- startscrolldiagleft(start, stop) - Rola na diagonal para a esquerda
- stopscroll() - Interrompe a rolagem
Os parâmetros start e stop definem o intervalo de páginas (0x00 a 0x07 para a tela inteira).
Código ESP8266 - Exibir Imagem Bitmap no OLED SSD1309
Este código mostra como exibir imagens bitmap armazenadas na memória de programa:
Para exibir imagens:
- Converta sua imagem em um array de bitmap monocromático (use ferramentas online ou image2cpp)
- Armazene o array em PROGMEM para economizar RAM
- Use drawBitmap(x, y, bitmap, width, height, color) para exibir
Código ESP8266 - Ajustar Brilho/Contraste
Controle o brilho e o contraste do display OLED SSD1309:
Funções de controle de brilho:
- setContrast(value) - Define o nível de contraste (0-255, maior = mais brilhante)
- dim(true/false) - Alterna rapidamente entre brilho reduzido e normal
- invertDisplay(true/false) - Inverte todos os pixels (preto↔branco)
Código ESP8266 - Usar Fontes Externas
A biblioteca Adafruit_GFX inclui as fontes FreeFont. Este código demonstra três fontes diferentes:
※ Nota:
Os arquivos FreeFont são grandes. O ESP8266 tem memória flash limitada (normalmente 4MB). Use apenas as fontes de que você precisa, ou considere usar tamanhos de fonte menores se a memória for limitada.
Uso de fontes:
- Inclua o cabeçalho da fonte: #include <Fonts/FreeSans9pt7b.h>
- Defina a fonte: display.setFont(&FreeSans9pt7b)
- Volte ao padrão: display.setFont(NULL)
- Ao usar fontes externas, a coordenada Y representa a linha de base, não o topo
Solução de Problemas
Se o display OLED não estiver funcionando, tente estes passos:
Verifique o Endereço I2C
O endereço I2C padrão é 0x3C, mas alguns módulos usam 0x3D. Execute este scanner I2C para encontrar o endereço correto:
Se o seu display usar 0x3D, altere SCREEN_ADDRESS para 0x3D no código.
Verifique a Ligação
Verifique as conexões:
- VCC → 3.3V (não 5V para o ESP8266)
- GND → GND
- SDA → D2 (GPIO4)
- SCL → D1 (GPIO5)
Verifique a Fonte de Alimentação
Certifique-se de que o ESP8266 está recebendo energia adequada pelo cabo USB ou por uma fonte de alimentação externa.