Franzininho WiFi: Display LCD 16×2 com comunicação I2C

Este post faz parte da série Franzininho WiFI - Arduino

Introdução

O Display LCD 16×2 é amplamente utilizado em projetos que requerem uma interface homem-máquina (IHM) eficiente. Com 16 colunas e 2 linhas, esse display exibe caracteres, letras e números com clareza e nitidez, graças à sua cor monocromática e backlight. Essa combinação melhora a visibilidade para quem recebe as informações.

O Display LCD 16×2 utiliza o controlador HD44780, que é amplamente adotado na indústria de LCDs como base de interface. 

Neste artigo vamos utilizar um dos modelos de LCD que utilizam o módulo expansor de I/O I2C PCF8574 para interfacear com o display e para simplificar a interface de comunicação com o Franzininho WiFi.

Instalação da Biblioteca 

Vamos instalar a  biblioteca LiquidCrystal_I2C.h , para auxiliar na configuração do canal I2C e acessar os métodos que irão imprimir na tela letras e/ou números em nosso exemplo de projeto. Siga os passos abaixo para realizar a instalação.

Acesse: Ferramenta -> Gerenciador de Bibliotecas (Tools  -> Manager Libraries)

Figura 1: Acessando o gerenciador de bibliotecas

Após acessar o Gerenciador de biblioteca (Manager Libraries) aguarde até que surja uma janela como mostrado na figura abaixo. Digite no campo de texto : liquidcrystal i2c e aguarde o resultado da pesquisa finalizar. Procure pela biblioteca LiquidCrystal I2C by Frank de Brabander e clique em Install para concluir a instalação e clique em Close. Pronto já estamos aptos a utilizar a biblioteca.

Display LCD 16x2
Figura 2: Instalação da biblioteca

Biblioteca LiquidCrystal I2C

Após realizar a instalação da biblioteca vamos apresentar os métodos utilizados no exemplo de projeto. Para mais informações sobre a biblioteca, consulte o repositório no GitHub

 init()

Inicia a comunicação I2C e envia os comandos para o controlador informando o número de linhas e colunas (16×2, 16×4 ou 20×4).

void init(void);

 clear()

Limpa todos os caracteres da tela.

void clear(void);

backlight()

Aciona a luz de fundo do display para visualizar os caracteres impressos.

void backlight(void);

noBacklight()

Desliga a luz de fundo do display, esse método é utilizado quando a aplicação precisa economizar energia ou diminuir a exposição a luz

void noBacklight(void);

home()

Posiciona o cursor para a posição de origem (0,0).

void home(void);

 setCursor()

Posiciona o cursor na posição desejada.

void setCursor(uint8_t col, uint8_t row );
  • col : coluna onde posiciona o cursor
  • row : linha onde o cursor vai se posicionar

Lembre-se: Cada display possui um número máximo de linhas e coluna, caso o cursor seja posicionado fora desse limites os caracteres não serão visíveis, por exemplo 16×2 temos a linha 0 e linha 1.

 scrollDisplayLeft()

Empurra os caracteres para o lado direito

void scrollDispalyLeft(void);

 scrollDisplayRight()

Empurra os caracteres para o lado direito.

void scrollDispalyRight(void );

Materiais necessários

Os materiais necessários para desenvolver nossa aplicação são:

  • Placa Franzininho WiFi
  • Display LCD 16×2
  • Módulo I2C PCF85740
  • Jumpers
  • Arduino IDE 

Circuito 

Abaixo temos a montagem do circuito. O módulo comunica-se via I2C, confira as conexões antes de ligar o display. 

Figura 3: Montagem do circuito com display com módulo i2c e o Franzininho WiFi

Observe na parte posterior do display temos o módulo I2C o qual vai facilitar a comunicação entre a Franzininho WiFi e o display LCD. Abaixo temos a imagem mostrando cada elemento.

Figura 4: Modulo I2C PCF8754
  1. Jumper para acionar o backlight;
  2. Jumpers para selecionar o endereço I2C, por padrão não vem soldados;
  3. Trimpot para ajustar a nitidez dos caracteres, caso os caracteres não estejam visíveis, rotacione o eixo com auxílio de uma chave.

Código

/*
 Autor: Equipe Embarcados
*/


//Incluir biblioteca
#include <LiquidCrystal_I2C.h>


#define COL 16 // Número de coluna
#define ROW 2 //Números de linhas
#define ADDR_I2C 0x27 // Endereço I2C


// Declarando construtor
LiquidCrystal_I2C lcd(ADDR_I2C,COL,ROW);


// Declarando váriaveis
const char sentence_cursor_on[] = "Cursor On";
const char sentence_cursor_off[] = "Cursor Off";


int i ;
size_t sz;


void setup()
{
 //Inicia a comunicação I2C
 lcd.init();
 //Limpa a tela
 lcd.clear();
 //Habilita o backlight        
 lcd.backlight();     
  //Posiciona na coluna 2 e linha 0 o cursor na tela
 lcd.setCursor(2,0);  
 //Imprime na tela a frase "Franzininho"
 lcd.print("Franzininho");


 //Posiciona na coluna 5 e linha 1 cursor na tela
 lcd.setCursor(5,1);
 //Imprime na tela a frase "WiFi"
 lcd.print("WiFi");
 delay(5000);
 //Limpa a tela
 lcd.clear();
 //Habilita o curso para piscar na tela
 lcd.blink();
  //Recebe a quantidade de caracteres da frase
 sz = strlen(sentence_cursor_on);
 //Posiciona o cursor para a linha zero e coluna zero
 lcd.home();
 //Escreve caracter por caracter
 for(i = 0; i<sz; i++)
 {
   lcd.print(sentence_cursor_on[i]);
   delay(500);
 }
 delay(2000);
  //Limpa a tela
 lcd.clear();
 //Desabilitar o cursor
 lcd.noBlink();
  //Recebe a quantidade de caracteres da frase
 sz = strlen(sentence_cursor_off);
 //Posiciona o cursor para a linha zero e coluna zero
 lcd.home();
 //Escreve caracter por caracter
 for(i = 0; i<sz; i++)
 {
   lcd.print(sentence_cursor_off[i]);
   delay(500);
 }
 delay(2000);


 //Desabilita o backlight
 lcd.noBacklight();
 delay(1000);
 //Habilita o backlight        
 lcd.backlight();
  delay(2000);
 //Limpa a tela
 lcd.clear();
 //Posiciona o cursor na tela
 lcd.setCursor(1,0);  
 //Imprime na tela a frase "Fim Demo"
 lcd.print("Fim Demo ;)");  
}
void loop() {
 }

Simule o exemplo no Wokwi: https://wokwi.com/projects/368696714054290433

Explicação do Código

Inclui a biblioteca para acessar os métodos e declarar o(s) objeto(s).

//Incluir biblioteca
#include <LiquidCrystal_I2C.h>

Define o número de colunas e linhas de acordo com o modelo do display, em nosso projeto utilizamos o 16×2 e o endereço I2C padrão.

#define COL 16 // Número de coluna
#define ROW 2 //Números de linhas
#define ADDR_I2C 0x27 // Endereço I2C

Declara o construtor junto com os parâmetros de endereço, número de colunas e linhas. A partir dele vamos fazer a chamada dos métodos da biblioteca.

// Declarando construtor
LiquidCrystal_I2C lcd(ADDR_I2C,COL,ROW);

Declara as variáveis do tipo char para receber as frases a serem impressas no display. 

// Declarando váriaveis
const char sentence_cursor_on[] = "Cursor On";
const char sentence_cursor_off[] = "Cursor Off";

Declara as variáveis para percorrem caracter por caracter, um índice (i) e armazenar a quantidade de caracter em cada frase. 

int i ;
size_t sz;

No setup fazemos a configuração do display pelo método init(), internamente dele iniciamos a comunicação I2C com o módulo e logo envia-se os comandos do display. Após passar essa etapa limpamos a tela do display, garantindo que durante o processo de inicialização não impressos caracteres oriundo de ruídos ou interferências e por fim habilita a luz de fundo do display. 

//Inicia a comunicação I2C
 lcd.init();
 //Limpa a tela
 lcd.clear();
 //Habilita o backlight        
 lcd.backlight();   

A primeira etapa da demonstração inicia posicionando as frases por meio do curso (setCursor) e logo após imprimindo (print). Tenha em mente que antes de enviar algum caractere na tela é necessário posicionar no local desejado.

//Posiciona na coluna 2 e linha 0 o cursor na tela
 lcd.setCursor(2,0);  
 //Imprime na tela a frase "Franzininho"
 lcd.print("Franzininho");


 //Posiciona na coluna 5 e linha 1 cursor na tela
 lcd.setCursor(5,1);
 //Imprime na tela a frase "WiFi"
 lcd.print("WiFi");
 delay(5000);

 Após aguardar 5 segundo limpa a tela e habilita para visualizar o cursor na tela.

//Limpa a tela
 lcd.clear();
 //Habilita o curso para piscar na tela
 lcd.blink();

A segunda demonstração de uso vamos escrever caracter por caracter posicionando o cursor no canto esquerdo superior da tela (home) utilizando um laço de repetição, para isso é necessário um variável para percorrer o vetor (indice) e saber o comprimento do vetor pela função (strlen).  

sz = strlen(sentence_cursor_on);
 //Posiciona o cursor para a linha zero e coluna zero
 lcd.home();
 //Escreve caracter por caracter
 for(i = 0; i<sz; i++)
 {
   lcd.print(sentence_cursor_on[i]);
   delay(500);
 }
 delay(2000);

Novamente limpa a tela e desabilita o curso para vizualização.

 //Limpa a tela
 lcd.clear();
 //Desabilitar o cursor
 lcd.noBlink();

Utilizamos o mesmo procedimento do bloco de código anterior, agora escrevendo outra frase. Posiciona o cursor no home e escrevemos caractere por caractere na tela do display.

  //Recebe a quantidade de caracteres da frase
 sz = strlen(sentence_cursor_off);
 //Posiciona o cursor para a linha zero e coluna zero
 lcd.home();
 //Escreve caracter por caracter
 for(i = 0; i<sz; i++)
 {
   lcd.print(sentence_cursor_off[i]);
   delay(500);
 }
 delay(2000);

Na terceira demonstração como desabilitar e habilitar a luz de fundo do display.

 //Desabilita o backlight
 lcd.noBacklight();
 delay(1000);
 //Habilita o backlight        
 lcd.backlight();
  delay(2000);

Limpa a tela para remover os caracteres anteriores e por fim escrevemos na tela o fim da demo.

//Limpa a tela
 lcd.clear();
 //Posiciona o cursor na tela
 lcd.setCursor(1,0);  
 //Imprime na tela a frase "Fim Demo"
 lcd.print("Fim Demo ;)"); 

Conclusão

Ao concluir este artigo, aprendemos a configurar o display LCD 16×2 juntamente com o módulo I2C PCF 85740, e demonstramos, por meio de um exemplo de projeto, como utilizar os métodos da biblioteca. Foi observado que a simplificação das conexões liberou mais GPIOs que podem ser utilizados para a leitura de sensores ou ativação de atuadores. Outra vantagem é a facilidade de utilizar o mesmo código para displays LCD, bastando apenas alterar o número de linhas e colunas no início do código. Portanto, todas essas informações servem como base para criar projetos com a Franzininho WiFi, aproveitando ao máximo os recursos disponíveis do componente.

Franzininho WiFI - Arduino

Franzininho WiFi: Sensor de temperatura DS18B20 Franzininho WiFi: Motor DC
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
recentes
antigos mais votados
Inline Feedbacks
View all comments
Home » Arduino » Franzininho WiFi: Display LCD 16×2 com comunicação I2C

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: