Código de Pesquisa

Código Arduino e vídeo para display OLED SSD1306 128 x 32 com I2C

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.

SSD1306 OLED 128x32

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

FabricanteAdafruit
Número da peçaSSD1306
Tensão lógica/E/S3.3 - 5 V
Tensão de alimentação3.3 - 5 V
Consumo de corrente~20 mA (típ.)
Resolução do ecrã128 x 32 pixels
InterfaceI2C
Dimensões128 x 32 mm
Notas / variantesDisponí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

Arduino wiring for SSD1306 OLED 128x32
Arduino wiring for SSD1306 OLED 128x32

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.

SSD1306 OLED 128x32
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

Imagens

SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
Arduino wiring for SSD1306 OLED 128x32
Arduino wiring for SSD1306 OLED 128x32
83-Arduino code and video for SSD1306 OLED 128 x 32 display with I2C
Idioma: C++
/*********************************************************************
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

Recursos e referências

Arquivos📁

Nenhum arquivo disponível.