Magos do Arduino

Display LCD de 16x2 com módulo I2C PCF8574T

Aprenda a utilizar o módulo I2C PCF8574T para controlar display LCD de 16x2 com o Arduino

Magos do Arduino

Display LCD de 16x2 com módulo I2C PCF8574T

O módulo PCF8574T serve para fazer a interface do display LCD de 16x2 via comunicação serial I2C.

Com este módulo, apenas 4 jumpers são necessários para o conectar com o Arduino.

Módulo I2C PCF8574T

A biblioteca LiquidCrystal_I2C deve ser utilizada para a programação no Arduino.

Display LCD de 16x2

O protocolo I2C envolve o uso de duas linhas para enviar e receber dados: um pino de clock serial (SCL) que a placa controladora Arduino emite pulsos em um intervalo regular, e um pino de dados serial (SDA) pelo qual os dados são enviados entre os dois dispositivos.

Protocolo I2C

Display LCD de 16x2 com módulo I2C PCF8574T

Neste projeto você criará um circuito que faz o uso de um display LCD de 16x2 com módulo I2C PCF8574T no Arduino.

Para a criação deste circuito serão necessários os seguintes componentes:

  • 1x Breadboard
  • 1x Arduino UNO
  • 1x Display LCD de 16x2
  • 1x Módulo I2C PCF8574T
  • Jumpers

Circuito Display LCD de 16x2 com módulo I2C PCF8574T

Para montar o circuito, visualize na imagem a seguir como conectar os componentes entre a placa Arduino e a breadboard.

Circuito display LCD de 16x2 com módulo I2C PCF8574T

Schematics Display LCD de 16x2 com módulo I2C PCF8574T

A seguir temos o schematics do circuito, que detalha suas conexões e fornece detalhes mais específicos do que o circuito da imagem anterior.

Schematics display LCD de 16x2 com módulo I2C PCF8574T

Código fonte para o circuito do display LCD de 16x2 com módulo I2C PCF8574T

Uma vez criado o circuito, use o código fonte a seguir no Arduino IDE para fazer o upload dele na placa Arduino e assim ver o resultado do circuito em funcionamento.

/**
* Código do curso Magos do Arduino para conectar um display 
* LCD de 16x2 com o Arduino usando o módulo I2C PCF8574T.
*
* (c) Copyright KazaleIT
* @kazaleitoficial no YouTube
**/

#include <LiquidCrystal_I2C.h>

byte sorriso[8] = {
    0b00000,
    0b00000,
    0b01010,
    0b00000,
    0b00000,
    0b10001,
    0b01110,
    0b00000
};

byte coracao[8] = {
    0b00000,
    0b01010,
    0b11111,
    0b11111,
    0b11111,
    0b01110,
    0b00100,
    0b00000
};

byte casa[8] = {
    0b00100,
    0b01110,
    0b11111,
    0b01110,
    0b01010,
    0b01010,
    0b01110,
    0b00000
};

// cria uma instância do LCD
// Execute o código da Arduino IDE em 
// examples/Wire/ic2_scanner para descobrir o endereço do I2C
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
    // iniciailiza o LCD com as dimensões corretas
    lcd.init();
    
    // aciona a luz de fundo (backlight)
    lcd.backlight();

    // cria novos caracteres
    lcd.createChar(0, sorriso);
    lcd.createChar(1, coracao);
    lcd.createChar(2, casa);
}

void loop() {
    // move o cursor para a primeira coluna na primeira linha
    lcd.setCursor(0, 0);
    // imprime uma mensagem no display
    lcd.print("Magos do Arduino!");
    delay(3000);

    for (int i=0; i<17; i++) {
        // faz a rolagem do texto para a esquerda
        lcd.scrollDisplayLeft();
        delay(150);
    }

    for (int i=0; i<17; i++) {
        // faz a rolagem do texto para a direita
        lcd.scrollDisplayRight();
        delay(150);
    }

    // limpa a tela
    lcd.clear();
    lcd.print("Teste cursor");
    // move o cursor para a primeira coluna na segunda linha
    lcd.setCursor(0, 1);
    lcd.print("Parado:");
    // exibe o cursor
    lcd.cursor();
    delay(3000);

    // limpa a tela
    lcd.clear();
    lcd.print("Teste cursor");
    // move o cursor para a primeira coluna na segunda linha
    lcd.setCursor(0, 1);
    lcd.print("Piscando:");
    // piscar cursor
    lcd.blink();
    delay(3000);

    // limpa a tela
    lcd.clear();
    lcd.print("Teste cursor");
    // move o cursor para a primeira coluna na segunda linha
    lcd.setCursor(0, 1);
    lcd.print("Parado:");
    // parar de piscar o cursor
    lcd.noBlink();
    delay(3000);

    // limpa a tela
    lcd.clear();
    lcd.print("Teste cursor");
    // move o cursor para a primeira coluna na segunda linha
    lcd.setCursor(0, 1);
    lcd.print("Sem cursor:");
    // remove o cursor
    lcd.noCursor();
    delay(3000);

    // limpa a tela
    lcd.clear();
    lcd.write(byte(0));
    lcd.write(byte(1));
    lcd.write(byte(2));
    delay(3000);

    // limpa a tela
    lcd.clear();
}