Como usar o módulo I2C com Arduino e display 16×2? Quem precisa conectar um display LCD 16×2 ou 20×4 ao Arduino sabe que vai precisar de pelo menos 6 fios (ou jumpers) para conexão. Em placas com um número menor de  portas, como o Arduino Uno, isso significa sacrificar algumas portas que poderiam ser utilizadas para ligação de outros componentes, como sensores ou motores. Um módulo que pode ser utilizado para contornar esse problema é o módulo I2C para display LCD com CI PCF8574 (datasheet):

Módulo I2C display LCD Arduino

Com esse módulo, você consegue controlar um display LCD, seja ele 16×2 ou 20×4,  utilizando apenas dois pinos do Arduino: o pino analógico 4 (SDA) e o pino analógico 5  (SCL), que formam a interface de comunicação I2C.

Estrutura do módulo I2C

Na lateral esquerda do módulo temos 4 pinos, sendo que dois são para alimentação (Vcc e GND), e  os outros dois são da interface I2C (SDA e SCL).

O potenciômetro da placa serve para ajuste do contraste do display. O jumper na lateral oposta permite que a luz de fundo (backlight) seja controlada pelo programa ou permaneça apagada.

Detalhes da placa

Por padrão o módulo vem configurado com o endereço 0x27, mas você pode alterar esse endereço utilizando os pinos A0, A1 e A2 seguindo a tabela abaixo:

Tabela endereços I2C

Em alguns casos o módulo I2C pode vir configurado com uma faixa de endereços diferente, para descobrir qual o endereço do módulo, utilize o programa I2C Scanner, que eu mostro nesse post.

Ligação do módulo I2C com Arduino e display LCD 16×2

O módulo possui 16 pinos que podem ser ligados diretamente ao display, ou você pode  testar a conexão na protoboard, como eu fiz montando o circuito abaixo, onde utilizei um display LCD 16×2 com controlador HD44780 ligado ao Arduino Uno:

Circuito Arduino Uno LCD 16x2 I2C

Caso você esteja usando um Arduino Mega 2560, utilize os pinos 20 (SDA) e 21 (SCL):

Circuito Arduino Mega 2560 LCD 16x2

Programa e biblioteca LiquidCrystal_I2C

Para controlar esse módulo I2C vamos utilizar a biblioteca LiquidCrystal_I2C, que pode ser instalada a partir da própria IDE do Arduino.

Para isso, na IDE acesse o menu Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas. Na janela do Gerenciador de Bibliotecas, procure por liquidcristal_I2c e instale a biblioteca LiquidCrystal I2C by Frank de Brabander, conforme imagem abaixo

Biblioteca LiquidCrystal_I2C IDE Arduino

Dúvidas na instalação da biblioteca? Confira o post Como instalar uma biblioteca na IDE Arduino.

Os comandos para controle do display são praticamente os mesmos da biblioteca  LiquidCrystal que utilizamos normalmente, com comandos como lcd.print()  e lcd.setCursor().

Não se esqueça de alterar a linha 8 do programa, colocando o endereço I2C do display que você tem aí, ok? Utilize o I2CScanner, como eu comentei anteriormente. No meu caso, o endereço I2C do display é 0x27.

Na biblioteca I2C, o comando lcd.setBacklight() liga (HIGH) ou desliga (LOW) a luz de fundo do display. Uso isso nas linhas 17 e 23 do programa.

//Programa: Display LCD 16x2 e modulo I2C
//Autor: Arduino e Cia

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

//Inicializa o display no endereco 0x27
LiquidCrystal_I2C lcd(0x27,16,2);
 
void setup()
{
 lcd.init();
}
 
void loop()
{
  lcd.setBacklight(HIGH);
  lcd.setCursor(0,0);
  lcd.print("Arduino e Cia !!");
  lcd.setCursor(0,1);
  lcd.print("LCD e modulo I2C");
  delay(1000);
  lcd.setBacklight(LOW);
  delay(1000);
}

Para usar o módulo I2C com Arduino e display LCD 20×4, altere a linha 8. Nesse caso, a linha fica assim:

LiquidCrystal_I2C lcd(0x27,20,4);

Para conexão do display 20×4 usamos o mesmo esquema de conexão mostrado acima.

No artigo LCD 16×2 com módulo I2C e RTC DS1307 eu mostro como utilizar esse módulo juntamente com o módulo RTC DS1307 para mostrar as informações de data e hora no display.

Atualizado em 27/12/2016: Quer usar esse módulo I2C na Raspberry Pi? Veja como fazer isso no post Como usar um display LCD I2C com Raspberry Pi!

Atualizado em 21/02/2018: Quer ligar dois displays I2C ao mesmo tempo? Confira também o post Como conectar dois displays LCD I2C no Arduino.

Atualizado em 22/08/2020: Inclusão da biblioteca pela IDE Arduino.

3/5 - (23 votes)