Neste post vamos mostrar como você pode usar dois displays LCD I2C no Arduino para mostrar informações distintas. É uma dúvida que de vez em quando aparece aqui no blog, e você verá que o funcionamento é bem simples.

Dois displays LCD 16x2 I2C com Arduino

Este projeto pode ser usado por exemplo para mostrar em um display um contador parcial e no outro um contador total, ou implementado em uma impressora 3D para que esta exiba mais informações relevantes para o operador. 

Você não precisa necessariamente ter dois displays iguais, podendo ligar um modelo 16×2 com um 20×4, dois displays LCD 20×4, etc. Você pode inclusive usar esses dois displays com outros sensores e módulos I2C, já que eles podem funcionar no mesmo barramento: temos aqui no Arduino e Cia um post mostrando como usar um display LCD 16×2 com um módulo RTC DS1307, ambos I2C.

Descobrindo o endereço I2C do display

Para esse experimento vamos usar dois displays LCD 16×2 I2C Backlight Azul  já com o módulo I2C integrado, o que é muito prático pois evita que você tenha que soldar todos os pinos no display.

Antes de mais nada, precisamos descobrir o endereço I2C dos displays que estamos usando. Isso é necessário pois vamos ligar os dois displays no mesmo barramento, e eles devem ter endereços diferentes para que sejam acionados de forma independente e correta.

O módulo que estou usando já vem com um endereço padrão de fábrica: 0x3F. Para selecionar um novo endereço, você deve soldar o pad correspondente (A0A1 e A2), mostrado na imagem abaixo (seleção endereço I2C):

Detalhe módulo LCD I2C

Soldando os pads A0, A1 e A2, você pode ter até 8 combinações diferentes de endereço, ou seja, você pode ligar até 8 displays desse tipo no mesmo barramento. No meu teste, soldei o pad A2 e obtive o endereço I2C 0x3B.

Detalhe solda endereço I2C

Esse endereço pode variar de módulo para módulo, ok? Eu tenho um outro display aqui que tem o endereço I2C padrão 0x27. Para se certificar de qual endereço I2C o seu display possui, vamos usar um programa chamado I2CScanner, que faz exatamente o que o nome sugere: escaneia o barramento I2C, mostrando o endereço dos dispositivos conectados.

Antes de mais nada, monte o circuito abaixo, não se esquecendo de deixar os dois displays com endereços I2C diferentes. A alimentação dos displays virá dos pinos Vcc (fio vermelho) e GND (fio preto), e a comunicação I2C será feita pelo pino analógico A4 (SDA – Fio verde), e A5 (SCL – Fio amarelo) do Arduino Uno:

Circuito Arduino Uno e display LCD I2C

Com o circuito montado, carregue o programa abaixo no Arduino:

//Programa: I2CScanner - Escaneamento de barramento I2C

#include <Wire.h>

void setup()
{
  Wire.begin();
  Serial.begin(115200);
  Serial.println("nI2C Scanner");
}

void loop()
{
  byte error, address;
  int nDevices;

  Serial.println("Scanning...");
  nDevices = 0;
  for(address = 1; address < 127; address++ ) 
  {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
    if (error == 0)
    {
      Serial.print("Dispositivo I2C encontrado no endereco 0x");
      if (address<16) 
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");

      nDevices++;
    }
    else if (error==4) 
    {
      Serial.print("Erro desconhecido no endereco 0x");
      if (address<16) 
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("Nenhum dispositivo I2C encontradon");
  else
    Serial.println("Concluido. Novo escaneamento em 5 segundos...n");

  delay(5000);        
}

Após o carregamento, abra o serial monitor. Se as ligações estiverem corretas, você verá na tela o endereço dos dois displays:

I2CScanner - Display I2C

Caso apareça apenas um endereço, verifique as conexões e se a solda no pad foi feita corretamente.


Acionando dois displays I2C com Arduino

Existem diversas bibliotecas para uso com display I2C, e neste programa vou usar a biblioteca LiquidCrystal I2C, instalada à partir da própria IDE do Arduino.

Acesse o menu Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas e procure por liquidcrystal_I2c, conforme a imagem abaixo. Clique em instalar:

Para acionar dois displays no mesmo programa, vamos usar os endereços obtidos anteriormente, alterando as linhas 8 e 11 do programa abaixo.

Na linha 8 temos o display1 no endereço 0x3F e na linha 11 o display2 no endereço 0x3B. Com os displays identificados no programa, basta usar os comandos que já estamos acostumados (lcd.setCursor(), lcd.clear()lcd.print(), etc).

//Programa: Ligando dois displays LCD I2C no Arduino
//Autor: Arduino e Cia

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

//Display LCD 1 no endereco 0x3F, 16 linhas e 2 colunas
LiquidCrystal_I2C display1(0x3F,16,2);

//Display LCD 2 no endereco 0x3B, 16 linhas e 2 colunas
LiquidCrystal_I2C display2(0x3B,16,2);

void setup()
{
  //Inicializa os displays
  display1.init();
  display2.init();

  //Liga o backligh (luz de fundo)
  display1.backlight();
  display2.backlight();

  //Mostra texto no display 1
  display1.setCursor(0,0);
  display1.print("Este e o display");
  display1.setCursor(4,1);
  display1.print("numero 1");
  
  //Mostra texto no display 2
  display2.setCursor(0,0);
  display2.print("Este e o display");
  display2.setCursor(4,1);
  display2.print("numero 2");
}

void loop()
{}

Confira também o post Como usar um display LCD I2C com Raspberry Pi, aqui mesmo no Arduino e Cia.

5/5 - (3 votes)