FAVORITAR

Franzininho C0: Conexão de display OLED SSD1306 via I2C usando Arduino IDE

Introdução

A Franzininho C0 é uma placa de desenvolvimento que suporta diversas funcionalidades, incluindo a comunicação com outros dispositivos por meio do protocolo I2C. Neste tutorial, vamos explorar como utilizar o barramento I2C da Franzininho C0 com o Arduino para controlar um display OLED SSD1306.

Display OLED SSD1306

O display OLED SSD1306 é um tipo de display de tecnologia OLED (Organic Light-Emitting Diode) que usa o controlador SSD1306. Esses displays são conhecidos por sua alta qualidade de imagem e eficiência energética, o que os torna populares em projetos eletrônicos DIY, projetos de IoT e muitas outras aplicações.

Diferente dos displays LCD convencionais, os displays OLED não requerem uma fonte de luz de fundo, pois cada pixel em um display OLED emite sua própria luz. Isso resulta em níveis de contraste mais elevados, cores mais vibrantes e um ângulo de visão amplo.

Características do display SSD1306: 

Potencializando a automação com conectores menores, mais rápidos e mais fortes

Conecte-se com Confiança: Suporte à Indústria 4.0, Manufatura Inteligente e a Transição para a Indústria 5.0

Saiba mais

  • Resolução: 128×64, 128×32 ou 96×16 pixels.
  • Comunicação: I2C ou SPI
  • Alimentação: 3,3V ou 5V
  • Suporte a diversas linguagens de programação

Figura 1 – Display OLED SSD1306

I2C

O I2C (Inter-Integrated Circuit) é um protocolo de comunicação serial que permite que diferentes dispositivos se comuniquem e troquem dados através de um barramento compartilhado. Criado pela Philips Semiconductors, o I2C é amplamente utilizado em diversos dispositivos eletrônicos, como smartphones, computadores, sensores e sistemas industriais.

O principal benefício da comunicação I2C é a capacidade de conectar múltiplos dispositivos a um único barramento, facilitando a troca de dados de forma rápida e simples. Além disso, o protocolo I2C se destaca por utilizar apenas dois fios para a comunicação entre os dispositivos: um fio para o sinal de clock (SCL – Serial Clock Line) e outro para o sinal de dados (SDA – Serial Data Line). Isso torna a implementação física do barramento I2C simples e econômica.

Para mais informações acesse: Comunicação I2C – Embarcados

Circuito

Vamos começar com a montagem do circuito na protoboard.

Material e Montagem da placa 

  • Franzininho C0
  • Protoboard
  • Display OLED SSD1306
  • Jumpers

Pinout da Franzininho C0

Para definir os pinos utilizados, precisamos consultar o pinout da placa:

Acesse a documentação completa em:

https://docs.franzininho.com.br/docs/franzininho-c0/franzininho-c0-board

Montagem do Circuito

Com a protoboard em mãos e a placa Franzininho C0 já inserida nela, siga as instruções abaixo para conectar o display OLED:

  1. Conecte o GND da placa a trilha de GND da protoboard
  2. Conecte a saída de 3.3 V a trilha de VCC da protoboard
  3. Pegue o display OLED e insira-o na protoboard
  4. Conecte o terminal GND do display ao GND da protoboard
  5. Repita o passo 4 para o VCC do display
  6. Conecte o terminal SCL ao pino PB6
  7. Conecte o terminal SDA ao pino PC14

Para se orientar quanto aos pinos da Franzininho C0, basta visualizar o pinout da placa  acima.

Figura 2 – Montagem do projeto na protoboard.

Figura 2 – Montagem do projeto no Fritzing.

Código

Para exibir textos no SSD1306 usando a Franzininho C0, utilizaremos o código a seguir:

  • Obs.1: Antes da IDE iniciar o carregamento do programa, a Franzininho C0 deve executar o bootloader, caso contrário ocorrerá um erro.
  • Obs.2: Recomendamos o uso da IDE 1.8.x do Arduino para essa aplicação.

Explicação do Código

Antes do setup(), vamos incluir duas bibliotecas Wire e U8g2lib. A biblioteca ‘Wire’ do Arduino viabiliza a comunicação I2C entre microcontroladores e periféricos. Já a ‘U8g2lib’ é uma biblioteca gráfica para displays pequenos de baixo consumo, seu suporte é para múltiplos displays, incluindo OLEDs e LCDs. Essa biblioteca foi escolhida para programar o display OLED SSD1306 devido à sua eficiência em termos de ocupação de memória, sendo ideal para a Franzininho C0 que conta com 32Kb de memória flash.

Além disso, são criadas algumas variáveis globais. Usando #define, os pinos PB6 e PC14 são definidos como ‘SCL_PIN’, ‘SDA_PIN’, correspondendo aos terminais SCL e SDA do display, respectivamente.

Também é feita a inicialização da instância u8g2 para realizar as configurações do display. A configuração da biblioteca U8G2 é feita para trabalhar com um display OLED SSD1306 de 128×64 pixels, usando a interface de comunicação I2C. O parâmetro ‘U8G2_R0’ define a rotação da tela, que indicamos como não rotacionada (0 graus), já o parâmetro ‘U8X8_PIN_NONE’ especifica que não será utilizado um pino de reset dedicado.

No setup(), começamos definindo com a biblioteca Wire os pinos respectivos ao SCL e ao SDA do display. Em seguida, ‘Wire.begin()’ é usado para configurar o microcontrolador para atuar como mestre no barramento I2C.

Ainda no setup, ‘u8g2.begin()’ inicializa a biblioteca U8g2 e prepara o display OLED para receber comandos e dados. Esta função deve ser chamada antes de qualquer operação de escrita no display. Em seguida, a função ‘u8g2.clearBuffer()’ é chamada para limpar o buffer de memória da U8g2, garantindo que não haja dados residuais antes de começar a escrever.

Depois disso, usamos ‘u8g2.setFont(u8g2_font_ncenB08_tr)’ para definir a fonte a ser usada para escrever no display, ‘u8g2_font_t0_14b_tf’ é uma das várias fontes disponíveis na biblioteca U8g2. 

Com ‘u8g2.drawStr(0, 10, “Hello,!”)’ escrevemos a string “Hello,” no buffer de memória, começando na posição (0, 10) (0 é a coordenada x e 10 é a coordenada y). Aqui, mexer em x fará você escrever mais à esquerda ou à direita, enquanto mexer em y fará você subir e descer o texto. Essa função apenas especifica o que será escrito no buffer e não atualiza o display imediatamente. Da mesma forma é feito ‘u8g2.drawStr(0, 30, “Franzininho C0!”);’ que irá escrever “Franzininho C0!” abaixo do “Hello,”.

Por fim, u8g2.sendBuffer() envia o conteúdo do buffer de memória para o display, atualizando-o para mostrar o texto. Sem esta chamada, as mudanças feitas no buffer não seriam visíveis no display.

Nessa aplicação o loop() ficará vazio.

Ao executar o código, conforme mostrado na figura, podemos observar que o texto é exibido com sucesso no display.

Figura 4 – Resultado do projeto.

Conclusão

Neste tutorial, exploramos a comunicação I2C da Franzininho C0 utilizando o display OLED SSD1306.

 Devido à eficiência de memória, utilizamos a biblioteca U8g2 para configurar o display.

Através desta implementação, é possível simular e verificar o funcionamento correto do display, assegurando que os comandos de inicialização, escrita e atualização estão sendo executados conforme esperado.

Desafio

Neste desafio você irá elaborar uma rotina para desenhar retas horizontais e verticais.

O objetivo é criar funções para desenhar retas horizontais e verticais no display OLED SSD1306 usando a biblioteca U8g2. Essas funções devem permitir desenhar retas em qualquer posição do display, com qualquer comprimento dentro dos limites do display.

Outros artigos da série

<< Franzininho C0: Comunicação serial no ArduinoFranzininho C0: Automação do Acendimento de LED com Sensor LDR usando Arduino IDE >>
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
0 Comentários
Inline Feedbacks
View all comments
Home » Hardware » Franzininho C0: Conexão de display OLED SSD1306 via I2C usando Arduino IDE

EM DESTAQUE

WEBINARS

LEIA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste:


Seminário de
Sistemas Embarcados e IoT 2024
 
Data: 25/06 | Local: Hotel Holiday Inn Anhembi, São Paulo-SP
 
GARANTA SEU INGRESSO

 
close-link