Utilizando um display OLED na Raspberry Pi - MakerHero
Utilizando um display OLED na Raspberry Pi

Utilizando um display OLED na Raspberry Pi

Deixe um comentário

Nesta aula, vamos explorar como utilizar um display OLED com a Raspberry Pi, uma prática essencial para quem deseja adicionar uma interface de saída visual aos seus projetos. Você aprenderá a escolher e conectar o display OLED, habilitar a interface I2C, instalar as bibliotecas necessárias e desenvolver um código em Python para exibir informações no display.

Como utilizar um display OLED na Raspberry Pi?

Os displays OLED (Organic Light-Emitting Diode) são componentes ideais para projetos com a Raspberry Pi, oferecendo telas de alta qualidade, baixo consumo de energia e excelente contraste. Eles são utilizados em diversos projetos para exibir informações, como dados de sensores, notificações ou criar interfaces de usuário. 

Para utilizar um display OLED com a Raspberry Pi, você precisará seguir algumas etapas principais:

  • Escolha do Display OLED e Conexão Física: O primeiro passo é escolher um display OLED adequado ao seu projeto. Existem diferentes tipos, tamanhos e interfaces de conexão disponíveis. A interface mais comum é a I2C, que permite uma comunicação eficiente usando apenas dois pinos da Raspberry Pi (SDA e SCL). Após a escolha, conecte o display à Raspberry Pi usando fios jumper, garantindo que os pinos correspondentes de alimentação (VCC e GND) e dados (SDA e SCL) estejam conectados corretamente.
  • Habilitação da Interface I2C na Raspberry Pi: Para comunicar com o display OLED, você deve habilitar a interface I2C na Raspberry Pi. Isso pode ser feito acessando o “Raspberry Pi Configuration” no sistema operacional Raspberry Pi OS. Vá até a aba “Interfaces” e ative o I2C.
  • Instalação de Bibliotecas Necessárias: Para controlar o display OLED, você precisará de bibliotecas específicas que auxiliam na comunicação I2C e na manipulação da tela. A biblioteca Adafruit_Python_SSD1306 é amplamente utilizada para displays OLED que utilizam o controlador SSD1306. Além disso, instale a biblioteca Pillow para manipulação de imagens e texto:
  • Código Python para Exibir Informações no Display: Com o hardware conectado e as bibliotecas instaladas, o próximo passo é escrever um código Python para exibir informações no display OLED. Comece importando as bibliotecas necessárias e inicializando o display. Em seguida, defina o que deseja exibir (texto, imagens, etc.) e envie os dados para a tela.
  • Testes e Ajustes Finais: Após executar o código, o display OLED deverá exibir o texto ou imagem configurado. Caso não funcione, verifique as conexões e o endereço I2C do display (pode ser necessário ajustar o endereço I2C no código). Utilize o comando i2cdetect para descobrir o endereço correto.

Ao seguir essas etapas, você conseguirá utilizar um display OLED com a Raspberry Pi para uma ampla gama de aplicações, permitindo que o seu projeto ganhe uma interface de saída visual atraente e informativa.

Introdução a comunicação I2C

I2C (Inter-Integrated Circuit) é um protocolo de comunicação serial amplamente utilizado para conectar microcontroladores, sensores, displays e outros periféricos em projetos eletrônicos. Na placa Raspberry Pi, a interface I2C é comumente usada para se comunicar com componentes externos, como displays OLED, sensores de temperatura, acelerômetros, entre outros.

O protocolo I2C foi desenvolvido pela Philips Semiconductor (agora NXP Semiconductors) na década de 1980 e é projetado para permitir a comunicação entre dispositivos em um barramento compartilhado. Este protocolo utiliza apenas dois fios para comunicação:

  • SDA (Serial Data): linha de dados que transporta informações entre dispositivos.
  • SCL (Serial Clock): linha de relógio que sincroniza a transferência de dados.

No protocolo I2C, cada dispositivo conectado ao barramento possui um endereço único, que pode ser de 7 ou 10 bits. Este endereço é usado para identificar o dispositivo durante a comunicação. A Raspberry Pi, por exemplo, envia comandos e dados para o endereço específico de um display OLED conectado ao barramento. 

Algumas das características da comunicação I2C incluem:

  • Controller (master) e Target (slave): O protocolo I2C é baseado em uma arquitetura mestre-escravo. A Raspberry Pi atua como o dispositivo “Controlador” que controla o barramento, enquanto o display OLED ou outros dispositivos são “Alvos”. O Controlador inicia e controla todas as comunicações, enquanto os Alvos respondem aos comandos.
  • Velocidades de Comunicação: O I2C suporta diferentes velocidades de comunicação, como: Standard Mode (até 100 kHz), Fast Mode (até 400 kHz) e High-Speed Mode (até 3,4 MHz). A escolha da velocidade depende dos requisitos do projeto e das especificações dos dispositivos conectados.
  • Simplicidade e Eficiência: O I2C é projetado para ser simples e eficiente em distâncias curtas, tornando-o ideal para comunicação entre componentes em uma placa de circuito ou em protótipos de projetos eletrônicos.
  • Economia de Pinos GPIO: Como o I2C utiliza apenas dois pinos (SDA e SCL), você pode conectar vários dispositivos sem ocupar muitos pinos GPIO, deixando-os livres para outras funções.
  • Suporte Amplo: Muitos dispositivos e sensores, como displays OLED, módulos de RTC (Relógio de Tempo Real), sensores de temperatura, entre outros, suportam a comunicação I2C.
  • Flexibilidade: A comunicação I2C permite a fácil adição ou remoção de dispositivos no barramento, apenas conectando-os aos mesmos fios SDA e SCL.

Materiais Necessários

Para montar o circuito para utilizar um display OLED com a Raspberry Pi, vamos precisar dos seguintes materiais:

Circuito para utilizar um display OLED com a Raspberry Pi

Na placa Raspberry Pi, os pinos dedicados para a comunicação I2C são o GPIO 2 (pino físico 3) para o sinal de dados SDA (Serial Data) e o GPIO 3 (pino físico 5) para o sinal de relógio SCL (Serial Clock):

display OLED

Abaixo está representado o circuito de montagem para utilizar o display OLED com a Raspberry Pi:

circuito montado display OLED

O circuito montado conforme o esquema ficará como mostrado na figura abaixo:

circuito montado

Instalação das bibliotecas para o display OLED na Raspberry Pi

Para utilizar um display OLED com a Raspberry Pi, é necessário instalar algumas bibliotecas que permitirão a comunicação entre o microcontrolador e o display via protocolo I2C, além de bibliotecas que facilitam a manipulação de gráficos, textos e imagens na tela.

Antes de instalar qualquer biblioteca, é recomendável atualizar o sistema operacional para garantir que todas as dependências estejam atualizadas. Execute os seguintes comandos no terminal:

sudo apt-get update
sudo apt-get upgrade

Para testar a comunicação I2C e verificar se o display OLED está corretamente conectado, instale as ferramentas I2C:

sudo apt-get install -y i2c-tools

A biblioteca SMBus  é necessária para que o Python se comunique com dispositivos conectados ao barramento I2C:

sudo apt-get install -y python3-smbus

A biblioteca Pillow é necessária para manipulação de imagens e textos para exibição no display OLED:

sudo apt-get install python3-pil

A biblioteca NumPy é utilizada para cálculos e manipulações matemáticas necessárias em diversas bibliotecas:

sudo apt-get install python3-numpy

Para gerenciar as bibliotecas Python de forma isolada, é recomendável criar um ambiente virtual. Primeiro, instale o pacote python3-venv (caso ainda não esteja instalado):

sudo apt-get install python3-venv

Escolha um diretório para o ambiente virtual (por exemplo, myenv) e crie o ambiente com o comando:

python3 -m venv myenv

Ative o ambiente virtual:

source myenv/bin/activate

Após ativar o ambiente virtual, o nome do ambiente aparecerá no prompt do terminal, indicando que o ambiente está ativo.

Com o ambiente virtual ativado, instale as seguintes bibliotecas necessárias para o projeto:

pip3 install adafruit-circuitpython-ssd1306
pip3 install Pillow

Para melhorar o desempenho do display OLED, especialmente em animações rápidas, ajuste a velocidade do barramento I2C para 1 MHz (padrão pode estar configurado para 100 kHz ou 400 kHz). Edite o arquivo de configuração com o comando:

sudo nano /boot/firmware/config.txt

Adicione a seguinte linha ao final do arquivo:

dtparam=i2c_baudrate=1000000

Instalação das bibliotecas

Use as teclas CTRL+O para salvar e CTRL+X para sair.

Depois de instalar todas as bibliotecas e fazer as configurações necessárias, você pode desativar o ambiente virtual com o comando:

deactivate

Código Python para utilizar um display OLED com a Raspberry Pi

Agora você pode criar um script Python para utilizar o display OLED com a Raspberry Pi. Crie um arquivo Python com um nome como oled-raspberry-pi.py.

nano oled-raspberry-pi.py

Use o seguinte código:

#Bibliotecas utilizadas
import board
import busio
from PIL import Image, ImageDraw, ImageFont
import adafruit_ssd1306

# Configuracoes do display
WIDTH = 128
HEIGHT = 64

#Configuracao do I2C
i2c = busio.I2C(board.SCL, board.SDA)

#Inicializacao do display OLED
oled = adafruit_ssd1306.SSD1306_I2C(WIDTH, HEIGHT, i2c, addr=0x3C)

# Limpar display
oled.fill(0)
oled.show()

# Cria uma imagem em modo 1-bit (preto e branco)
image = Image.new("1", (oled.width, oled.height))
draw = ImageDraw.Draw(image)

# Carrega a fonte padrao
fonte = ImageFont.load_default()

# Texto a ser exibido 
texto = "Ola mundo!"

# Desenha o texto na imagem
draw.text((0,0), texto, font=fonte, fill=255) 

# Mostra a imagem no display
oled.image(image)
oled.show()

Depois de colar o código no nano, pressione Ctrl+O para salvar e Enter para confirmar. Finalmente, saia do editor com Ctrl+X.

Agora ative novamente o ambiente virtual com o seguinte comando:

source myenv/bin/activate

Por fim, use o seguinte comando para executar o programa Python:

python3 oled-raspberry-pi.py

Quando o código for executado, ele irá interagir com o display OLED conectado aos pinos I2C da placa Raspberry Pi para exibir a mensagem “Ola mundo”.

Display OLED conectado aos pinos I2C da placa

Utilizando display OLED com a Raspberry Pi: Possíveis Erros

Ao trabalhar com um display OLED na placa Raspberry Pi, alguns erros comuns podem ocorrer, como:

  • Endereço I2C Incorreto: O display OLED pode ter um endereço I2C diferente do que está configurado no código. Use o comando i2cdetect -y 1 no terminal da Raspberry Pi para verificar o endereço correto do dispositivo I2C. Certifique-se de usar o mesmo endereço no seu script Python.
  • Interface I2C Desativada: A interface I2C pode estar desativada na Raspberry Pi. Certifique-se de que a interface I2C está habilitada através da ferramenta raspi-config. Para habilitá-la, execute sudo raspi-config, vá para “Interfacing Options” e ative a opção I2C.
  • Conexões Físicas Incorretas: Verifique se os pinos SDA (GPIO 2) e SCL (GPIO 3) da Raspberry Pi estão corretamente conectados aos pinos correspondentes do display OLED. Um erro comum é conectar os pinos aos terminais errados ou não fazer as conexões corretamente.
  • Bibliotecas Não Instaladas Corretamente: Se as bibliotecas necessárias, como luma.oled ou Pillow, não estiverem instaladas corretamente, o script não funcionará. Verifique se todas as bibliotecas foram instaladas no ambiente virtual correto e sem erros.
  • Problemas de Fonte de Alimentação: O display OLED pode não estar recebendo energia suficiente da Raspberry Pi. Verifique se o display está corretamente alimentado e se a fonte de alimentação da Raspberry Pi fornece potência suficiente para todos os periféricos conectados.
  • Códigos Python com Erros de Sintaxe ou Execução: Revise o código Python para garantir que não haja erros de sintaxe ou lógica que possam impedir o funcionamento correto do display. Verifique também se o código está configurado para a resolução e o tipo corretos de display.
  • Ambiente Virtual Não Ativado: Certifique-se de que o ambiente virtual Python foi ativado corretamente antes de executar o script. Caso contrário, as bibliotecas instaladas no ambiente virtual não estarão disponíveis para o script.
  • Incompatibilidade com o Display OLED: Certifique-se de que o display OLED utilizado é compatível com a Raspberry Pi e que o controlador (como SSD1306) é suportado pela biblioteca que você está utilizando.

Faça seu comentário

Acesse sua conta e participe