Projeto 91 - Como desenhar imagens bitmap em um Display OLED SSD1306 com Arduino - biblioteca Adafruit

Básico - Projeto 91

Exibindo imagens bitmap em um Oled SSD1306 - bibliotecas Adafruit

Objetivo

Neste projeto vamos mostrar como exibir imagens bitmap em um display OLED SSD1306 com Arduino. Utilizaremos no projeto um display OLED 0.96″ I2C Azul Amarelo com controlador SSD1306 e comunicação via I2C. Também utilizaremos as bibliotecas Adafruit_GFX e Adafruit_SSD1306 responsáveis pelo controle do display, além de uma aplicativo online para transformar as imagens em matrizes de bytes.

Definições

Display OLED (Organic Light-Emitting Diode, ou Diodo Emissor de Luz Orgânico): Display gráfico com alto contraste, excelente nitidez, leve e muito econômico, pois como possui luz própria não precisa de backlight utilizado nas telas de LCD ou LED, por exemplo. Outra grande vantagem do display OLED é possibilidade de gerar imagens. Como desvantagens, o display possui uma vida útil menor (entre 10mil e 40mil horas de uso) e não deve ser utilizado em locais úmidos, pois a água danifica facilmente o componente. Para saber mais leia Projeto 90 - Como controlar um Display OLED SSD1306 com Arduino - biblioteca Adafruit.

Observações:

a) É recomendável que você leia o tutorial Projeto 90 - Como controlar um Display OLED SSD1306 com Arduino - biblioteca Adafruit antes de realizar este projeto. No tutorial você saberá como usar o display OLED SSD1306 via I2C ou SPI para exibir caracteres e desenhos.

b) Melhor utilizar display OLED monocromático (azul ou branco) ou colorido. Já o display OLED dual (duas cores) vai exibir a imagem em azul com a parte superior em amarelo.

c) Atenção: Não utilize o display em locais molhados ou úmidos, pois a água pode danificar o componente.

Aplicação

Para fins didáticos e projetos onde é necessária a exibição de figuras plotadas a partir de uma imagem em bitmap (telas iniciais de logotipos de empresa e gráficos para exibir informações).

Componentes necessários

Referência

Componente

Quantidade

Imagem

Observação

Protoboard Protoboard 830 pontos 1 Resultado de imagem para protoboard 830v

No mínimo utilizar protoboard com 830 pontos

Jumpers Kit cabos ligação macho / macho 1  
Display OLED

Display OLED SSD1306

1 Tarzan Componentes Eletrônicos | Shield Arduino| Display Oled 1.3 Polegadas  Branco 125x64 I2c - R$ 51,90

 

– Tensão de operação: 3,3-5V
– Controlador: SSD1306
– Cor: Azul e Amarelo
– Comunicação: I2C
– Resolução: 128×64
– Dimensões: 30 x 27mm

Você também poderá utilizar na cor azul, branco ou colorido.

A comunicação poderá ser I2C ou SPI

Arduino UNO R3 Arduino UNO 1

Você poderá utilizar uma placa Arduino UNO original ou similar

Montagem do Circuito

Conecte os componentes no Protoboard como mostra a figura abaixo (display OLED com comunicação I2C). Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da força enquanto você monta o circuito.


Atenção

Comunicação I2C

1. Para a montagem do display OLED SSD1306 via protocolo I2C, verifique a "pinagem" do módulo com comunicação I2C:

Obs.: Em algumas marcas os pino Vcc e GND estão invertidos. Portanto, preste atenção fazer a conexão correta.

1.1. Faça a conexão dos pinos SCL e SDA com o Arduino da seguinte forma:

MICROCONTROLADOR SCL SDA
Arduino Uno A5 A4
Arduino Nano A5 A4
Arduino Mega 21 20
Leonardo/Micro 3 2

1.2. No nosso projeto utilizamos um display OLED SSD1306 I2C e Arduino Uno. Veja abaixo como fizemos a conexão.

Comunicação serial SPI

2. Para a montagem do display OLED com comunicação SPI, temos os seguintes pinos: GND, VCC, (CLK ou D0), (MOSI ou D1), RES e DC.

2.1. Abaixo temos os modelos mais comuns de display OLE com comunicação serial SPI:

Obs.: O modelo mais à esquerda possui 6 pinos e pode ser ligado nas 2 formas (I2C e SPI)

2.1. Recomendamos para uso nos projetos deste tutorial, a seguinte configuração com o microcontrolador Arduino UNO (usar a mesma ordem dos pinos nos modelos com 7 pinos acima):

3. A montagem do nosso exemplo foi realizada em um protoboard com 400 pontos e com um display OLED SSD1306 com comunicação via protocolo I2C. Verifique sempre se o seu protoboard possui linhas de alimentação contínuas ou separadas - saiba mais em protoboard.

Incluindo as bibliotecas Adafruit SSD1306 e Adafruit GFX

Para utilizar o controlador SSD1306 vamos incluir a biblioteca Adafruit SSD1306. Esta biblioteca foi escrita para resolver a complexidade do controlador SSD1306, oferecendo comandos simples para facilitar o controle de operação do display OLED.

Para obtermos uma experiência completa, precisamos instalar também a biblioteca Adafruit GFX para exibir elementos gráficos primitivos como pontos, linhas, círculos, retângulos, etc.

Instalação das bibliotecas

1. No IDE do Arduino, acesse a aba Sketch, selecione [Incluir Biblioteca] e depois [Gerenciar Bibliotecas...].


2. No campo de pesquisa digite ssd1306 adafruit. Localizada a biblioteca Adafruit SSD1306 clique no botão [Instalar].

3. Na janela "Dependencies for library Adafruit SSD1306..." clique no botão [Install all]. Desta forma, instalaremos as bibliotecas Adafruit SSD1306, Adafruit GFX library e Adafruit BusIO todas juntas automaticamente.

4. Após a instalação, observe que aparecerá a informação que as bibliotecas foram instaladas. (Lembre-se que precisaremos das bibliotecas Adafruit SSD1306 e Adafruit GFX Library para controlar nosso display OLED)>

5. Para mais informações sobre as bibliotecas, acesse: Adafruit SSD1306 e Adafruit GFX library. Acesse o manual Adafruit GFX: Manual Completo Adafruit GFX

Preparando a imagem bitmap

1. Para termos a compreensão completa sobre como usar o display OLED para desenhar imagens bitmap controlado pelo Arduino vamos criar inicialmente a imagem da Marilyn Monroe que deverá ser exibida da seguinte forma:

2. Devemos lembrar primeiro que a resolução da tela do display OLED que vamos utilizar no nosso projeto possui 128 X 64 pixels. Portanto, imagens maiores que isso não serão exibidas corretamente.

3. No nosso exemplo vamos utilizar a imagem da Marilyn Monroe abaixo:

4. Como o nosso display tem resolução específica precisaremos converter a imagem para 128 X 64 pixels que é o tamanho correto da tela do OLED que estamos utilizando. Para isso você poderá utilizar qualquer software, como o Inkscape, Photoshop, Paint, etc. No nosso exemplo vamos utilizar o programa gratuito Paint da Microsoft:

 

5. Agora salve o arquivo com a extensão .pmp (arquivo de imagem bitmap).

6. Assim que você obteve o bitmap da imagem é hora de convertê-lo em uma matriz de bytes para que o controlador OLED SSD1306 possa entender. Isto pode ser feito utilizando o aplicativo online image2cpp. Abra o aplicativo clicando no link: image2cpp.

Converter a imagem em uma matriz de bytes (image2cpp)

1. No aplicativo image2cpp clique no botão Browse para selecionar o arquivo bmp da imagem desejada.

 2. Depois, em 2 (Image Settings), configure a imagem da seguinte forma:

  • Mantenha o tamanho em 128 X 64.
  • Selecione White.
  • O brilho varia de 0 a 255, usamos o valor de 180 mas poderá ser qualquer valor que você considerar mais adequdo.
  • Como já convertemos a imagem para o tamanho máximo (128x64) vamos usar o tamanho original (original size). Também não será necessário centralizar a imagem.

3. Visualize a imagem em 3 (Preview). Se a imagem estiver como você deseja vá para 4 (Output), ou refaça a configuração em 2 (Image Settings).

 

4. Em 4 (Output), selecione o formato de saída como código do Arduino (Arduino code). Digite um indentificador da matriz em mantenha o modo de desenho (Draw mode) como Horizontal - 1 bit per pixel. Depois clique no botão Generate Code.


5. Finalmente copie o código que deverá ser adicionado ao sketch do Arduino.


Código Arduino - Exibindo Bitmap

Agora com a matriz de bytes em mãos podemos criar o código Arduino completo para exibir a imagem bitmap no display OLED. Veja o código abaixo:

/*******************************************************************************

     Exibindo imagem de Marilyn Monroe no display OLED     
     Data: 10/11/2020
             http://squids.com.br/arduino

*******************************************************************************/
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

// 'Marilyn-Monroe', 128x64px
const unsigned char monroe [] PROGMEM = {
  0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xfd, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x7f, 0xff, 0xff, 0x80, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x80, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xfe, 0x03, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xe0, 0x00, 0xc3, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xf7, 0x0f, 0xff, 0xff, 0xff, 0xf0, 0x00, 0xe1, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xf0, 0x00, 0xf0, 0x7f, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x78, 0x3f, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0f, 0xff, 0xff, 0xf8, 0x01, 0x78, 0x1f, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xf9, 0xc0, 0x03, 0xff, 0xff, 0xf8, 0x00, 0xfc, 0x1f, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xfc, 0x07, 0x01, 0xff, 0xff, 0xf8, 0x00, 0x0c, 0x0f, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xfc, 0x0f, 0xe1, 0xff, 0xff, 0xf0, 0x00, 0x0c, 0x07, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xf8, 0x0f, 0xfb, 0xff, 0xff, 0xc0, 0x00, 0x80, 0x03, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xf0, 0x3f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x07, 0x81, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xfb, 0xff, 0xc0, 0x00, 0x00, 0xc7, 0x00, 0x7f, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xfd, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x7f, 0xff, 0x87, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x1f, 0xfe, 0x07, 0xe0, 0x00, 0x00, 0x3c, 0x3f, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x07, 0xf8, 0x3f, 0xf0, 0x00, 0x30, 0x7c, 0x3f, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xe0, 0x01, 0xff, 0x87, 0xf0, 0x7f, 0xf0, 0x00, 0x00, 0x5c, 0x3f, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xc0, 0x07, 0xff, 0xff, 0xe0, 0xff, 0xf0, 0x00, 0x10, 0x78, 0x3f, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xc0, 0x0f, 0xff, 0xff, 0xe1, 0xff, 0xe0, 0x00, 0x00, 0xfc, 0x3f, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xc0, 0x9f, 0xff, 0xff, 0xc3, 0x01, 0xc0, 0x00, 0x03, 0xfc, 0x1f, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xc4, 0x9f, 0xff, 0xff, 0xc3, 0x80, 0x00, 0x00, 0x07, 0xfc, 0x1f, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xcc, 0xdf, 0xff, 0xff, 0x83, 0xf0, 0x00, 0x00, 0x03, 0xf8, 0x9f, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xee, 0xff, 0xff, 0xef, 0x87, 0xfc, 0x00, 0x00, 0x03, 0xfe, 0xbf, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xf4, 0xbf, 0xff, 0xe7, 0x07, 0xff, 0x00, 0x00, 0x03, 0x93, 0x7f, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xee, 0xbf, 0xff, 0x00, 0x07, 0xff, 0x80, 0x00, 0x07, 0x91, 0x1f, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xec, 0x9f, 0xff, 0x00, 0x03, 0xff, 0xe0, 0x00, 0x07, 0x80, 0x1f, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xcf, 0xdf, 0xff, 0xf0, 0x03, 0xff, 0xf8, 0x00, 0x07, 0xf8, 0x1f, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xcf, 0xcf, 0xff, 0xfc, 0x01, 0xff, 0xf8, 0x00, 0x07, 0xf0, 0x1f, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0x8f, 0xdf, 0xdf, 0xff, 0x81, 0xff, 0xf0, 0x00, 0x07, 0x30, 0x3f, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0x9f, 0xcf, 0xb8, 0x1f, 0xf3, 0xff, 0xc0, 0x00, 0x07, 0x88, 0x7f, 0xff, 0xff, 
  0xff, 0xff, 0xfe, 0x8f, 0xcf, 0xf0, 0x03, 0xff, 0xff, 0x80, 0x00, 0x0b, 0x80, 0x7f, 0xff, 0xff, 
  0xff, 0xff, 0xfe, 0x67, 0xdf, 0xe0, 0x08, 0x3f, 0xff, 0x00, 0x00, 0x0d, 0x04, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xfe, 0x3e, 0xdf, 0xc0, 0x80, 0x0f, 0xfe, 0x00, 0x00, 0x0e, 0x04, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0x1e, 0xdf, 0xc3, 0xf8, 0x01, 0xfe, 0x00, 0x00, 0x07, 0x00, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xe1, 0x5f, 0x87, 0xfe, 0x01, 0xdc, 0x00, 0x00, 0x03, 0x81, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xe0, 0x3f, 0x80, 0x1f, 0x01, 0xf8, 0x00, 0x00, 0x01, 0x80, 0xbf, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xc0, 0x3f, 0x80, 0x03, 0xc0, 0xf8, 0x00, 0x00, 0x0d, 0x80, 0x7f, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xc0, 0x3f, 0x80, 0x00, 0xc1, 0xf0, 0x00, 0x00, 0x0d, 0x80, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xc0, 0x3f, 0x80, 0x00, 0x20, 0xf0, 0x00, 0x00, 0x0c, 0x81, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xc0, 0x3f, 0x80, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x0c, 0x83, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xc0, 0x3f, 0x88, 0x00, 0x00, 0xf0, 0x00, 0x01, 0xc1, 0x01, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0x80, 0x1f, 0x83, 0x80, 0x01, 0xf0, 0x00, 0x03, 0xc0, 0x01, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0x80, 0x1f, 0x80, 0x70, 0x03, 0xe0, 0x00, 0x01, 0xe0, 0x03, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0x00, 0x1f, 0xc0, 0x40, 0x07, 0xe0, 0x00, 0x01, 0x80, 0x07, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0x00, 0x1f, 0xe0, 0x80, 0x07, 0xe0, 0x00, 0x00, 0x80, 0x07, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0x00, 0x1f, 0xf8, 0x00, 0x0f, 0xc4, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0x40, 0x1f, 0xff, 0x80, 0x3f, 0xc8, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0x28, 0x0f, 0xff, 0xf8, 0x7f, 0x88, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0x1c, 0x0f, 0xff, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0x00, 0x07, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xfe, 0x00, 0x03, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xfe, 0x00, 0x03, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xfe, 0x28, 0x11, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xfe, 0x3c, 0x10, 0x7f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0x1e, 0x10, 0x03, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0x00, 0x10, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0x80, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xcc, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xbc, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xfe, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff
};


void setup()   
{                
  // initialize with the I2C addr 0x3C
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  

  // Clear the buffer.
  display.clearDisplay();

  // Display bitmap
  display.drawBitmap(0, 0,  monroe, 128, 64, WHITE);
  display.display();
}

void loop() {}

Observações:

a) Para mostrar a imagem de bitmap no display OLED, precisamos chamar a função drawBitmap () que possui seis parâmetros: Coordenada X do canto superior esquerdo, coordenada Y do canto superior esquerdo, identificador da matriz de bytes do bitmap monocromático, largura do bitmap em pixels, altura do bitmap em pixels e cor (WHITE).

b) Em nosso exemplo, a imagem bitmap tem 128 × 64 de tamanho. Portanto, as coordenadas X e Y são definidas como 0, enquanto largura e altura são definidas como 128 e 64.

// Display bitmap
display.drawBitmap(0, 0,  monroe, 128, 64, WHITE);
display.display();

c) Sobre as bibliotecas utilizadas e como inicializar o display leia o tutorial: Projeto 90 - Como controlar um Display OLED SSD1306 com Arduino - biblioteca Adafruit

d) Se você está utilizando um display OLED com comunicação SPI, substitua as linhas:

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

por:

// Declaration for SSD1306 display connected using software SPI (default case):
#define OLED_MOSI  11
#define OLED_CLK   13
#define OLED_DC     9
#define OLED_CS    10
#define OLED_RESET  8
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,
  OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

Código do Projeto (Sketch) - Exibindo imagens no display OLED

 1. Neste projeto vamos exibir 18 imagens que serão alternadas a cada 2 segundos. Para isso vamos criar um "header file" denominado images.h que irá armazenar as matrizes de bytes de todas as imagens que serão exibidas no display.

Observação: Em programação de computadores,  header file ou arquivo cabeçalho (em inglês: header file) é um arquivo que permite aos programadores separarem certos elementos de um código fonte em arquivos reutilizáveis.

1. Atenção: o arquivo images.h deverá estar na mesma pasta onde está o sketch principal:

1.2. Faça o dowload do arquivo projeto91.ino no IDE do Arduino:  DOWNLOAD - projeto91.ino

1.3. Faça o dowload do arquivo images.h no IDE do Arduino:  DOWNLOAD - images.h

1.4. No IDE do Arduino, faça a verificação e o upload para o microcontrolador. Atenção: Observe que deverá aparecer uma aba com o nome images.h, como mostra a figura abaixo. Para visualizar ou alterar o código do "header file" no IDE basta clicar sobre a aba images.h.

Obs.: Para incluir um "header file" (bibliotecas) utilize a diretiva #include (não utilize ponte e vírgula no final de uma diretiva #include).

 

2. Se você está utilizando um display OLED com comunicação SPI, substitua as linhas:

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

por:

// Declaration for SSD1306 display connected using software SPI (default case):
#define OLED_MOSI  11
#define OLED_CLK   13
#define OLED_DC     9
#define OLED_CS    10
#define OLED_RESET  8
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,
  OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

3. Veja abaixo o código do arquivo projeto91.ino:

/*******************************************************************************

     Projeto 91 - Exibindo imagens bitmap no display OLED
     Autor: Angelo Luis Ferreira
     Data: 10/11/2020
             http://squids.com.br/arduino

*******************************************************************************/
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#include "images.h" // carrega imagens 128 X 64

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
 
void setup() {                
  // initialize with the I2C addr 0x3C
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  

  // Clear the buffer.
  display.clearDisplay(); 
}

void loop() {
  for (byte i=1;i<19;i++) {
      // Display bitmap 
      if (i==1) display.drawBitmap(0, 0,  image1, 128, 64, WHITE);    
      if (i==2) display.drawBitmap(0, 0,  image2, 128, 64, WHITE);
      if (i==3) display.drawBitmap(0, 0,  image3, 128, 64, WHITE);
      if (i==4) display.drawBitmap(0, 0,  image4, 128, 64, WHITE);
      if (i==5) display.drawBitmap(0, 0,  image5, 128, 64, WHITE);
      if (i==6) display.drawBitmap(0, 0,  image6, 128, 64, WHITE);
      if (i==7) display.drawBitmap(0, 0,  image7, 128, 64, WHITE);
      if (i==8) display.drawBitmap(0, 0,  image8, 128, 64, WHITE);
      if (i==9) display.drawBitmap(0, 0,  image9, 128, 64, WHITE);
      if (i==10) display.drawBitmap(0, 0,  image10, 128, 64, WHITE);
      if (i==11) display.drawBitmap(0, 0,  image11, 128, 64, WHITE);
      if (i==12) display.drawBitmap(0, 0,  image12, 128, 64, WHITE);
      if (i==13) display.drawBitmap(0, 0,  image13, 128, 64, WHITE);
      if (i==14) display.drawBitmap(0, 0,  image14, 128, 64, WHITE);
      if (i==15) display.drawBitmap(0, 0,  image15, 128, 64, WHITE);
      if (i==16) display.drawBitmap(0, 0,  image16, 128, 64, WHITE);
      if (i==17) display.drawBitmap(0, 0,  image17, 128, 64, WHITE);
      if (i==18) display.drawBitmap(0, 0,  image18, 128, 64, WHITE);
      display.display();    
      delay(2000); 
      // Clear the buffer.
      display.clearDisplay();                
  }
 }

Vídeo

Como o projeto deve funcionar

1. Ao ligar o Arduino, as imagens serão exibidas a cada dois segundos de forma indefinida.

2. As imagens foram organizadas no arquivo images.h.

O anúncio abaixo ajuda a manter o Squids Arduino funcionando

Comentários

×

Infomações do site / SEO








×

Adicionar Marcadores