Código Arduino e vídeo para display OLED SSD1306 128 x 32 com I2C
Neste tutorial, exploraremos como usar o display SSD1306 OLED 128 x 32 com comunicação I2C em um Arduino. O objetivo é exibir vários elementos, como texto, retângulos e valores dinâmicos como tensão e temperatura na tela. Esta configuração é ideal para projetos que exigem uma solução de exibição compacta e eficiente.

Vamos passar pelos componentes de hardware necessários, pelas instruções de fiação e pelo código do Arduino para colocar tudo em funcionamento. Para um guia visual, não deixe de conferir o vídeo que acompanha este tutorial (no vídeo em 00:00).
Hardware Explicado
Os componentes principais deste projeto incluem o display OLED SSD1306, um dispositivo de baixo consumo que utiliza comunicação I2C para facilitar a integração. O display apresenta uma resolução de 128 x 32 pixels, tornando-o adequado para exibir texto e gráficos simples.
Para controlar o display, usaremos a placa Arduino, que enviará comandos e dados via I2C. O Arduino lida com a lógica de exibição das informações usando bibliotecas comoAdafruit_GFXeAdafruit_SSD1306. Essas bibliotecas simplificam o processo de comunicação e permitem desenhar facilmente formas e texto.
Detalhes da ficha técnica
| Fabricante | Adafruit |
|---|---|
| Número da peça | SSD1306 |
| Tensão lógica/E/S | 3.3 - 5 V |
| Tensão de alimentação | 3.3 - 5 V |
| Consumo de corrente | ~20 mA (típ.) |
| Resolução do ecrã | 128 x 32 pixels |
| Interface | I2C |
| Dimensões | 128 x 32 mm |
| Notas / variantes | Disponível em vários tamanhos e interfaces |
- Verifique o endereço I2C, normalmente 0x3C para OLEDs.
- Garanta uma fonte de alimentação adequada para evitar danos.
- Use resistores de pull-up nas linhas SDA e SCL, se necessário.
- Mantenha a fiação curta para reduzir o ruído no sinal I2C.
- Considere a dissipação de calor ao alimentar vários módulos.
Instruções de fiação

Para ligar o display OLED SSD1306, primeiro conecte o pino VCC do display à saída 5V do Arduino. Em seguida, conecte o pino GND a um dos pinos de terra do Arduino. Para a comunicação I2C, conecte o pino SDA do display ao pino SDA do Arduino, que é A4 no UNO. Depois, conecte o pino SCL do display ao pino SCL do Arduino, que é A5 no UNO. Se estiver usando outro modelo de Arduino, consulte o mapeamento específico dos pinos SDA e SCL.
Para componentes adicionais, se tiver um LED que deseja controlar, conecte-o ao pino 9 através de um resistor de 330 ohms. Certifique-se de conectar a outra extremidade do resistor ao ânodo do LED, enquanto o cátodo deve ir ao terra (GND). Essa configuração permitirá que o LED acenda quando o pino 9 for ativado.
Exemplos de Código e Passo a Passo
No código Arduino, começamos por incluir as bibliotecas necessárias para o display OLED. Um identificador-chave édisplay, que é uma instância deAdafruit_SSD1306classe. O display é inicializado emsetup()função, onde também limpamos o display para nos prepararmos para desenhar.

void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.display();
delay(2000);
display.clearDisplay();
}No/Na/Nos/Nasloop()função, definimos uma variável do tipo stringvStringpara manter o valor da tensão, que é atualizado dinamicamente. OrobojaxText()A função é usada para exibir texto na tela nas coordenadas especificadas.
void loop() {
String vString = String(count, 3);
display.clearDisplay();
robojaxText("Voltage: ", 4, 3, 1, false);
robojaxText(vString, 72, 3, 1, false);
display.display();
count += 0.173;
delay(2000);
}OrobojaxText()A função é crucial para posicionar e exibir texto. Ela recebe parâmetros: a string de texto, as coordenadas x e y, o tamanho do texto e um booleano que determina se a exibição deve ser atualizada imediatamente.
void robojaxText(String text, int x, int y, int size, boolean d) {
display.setTextSize(size);
display.setTextColor(WHITE);
display.setCursor(x, y);
display.println(text);
if(d) {
display.display();
}
}Esta função define o tamanho do texto, a cor e a posição do cursor antes de imprimir o texto. Lembre-se de assistir ao vídeo para uma explicação completa do código (no vídeo em 10:00).
Demonstração / O que Esperar
Quando o código for carregado no Arduino, o display OLED deve mostrar os valores de tensão, temperatura e capacidade, atualizando-se dinamicamente a cada dois segundos. Você também deverá ver um retângulo desenhado ao redor dos elementos de texto. Se o display não mostrar nada, verifique se as conexões estão corretas e se o endereço I2C corresponde ao especificado no código.
Marcas de tempo do vídeo
- 00:00- Introdução ao projeto
- 02:00- Instruções de fiação
- 05:00- Revisão guiada do código
- 10:00- Demonstração da saída
/*
* Este é um exemplo para nossos OLEDs monocromáticos baseados em drivers SSD1306.
*
* Este exemplo é para um display de tamanho 128x32 usando I2C.
*
* Se você receber o erro: Adafruit_GFX.h não encontrado, baixe a Biblioteca Adafruit-GFX
* https://github.com/adafruit/Adafruit-GFX-Library
*
* Compre este módulo OLED na Amazon: https://amzn.to/36zFvTb
*
* Escrito por Limor Fried/Ladyada para Adafruit Industries.
* Licença BSD, consulte license.txt para mais informações.
* Todo o texto acima e a tela de abertura devem ser incluídos em qualquer redistribuição.
*
* Assista ao vídeo para este código para aprendê-lo completamente.
* Assista ao vídeo aqui: https://youtu.be/RjyulqVsz2o
* Este código é oferecido "como está" sem garantia de qualquer tipo.
* Atualizado por Ahmad Shamshiri para o tutorial em vídeo do Robojax.com
* em 18 de março de 2018 às 10:21 em Ajax, Ontário, Canadá.
* Por favor, veja outros códigos e vídeos do Robojax em http://robojax.com/learn/arduino
* Se você estiver compartilhando este código, deve manter esta nota de copyright.
*/
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
double count=0;
/*
* Conexão de PIN:
* Conexão de pinos veja: https://www.arduino.cc/en/Reference/Wire
* para UNO: SDA no A4, SCL no A5
* para Mega2560: SDA no 20, SCL no 21
* para Leonardo: SDA no 2, SCL no 3
* para Due: SDA no 20, SCL no 21
* VCC no 5V
* GND no GND :-)
*/
// esta é a Largura e Altura do Display que é 128 x 32
#define LOGO16_GLCD_HEIGHT 32
#define LOGO16_GLCD_WIDTH 128
#if (SSD1306_LCDHEIGHT != 32)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
void setup() {
Serial.begin(9600);
// por padrão, geraremos a alta voltagem a partir da linha de 3,3v internamente! (legal!)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // inicializar com o endereço I2C 0x3C (para o 128x32)
display.display();
delay(2000);
// Limpe o buffer.
display.clearDisplay();
}
void loop() {
String vString = String(count, 3); // usando um flutuante e o
display.clearDisplay();
robojaxText("Voltage: ", 4, 3, 1, false);
robojaxText(vString, 72, 3, 1, false);
robojaxText("V", 110, 3, 1, false);
robojaxText("Temperature: 32C", 4, 11, 1, false);
robojaxText("Capacity: 92.86L", 4, 21, 1, false);
// display.desenharLinha(1, 37, 100, 37, BRANCO);
display.drawRect(1, 1, 126,31, WHITE);
// display.desenharCirculo(63,31, 31, BRANCO);
// display.startscrollright(0x00, 0x0F);
display.display();
count +=0.173;
delay(2000);
}
/*
* robojaxText(String texto, int x, int y, int tamanho, boolean d)
* texto é a string de texto a ser impressa
* x é a posição inteira x do texto
* y é a posição inteira y do texto
* tamanho é o tamanho do texto, 1, 2, 3 etc
* d é verdadeiro ou falso. Se verdadeiro, a exibição é atualizada.
*/
void robojaxText(String text, int x, int y,int size, boolean d) {
display.setTextSize(size);
display.setTextColor(WHITE);
display.setCursor(x,y);
display.println(text);
if(d){
display.display();
}
// .delay(100);
}
Coisas que você pode precisar
-
AmazonasCompre OLED 128x32 na Amazonamzn.to
-
AliExpressCompre o SSD1306 OLED 128x32 da AliExpresss.click.aliexpress.com
Recursos e referências
-
ExternoBiblioteca Adafruit-GFX (do GitHub)github.com
-
ExternoBiblioteca SSD1306 (do GitHub)github.com
Arquivos📁
Folha de dados (pdf)
-
SSD1306 display datasheetSSD1306 is a single-chip CMOS OLED/PLED driver with controller for organic / polymer light emitting diode dot-matrix graphic display system. It consists of 128 segments and 64commons. This IC is designed for Common Cathode type OLED panel. The SSD1306 embeds with contrast control, display RAM and oscillator, which reduces the number of external components and power consumption. It has 256-step brightness control. Data/Commands are sent from general MCU through the hardware selectable 6800/8000 series compatible Parallel Interface, I2C interface or Serial Peripheral Interface. It is suitable for many compact portable applications, such as mobile phone sub-display, MP3 player and calculator, etc.
SSD1306_display_datasheet.pdf1.79 MB
Arquivo Fritzing
-
SSD1306 128x32 OLED WiringFritzing wiring diagram for an SSD1306 128x32 OLED display, showing connections to a microcontroller (likely Arduino). Useful for breadboard prototyping and verifying I2C or SPI wiring.
SSD1306_128x32_wiring.fzz
Wiring diagram
-
SSD1306 128x32 OLED WiringFritzing wiring diagram for an SSD1306 128x32 OLED display, showing connections to a microcontroller (likely Arduino). Useful for breadboard prototyping and verifying I2C or SPI wiring.
SSD1306_128x32_wiring.fzz