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):
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.
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:
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:
Caso você esteja usando um Arduino Mega 2560, utilize os pinos 20 (SDA) e 21 (SCL):
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
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.