Exibir imagem na tela OLED com o ESPPOP 10 usando Arduino IDE

Exibir imagem na tela OLED com o ESPPOP 10 usando Arduino IDE
Esp32 é uma pequena placa de microcontrolador compacta com requisitos mínimos de energia. Nos últimos dois anos, o ESP32 ganhou uma quantidade enorme de sucesso devido à sua versatilidade e facilidade de uso. Em muitos projetos em que a produção precisa ser exibida em um monitor serial. Então, em vez de fazer isso, podemos interface um monitor OLED com ESP32. Esta lição será um guia para interface o ESP32 com I2C 0.Tela OLED de 96 ”.

Esta lição inclui os seguintes tópicos:

  • 1: Introdução à tela OLED
  • 2: Módulo de exibição OLED de fiação para ESP32
  • 3: Instalando as bibliotecas necessárias
  • 4: Verifique o endereço I2C da tela OLED
  • 5: Exibir imagem na tela OLED com ESP32 usando Arduino IDE
  • 5.1: Converter imagem em código hexadecimal
  • 5.2: código
  • 5.3: Exemplo de código Arduino para exibição de imagem
  • 5.4: saída

1: Introdução à tela OLED

Antes de avançar mais primeiro, devemos saber o que um OLED (Diodo emissor de luz orgânica) a tela é. Os displays OLED são usados ​​como uma alternativa para o LCD. LEDs OLED são usados ​​para produzir telas de luz nas telas OLED. A tela LCD usa luz de fundo para iluminar seus pixels, enquanto os monitores OLED têm seus próprios LEDs auto -emissivos. Existem centenas de LEDs auto-iluminadores. Para exibir imagens e o brilho do texto desses LEDs, pode ser controlado por pixel por pixel.

Agora, como conhecemos alguns princípios básicos relacionados à tela OLED. O próximo passo é conectar ESP32 com um módulo de exibição OLED.

2: Módulo de exibição OLED de fiação para ESP32

A tela OLED vem principalmente com dois protocolos de comunicação diferentes. Os dois protocolos são i2c e spi. A interface periférica em série (SPI) é geralmente mais rápida que o I2C, mas preferimos o protocolo I2C do SPI, pois exigia menos número de pinos.

A imagem a seguir ilustra o diagrama de conexão ESP32 com 128 × 64 pixels (0.96 ") OLED Display.

Abaixo está a tabela de conexão:

Depois que o ESP32 é interfocado com uma tela OLED, a próxima etapa da lista é instalar todas as bibliotecas necessárias para programação ESP32 usando Arduino IDE.

3: Instalando as bibliotecas necessárias

Várias bibliotecas estão disponíveis no Arduino IDE para programar ESP32 com uma tela OLED. Aqui estaremos usando duas bibliotecas da Adafruit: SSD1306 e GFX Library.

Agora, no Arduino IDE Open Library Manager e pesquise a biblioteca SSD1306. Instale a biblioteca SSD1306 por Adafruit na barra de pesquisa.

Como alternativa, também se pode ir para: Sketch> Incluir biblioteca> Gerenciar bibliotecas

A próxima biblioteca que precisamos instalar é o GFX Biblioteca por Adafruit.

Depois que ambas as bibliotecas são instaladas com sucesso, a próxima etapa é verificar o endereço i2C onde o ESP32 está conectado.

4: Verifique o endereço I2C da tela OLED

I2C significa Comunicação de Circuito Integrado. Usando I2C, podemos interface vários dispositivos em 2 fios. No entanto, enquanto conecta -os a todos os dispositivos I2C devem usar um endereço I2C separado. Este endereço varia de 0 a 127. Por exemplo, se tivermos dois dispositivos I2C diferentes usando o mesmo endereço I2C, eles não podem ser conectados na mesma linha i2c.

Antes de interface o ESP32 com os dispositivos I2C, lembre -se de verificar o endereço I2C primeiro. Para verificar o endereço I2C do visor OLED conectado conectado ESP32 com PC, faça o upload do código fornecido no artigo Verifique o endereço I2C usando Arduino IDE.

Após o upload do código I2C, o endereço I2C pode ser visto no monitor serial. Aqui, no nosso caso, a tela OLED está conectada no endereço I2C (0x3C).

Usaremos o endereço I2C mencionado para a tela OLED no código Arduino.

5: Exibir imagem na tela OLED com ESP32 usando Arduino IDE

O primeiro passo necessário para exibir uma imagem em uma tela OLED é converter a imagem em um código hexadecimal. Usando qualquer imagem on -line para conversor hexadecimal, podemos obter código hexadecimal contra uma imagem.

1: Converter imagem em código hexadecimal

Para converter uma imagem em código hexadecimal, podemos usar qualquer ferramenta on -line ou também pode ser convertido de imagem em código hexadecimal usando a ferramenta Windows Paint. Agora siga as etapas para obter código hexadecim.

Passo 1: Clique aqui para visitar o conversor GRATUITO Image2CPP.

Passo 2: Selecione a imagem que queremos exibir no OLED.

etapa 3: Depois de selecionar a imagem, clique em abrir.

Passo 4: Na configuração de imagem, defina as dimensões para 128 x 64. O brilho pode ser definido de acordo com a imagem que o número recomendado está em torno de 150.

Escala a imagem de acordo com o tamanho e para referência, consulte a visualização de saída.

Etapa 5: Agora defina o formato de saída de código no código Arduino e prefixo como bitmap. Depois disso, clique em gerar código. Código hexadecimal de saída pode ser copiado da janela de saída.

Substitua o código hexadecimal copiado no código de amostra Arduino IDE.

2: código

Agora abra o Arduino IDE e cole o código fornecido. Lembre -se de substituir o código hexadecimal pelo único pela imagem que você precisa exibir em uma tela OLED.

/****** Linuxhint.Com ********/
#incluir
#incluir
#incluir
#Define screen_width 128
#Define screen_height 64
Adafruit_ssd1306 Display (Screen_width, Screen_Height, & Wire, -1);
estático const uint8_t image_hex_array [1024] =
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xfd, 0xb0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xfc, 0xe0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xfe, 0x60, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xfe, 0x4f, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xcc, 0x8f, 0x3e, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xce, 0x0f, 0x1e, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0x8f, 0xbe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xcd, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xcc, 0xff, 0xe6, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xce, 0x3f, 0x8e, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0x00, 0x0e, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0x80, 0x3e, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xe0, 0x7e, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, 0x7f, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfc, 0xcf, 0xff, 0xff, 0xff, 0xf1, 0xfe, 0x3f, 0xf9, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfc, 0xcf, 0xff, 0xff, 0xff, 0xf1, 0xfe, 0x3f, 0xf8, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xf8, 0xff, 0x8e, 0xff, 0xff, 0xff, 0xff,
0xff, 0x0c, 0xcf, 0x8f, 0x3e, 0x47, 0x90, 0x1e, 0x3c, 0x38, 0x1f, 0x8e, 0x1f, 0xff, 0xff, 0xff,
0xf8, 0x0c, 0xce, 0x03, 0x3e, 0x47, 0x90, 0x06, 0x30, 0x18, 0x1f, 0x1e, 0x07, 0xff, 0xff, 0xff,
0xf0, 0x3c, 0xcc, 0x03, 0x3e, 0x47, 0x90, 0x06, 0x20, 0x08, 0x3f, 0x1f, 0x81, 0xff, 0xff, 0xff,
0xf0, 0xfc, 0xcc, 0xf1, 0x3e, 0x60, 0x10, 0xe2, 0x23, 0x88, 0xfe, 0x3f, 0xe1, 0xff, 0xff, 0xff,
0xf0, 0x3c, 0xcc, 0xf9, 0x3e, 0x60, 0x31, 0xe2, 0x23, 0xc8, 0xfe, 0x3f, 0x81, 0xff, 0xff, 0xff,
0xf8, 0x1c, 0xcc, 0xf9, 0x3e, 0x60, 0x11, 0xe2, 0x23, 0xc8, 0xfc, 0x7e, 0x07, 0xff, 0xff, 0xff,
0xff, 0x0c, 0xcc, 0xf9, 0x1c, 0x47, 0x91, 0xe2, 0x23, 0xc8, 0x7c, 0x7e, 0x1f, 0xff, 0xff, 0xff,
0xff, 0xfc, 0xcc, 0xf9, 0x80, 0xc7, 0x91, 0xe2, 0x23, 0xcc, 0x18, 0xfe, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfc, 0xcc, 0xf9, 0xc1, 0xc7, 0x91, 0xe2, 0x23, 0xc6, 0x11, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xf3, 0x37, 0xcf, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
;
Void Setup ()
Serial.começar (115200); // Taxa de transmissão para comunicação serial
se(!mostrar.BEGIN (SSD1306_SWITCHCAPVCC, 0X3C))
Serial.println (f ("alocação SSD1306 falhou"));
para(;;);

Atraso (2000); // atraso 2 seg
mostrar.clearDisplay (); // Buffer de exibição transparente
mostrar.drawbitmap (0, 0, image_hex_array, 128, 64, 1);
mostrar.mostrar();

Void Loop ()

O código iniciado pela importação de bibliotecas necessárias que instalamos anteriormente. Duas bibliotecas incluem a biblioteca Wire and Adafruit. As bibliotecas de arame nos permitem usar o I2C enquanto a Adafruit ajuda a exibir o texto escrito na tela.

O próximo comando a seguir está escrito:

Adafruit_ssd1306 Display (Screen_width, Screen_Height, & Wire, -1);

Ele contém o Screen_width e Screen_height variáveis. Usando essas variáveis, definimos o tamanho da tela OLED. Aqui usamos uma tela OLED 128 × 64. Depois disso &Arame O objeto é definido para exibição.

O último parâmetro contém (-1), Esta tela que a tela OLED que estamos usando não tem um botão de redefinição externo. Caso tenhamos um botão de redefinição na tela OLED. Vamos passar este parâmetro para um pino GPIO. Depois de pressionar o botão de redefinição, a tela OLED exibirá o texto.

No meio do código, incluímos o código hexadecimal da imagem e depois disso inicializamos a comunicação i2C no endereço I2C (0x3c) é definido que encontramos anteriormente usando o código do scanner i2C.

Nas últimas linhas de código, a matriz hexadecimal é impressa no OLED usando a função de bitmap.

3: Exemplo de código Arduino para exibição de imagem

Aqui está um código fornecido para interface OLED com ESP32. No modelo de código a seguir, substitua o código hexadecimal da imagem que você deseja mostrar na tela OLED.

/****** Linuxhint.Com ********/
#incluir
#incluir
#incluir
#Define screen_width 128
#Define screen_height 64
Adafruit_ssd1306 Display (Screen_width, Screen_Height, & Wire, -1);
estático const uint8_t image_hex_array [1024] =
/*******
*******
*******
[Cole o código hexadecimal para a imagem aqui]
*******
*******
*******/
;
Void Setup ()
Serial.começar (115200); // Taxa de transmissão para comunicação serial
se(!mostrar.BEGIN (SSD1306_SWITCHCAPVCC, 0X3C))
Serial.println (f ("alocação SSD1306 falhou"));
para(;;);

Atraso (2000); // atraso 2 seg
mostrar.clearDisplay (); // Buffer de exibição transparente
mostrar.drawbitmap (0, 0, image_hex_array, 128, 64, 1);
mostrar.mostrar();

Void Loop ()

4: saída

Aqui na saída, podemos ver a imagem de design oficial de logotipo Linuxhint que convertemos em código hexadecimal anteriormente.

Exibimos com sucesso imagens em uma tela OLED I2C. Usando as mesmas etapas, qualquer imagem com proporção correta pode ser exibida em uma tela OLED.

Conclusão

Uma tela OLED é uma ótima maneira de mostrar saídas sem a necessidade de um monitor serial ou PC. Os displays OLED vêm com dois protocolos diferentes i2c e spi. I2C OLED Displays são preferidos devido a um número menor de fios. Esta lição fornece todas as etapas necessárias para exibir uma imagem em uma tela I2C OLED com ESP32 usando o Arduino IDE.