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
/*********************************************************************
This is an example for our monochrome OLEDs based on SSD1306 drivers.
This example is for a 128x32 size display using I2C.
If you get the error: Adafruit_GFX.h not found, download the Adafruit-GFX Library
https://github.com/adafruit/Adafruit-GFX-Library
Purchase this OLED module from Amazon: https://amzn.to/36zFvTb
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, check license.txt for more information.
All text above, and the splash screen must be included in any redistribution.
* Watch the video for this code to learn it fully.
* Watch the video here: https://youtu.be/RjyulqVsz2o
* This code is offered "as is" without any warranty.
* Updated by Ahmad Shamshiri for Robojax.com video tutorial
* on March 18, 2018 at 10:21 in Ajax, Ontario, Canada.
* Please view other Robojax codes and videos at http://robojax.com/learn/arduino
* If you are sharing this code, you must keep this copyright note.
*
*********************************************************************/
#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;
/*
* PIN connection:
* Pin connection see: https://www.arduino.cc/en/Reference/Wire
* for UNO: SDA to A4, SCL to A5
* for Mega2560: SDA to 20, SCL to 21
* for Leonardo: SDA to 2, SCL to 3
* for Due: SDA to 20, SCL to 21
* VCC to 5V
* GND to GND :-)
*/
// this is the Width and Height of Display which is 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);
// by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x32)
display.display();
delay(2000);
// Clear the buffer.
display.clearDisplay();
}
void loop() {
String vString = String(count, 3);// using a float and the
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.drawLine(1, 37, 100, 37, WHITE);
display.drawRect(1, 1, 126,31, WHITE);
//display.drawCircle(63,31, 31, WHITE);
//display.startscrollright(0x00, 0x0F);
display.display();
count +=0.173;
delay(2000);
}
/*
* robojaxText(String text, int x, int y,int size, boolean d)
* text is the text string to be printed
* x is the integer x position of text
* y is the integer y position of text
* size is the text size, 1, 2, 3 etc
* d is either true or false. If true, the display is updated.
*/
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📁
Nenhum arquivo disponível.