Usando Display OLED com Raspberry Pi 8

A Raspberry Pi é uma conhecidíssima plataforma computacional. Seja para uso pessoal, desenvolvimento ou até mesmo para diversão, ela sempre está entre as mais relevantes. Embora seja muito explorada como um sistema multimídia (ou seja, utilizando monitor HDMI, caixas de som, etc.), nem sempre isto é possível em um projeto. Algumas vezes, desejamos que a interface com o usuário seja na forma de uma interface de vídeo simples, como ocorre em eletrodomésticos, tais como: micro-ondas, máquina de lavar roupa, etc. Este artigo tratará exatamente disso: como fazer uma interface com o usuário simples através de um display OLED com Raspberry Pi. Isto abrirá possibilidades de projetos mais simples, compactos e econômicos.

Display OLED com Raspberry Pi

Por que utilizar interfaces simples?

O uso de interfaces simples com o usuário (displays LCD, sete segmentos, OLED, etc.) pode parecer à primeira vista algo ruim, afinal consegue-se muito mais com um monitor HDMI ou mesmo uma televisão. Porém, principalmente em projetos compactos e de produção em massa, objetiva-se muito o baixo consumo energético e definição de escopo do projeto. Ou seja, por mais que o hardware e poder computacional de um produto permita fazer interfaces de vídeo complexas com o usuário, é mais importante o produto ser claro quanto à sua utilização e consumir quanto menos energia for possível.

Com a Raspberry Pi isto não é diferente: utilizar HDMI (seja em um monitor ou televisão) é uma das principais fontes de consumo energético da placa. Isso pode ser impeditivo a alguns tipos de projetos e produtos, sobretudo àqueles portáteis (que funcionam à base de baterias). Além disso, na grande maioria das vezes, o usuário não precisa ter controle total do sistema operacional da Raspberry Pi para operar um projeto. Basta haver uma “telinha” dizendo a ele as informações importantes, alguns botões e está feito!

Portanto, simplificar na interface com o usuário significa consumir menos energia e ser mais direto nos projetos, coisas fundamentais nos sistemas embarcados.

Display OLED

O display OLED deste projeto consiste em um display muito pequeno (0.96 polegadas) e de boa resolução. Os displays OLED não necessitam de backlight, o que configura a ele um baixíssimo consumo energético. Além disso, devido a características de sua tecnologia, a cor preta (cor de fundo do display) é muito definida, dando um ótimo contraste à imagem exibida. O display pode ter diferentes cores, conforme mostra a figura 1. Neste post vamos usar um Display Oled 0.96¨ I2C Branco.

Figura 1 - Tipos mais comuns de displays OLED 0.96" destinado a hobbistas / makers
Figura 1 – Tipos mais comuns de displays OLED 0.96″ destinado a hobbistas / makers

Existem diversos tipos de comunicação com este display, sendo a maneira mais comum a comunicação I²C. Pelo fato da comunicação I²C ser facilmente feita com Arduino, Raspberry Pi, BeagleBone Black, etc., este tipo de display é muito usado e bem aceito entre os makers e hobbistas (sobretudo os displays com controladores SSD1306).

Descrição do projeto-exemplo

Para demonstrar o uso deste tipo de display com a Raspberry Pi, será feito um projeto simples que exibirá três fotos (em sequência) no display. Ou seja, o projeto consiste em um simples porta retrato digital com display oled. O projeto será desenvolvido em linguagem Python e utilizará bibliotecas da Adafruit.

Este projeto funciona para todos os tipos de OLED 0.96″ I²C.

Vamos utilizar as três imagens abaixo. Salve-as na mesma pasta do projeto com os nomes ImagemTeste1.png, ImagemTeste2.png e ImagemTeste3.png.

Circuito esquemático display Oled com Raspberry Pi

Abaixo, segue o circuito esquemático do projeto display Oled com Raspberry Pi. Note que é usada o barramento 1 da I²C para comunicação com display OLED.

Circuito Raspberry Pi

Instalação de bibliotecas

Para instalar todas as bibliotecas necessárias, uilize os comandos abaixo:

sudo apt-get update
sudo apt-get install build-essential python-dev python-pip
sudo pip install RPi.GPIO
sudo apt-get install python-imaging python-smbus
sudo apt-get install git
git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git
cd Adafruit_Python_SSD1306
sudo python setup.py install

IMPORTANTE: não se esqueça de habilitar a interface I2C nas configurações da Raspberry Pi (Menu > Preferences > Raspberry Pi Configuration > Interfaces)

Código-fonte

O código fonte do projeto encontra-se abaixo. Caso desejar, você encontra mais exemplos no GitHub oficial da biblioteca.

O endereço i2c (0x3c) é padrão para este tipo de display.

import time
import Adafruit_SSD1306
from PIL import Image
from PIL import ImageDraw

#Variaveis globais
# Raspberry Pi - configuracao dos pinos:
RST = 24 #embora nao utilizado de fato, eh preciso defini-lo para a biblioteca funcionar

# Configura uso do display OLED de 128x64 (comunicacao I²C)
disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)

#------------------------------------------------------
#   PROGRAMA PRINCIPAL Display Oled com Raspberry Pi
#------------------------------------------------------

#Inicializa biblioteca de comunicacao com display e o limpa
disp.begin()
disp.clear()
disp.display()

#obtem altura e largura totais do display
width = disp.width
height = disp.height

#Carregamento das imagens.
#Importante: quanto maior a imagem, mais tempo esta conversao levara.

#Carrega a imagem 1 (ImagemTeste1.png) e automaticamente ja binariza e ajusta a resolução da mesma.
image1 = Image.open('ImagemTeste1.png').resize((disp.width, disp.height), Image.ANTIALIAS).convert('1')

#Carrega a imagem 2 (ImagemTeste2.png) e automaticamente ja binariza e ajusta a resolução da mesma.
image2 = Image.open('ImagemTeste2.png').resize((disp.width, disp.height), Image.ANTIALIAS).convert('1')

#Carrega a imagem 3 (ImagemTeste3.png) e automaticamente ja binariza e ajusta a resolução da mesma.
image3 = Image.open('ImagemTeste3.png').resize((disp.width, disp.height), Image.ANTIALIAS).convert('1')

#Preparacoes necessarias para apagar tela
image = Image.new('1', (width, height)) #imagem binaria (somente 1's e 0's)
draw = ImageDraw.Draw(image)

#laco principal

while True:
	#Mostra a imagem 1 por 5 segundos
	disp.image(image1)
	disp.display()
	time.sleep(5)
	
	#desenha um retangulo preto em todo o display (para apagar "restos" de dados na 
	#area de display)
    draw.rectangle((0,0,width,height), outline=0, fill=0)
	
	#Mostra a imagem 2 por 5 segundos
	disp.image(image2)
	disp.display()
	time.sleep(5)
	
	#desenha um retangulo preto em todo o display (para apagar "restos" de dados na 
	#area de display)
    draw.rectangle((0,0,width,height), outline=0, fill=0)
	
	#Mostra a imagem 3 por 5 segundos
	disp.image(image3)
	disp.display()
	time.sleep(5)
	
	#desenha um retangulo preto em todo o display (para apagar "restos" de dados na 
	#area de display)
    draw.rectangle((0,0,width,height), outline=0, fill=0)

Para rodar este projeto, utilize o seguinte comando:

sudo python NOME_DO_SEU_ARQUIVO_PYTHON.py

Note que o uso de sudo faz-se necessário. Isto ocorre pois o acesso ao barramento I²C no Linux requer que a execução seja feita como root.

Teste Oled

Referências

Gostou do post Usando Display Oled com Raspberry Pi? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

8 Comentários

  1. Bem legal!
    Estou a procura de mais informações de como conectar o display oled em outras portas, pois estou usando o i2c pra liga/desliga (o projeto tem um botão on/off). Existe outro caminho pra ligar o oled, que não sejam essas portas?

    1. Wellington, tudo bem?

      Então, a Raspberry Pi, até onde eu conheço, possui somente esta interface I²C para programação / uso do programador e somente disponibiliza estes pinos que usei para a interface I²C em questão.

  2. Posso usar esse mesmo esquema no raspberry pi zero?

    1. Sim, sem modificação nenhuma.

  3. Boa noite, gostaria de adquirir a placa mas ainda sei muito pouco sobre a mesma. Existe um programa específico para programar a placa?

    1. Danilo, bom dia.

      Recomendo que pesquise um pouco sobre a Raspberry PI. Em resumo, ela é um computador completo (CPU, memórias e I/Os) em uma única placa de circuito impresso (do tamanho de um cartão de crédito). Ela roda um sistema operacional (há várias distribuições Linux suportadas), portanto pode ser usada e programada de infinitas maneiras.

      Atenciosamente,
      Pedro Bertoleti

  4. amigo não funciona no RaspBerry Pi 4 8 GB de Ram – 27-01-2024 as 13:20,

    sudo apt-get update
    sudo apt-get install build-essential python-dev python-pip
    sudo pip install RPi.GPIO
    sudo apt-get install python-imaging python-smbus
    sudo apt-get install git
    git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git
    cd Adafruit_Python_SSD1306
    sudo python setup.py install

Trackbacks and Pingbacks

  1. […] Veja abaixo o código-fonte do projeto! Observação: para maiores informações das bibliotecas a serem instaladas para o funcionamento do display OLED na Raspberry Pi, veja este nosso artigo. […]