Arduino - LCD I2C

Neste tutorial de LCD I2C com Arduino, vamos aprender a conectar um LCD I2C (Liquid Crystal Display - Display de Cristal Líquido) à placa Arduino. Os LCDs são muito populares e amplamente usados em projetos de eletrônica para mostrar informações. Existem muitos tipos de LCD. Este tutorial usa o LCD 16x2 (16 colunas e 2 linhas) como exemplo. Os outros LCDs são semelhantes.

Hardware Necessário

1×Arduino Uno R3
1×Cabo USB 2.0 tipo A/B (para PC com USB-A)
1×Cabo USB 2.0 tipo C/B (para PC com USB-C)
1×LCD I2C 16x2
1×LCD I2C 1602 Display Compact-Size 5V
1×(Alternativa) LCD I2C 20x4
1×Fios Jumper
1×(Recomendado) Shield com Bornes de Parafuso para Arduino Uno
1×(Recomendado) Sensors/Servo Expansion Shield for Arduino Uno
1×(Recomendado) Shield de Protoboard para Arduino Uno
1×(Recomendado) Case para Arduino Uno
1×(Recomendado) Placa Base de Prototipagem e Kit de Protoboard para Arduino Uno

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.

Buy Note: Alternatively, you can assemble the LCD I2C display using LCD 1602 Display and PCF8574 I2C Adapter Module.

Sobre o LCD I2C 16x2

No tutorial anterior, aprendemos a usar o LCD comum. Porém, a ligação entre o Arduino e o LCD comum é complicada. Por isso, o LCD I2C foi criado para simplificar a ligação. Na verdade, o LCD I2C é composto por um LCD comum, um módulo I2C e um potenciômetro.

Pinagem

O LCD I2C usa a interface I2C, então ele tem 4 pinos:

  • Pino GND: precisa ser conectado ao GND (0V).
  • Pino VCC: a alimentação do LCD, precisa ser conectado ao VCC (5V).
  • Pino SDA: sinal de dados do I2C
  • Pino SCL: sinal de clock do I2C
Pinagem do LCD I2C

Coordenadas do LCD

O LCD I2C 16x2 tem 16 colunas e 2 linhas. As colunas e as linhas são indexadas a partir de 0.

Coordenadas do LCD I2C com Arduino

Diagrama de Ligação

Diagrama de Ligação do Arduino com LCD I2C

This image is created using Fritzing. Click to enlarge image

LCD I2C Arduino Uno, Nano Arduino Mega
Vin 5V 5V
GND GND GND
SDA A4 20
SCL A5 21

Como Programar o LCD I2C

Graças à biblioteca DIYables_LCD_I2C, usar o LCD fica muito fácil.

  • Inclua a biblioteca:
#include <DIYables_LCD_I2C.h> // Library for LCD
  • Declare um objeto DIYables_LCD_I2C com o endereço I2C, o número de colunas e o número de linhas:
DIYables_LCD_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 column and 2 rows
  • Inicialize o LCD.
lcd.init(); //initialize the lcd lcd.backlight(); //open the backlight
  • Mova o cursor para a posição desejada (column_index, row_index)
lcd.setCursor(column_index, row_index);
  • Mostre uma mensagem no LCD.
lcd.print("Hello World!");

Há muito mais coisas que podemos fazer com o LCD (veja a parte Faça Mais com o LCD)

※ Nota:

O endereço I2C do LCD pode variar de acordo com o fabricante. No código, usamos 0x27, que é o endereço especificado pelo fabricante DIYables

Código Arduino

#include <DIYables_LCD_I2C.h> DIYables_LCD_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 column and 2 rows void setup() { lcd.init(); // initialize the lcd lcd.backlight(); } void loop() { lcd.clear(); // clear display lcd.setCursor(0, 0); // move cursor to (0, 0) lcd.print("Arduino"); // print message at (0, 0) lcd.setCursor(2, 1); // move cursor to (2, 1) lcd.print("GetStarted.com"); // print message at (2, 1) delay(2000); // display the above for two seconds lcd.clear(); // clear display lcd.setCursor(3, 0); // move cursor to (3, 0) lcd.print("DIYables"); // print message at (3, 0) lcd.setCursor(0, 1); // move cursor to (0, 1) lcd.print("www.diyables.io"); // print message at (0, 1) delay(2000); // display the above for two seconds }

Passos Rápidos

  • Vá até o ícone Libraries na barra lateral esquerda da Arduino IDE.
  • Pesquise "DIYables LCD I2C" e encontre a biblioteca DIYables_LCD_I2C da DIYables
  • Clique no botão Install para instalar a biblioteca DIYables_LCD_I2C.
Biblioteca DIYables LCD I2C para Arduino
  • Copie o código acima e abra-o na Arduino IDE
  • Clique no botão Upload na Arduino IDE para carregar o código no Arduino
  • Veja o resultado no LCD
Arduino mostrando texto no LCD
image source: diyables.io
  • Experimente modificar o texto e a posição

Vídeo

Faça Mais com o LCD

Caractere Personalizado

A função lcd.print() suporta apenas caracteres ASCII. Se você quiser mostrar um caractere ou símbolo especial (por exemplo, um coração, um angry bird), precisa usar o gerador de caracteres abaixo.

O LCD 16x2 pode mostrar 32 caracteres (2 linhas e 16 colunas). Cada caractere é composto por 40 pixels (8 linhas e 5 colunas).

Pixels do LCD 16x2 com Arduino

O gerador de caracteres representa um caractere (40 pixels). Você só precisa seguir os passos abaixo:

Click on each pixel to select/deselect


Copy below custom character code
Replace the customChar[8] in the below code
#include <DIYables_LCD_I2C.h> DIYables_LCD_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 column and 2 rows byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; void setup() { lcd.init(); // initialize the lcd lcd.backlight(); lcd.createChar(0, customChar); // create a new custom character lcd.setCursor(2, 0); // move cursor to (2, 0) lcd.write((byte)0); // print the custom char at (2, 0) } void loop() { }

Resultado no LCD:

Caractere personalizado no LCD

Vários caracteres personalizados

Podemos criar até 8 caracteres personalizados (com índices de 0 a 7). O exemplo abaixo cria e mostra três caracteres.

#include <DIYables_LCD_I2C.h> DIYables_LCD_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 column and 2 rows byte customChar0[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; byte customChar1[8] = { 0b00100, 0b01110, 0b11111, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100 }; byte customChar2[8] = { 0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b11111, 0b01110, 0b00100 }; void setup() { lcd.init(); // initialize the lcd lcd.backlight(); lcd.createChar(0, customChar0); // create a new custom character (index 0) lcd.createChar(1, customChar1); // create a new custom character (index 1) lcd.createChar(2, customChar2); // create a new custom character (index 2) lcd.setCursor(2, 0); // move cursor to (2, 0) lcd.write((byte)0); // print the custom char 0 at (2, 0) lcd.setCursor(4, 0); // move cursor to (4, 0) lcd.write((byte)1); // print the custom char 1 at (4, 0) lcd.setCursor(6, 0); // move cursor to (6, 0) lcd.write((byte)2); // print the custom char 2 at (6, 0) } void loop() { }

Resultado no LCD:

Vários caracteres personalizados no LCD

Resumo: como usar caracteres personalizados no LCD

  • Use o gerador de caracteres acima para criar o código binário do caractere personalizado.
  • Declare o código binário do caractere personalizado (copie do passo acima)
byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 };
  • Crie o caractere personalizado e atribua a ele um valor de índice (de 0 a 7) na função setup()
lcd.createChar(index, customChar);
  • Mostre o caractere personalizado no LCD a qualquer momento, em qualquer lugar (na função setup() ou loop())
lcd.setCursor(column, row); // move cursor to a desired position lcd.write((byte)index); // print the custom char at the desired position

Outras funções

Adicione as funções abaixo na função loop(), uma de cada vez. E adicione delay(5000) depois de cada função

  • Limpar a tela do LCD
lcd.clear();
  • Mover o cursor para o canto superior esquerdo do LCD
lcd.home();
  • Mover o cursor para uma posição (column, row)
lcd.setCursor(column, row);
  • Mostrar o cursor do LCD
lcd.cursor();
  • Ocultar o cursor do LCD.
lcd.noCursor();
  • Mostrar o cursor piscante do LCD
lcd.blink()
  • Desligar o cursor piscante do LCD.
lcd.noBlink()

Desafie-se

Use o LCD para fazer um dos seguintes projetos:

Solução de Problemas do LCD I2C

Se o texto não aparecer no LCD I2C, verifique os seguintes pontos:

  1. Ajuste o brilho do LCD girando o potenciômetro na parte de trás do LCD
  2. Dependendo do fabricante, o endereço I2C do LCD pode ser diferente. Normalmente, o endereço I2C padrão do LCD é 0x27 ou 0x3F. Experimente esses valores um de cada vez. Se ainda assim não funcionar, execute o código abaixo para encontrar o endereço I2C.
// I2C address scanner program #include <Wire.h> void setup() { Wire.begin(); Serial.begin(9600); Serial.println("I2C 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("I2C device found at address 0x"); if (address < 16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; } else if (error==4) { Serial.print("Unknown error at address 0x"); if (address < 16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found"); else Serial.println("done"); delay(5000); // wait 5 seconds for next scan }

O resultado no Serial Monitor:

∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Scanning... I2C device found at address 0x3F ! done Scanning... I2C device found at address 0x3F ! done
Ln 11, Col 1
Arduino Uno on COM15
2

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!