- O que é o protocolo de comunicação I2C?
- Materiais requisitados
- Módulo I2C
- Diagrama de circuito
- Código para encontrar o endereço do controlador I2C
- Código para ESP32
No tutorial anterior, o OLED é conectado ao ESP32 usando comunicação SPI que usa 5 pinos. Neste tutorial, fazemos a interface do LCD 16x2 com ESP32, usando apenas 2 pinos, com a ajuda da comunicação I2C. Ele reduz o número de pinos usados pelo ESP32 para que mais número de pinos ESP32 permaneçam livres para fazer a interface de diferentes sensores.
O que é o protocolo de comunicação I2C?
O termo I2C significa “ Circuitos Integrados Inter ”. Normalmente é denotado como IIC ou I ao quadrado ou mesmo como protocolo de interface de 2 fios (TWI) em alguns lugares, mas significa o mesmo. I2C é um protocolo de comunicação síncrona, significa que ambos os dispositivos que estão compartilhando as informações devem compartilhar um sinal de relógio comum. Ele tem apenas dois fios, SDA e SCL para compartilhar informações, dos quais SCL é usado para o sinal de clock e SDA é usado para enviar e receber dados.
Você pode comprar o módulo I2C LCD no qual o controlador I2C1602 LCD está embutido ou você pode simplesmente comprar o controlador I2C para fazer a interface do LCD 16x2 com ESP32.
Materiais requisitados
- ESP32
- Visor LCD 16 * 2
- Controlador I2C LCD
- Fios
- Tábua de pão
Módulo I2C
O controlador I2C tem um IC PCF8574 que fornece expansão de E / S remota de uso geral por meio do clock serial bidirecional I2C de dois fios (SCL) e dados seriais (SDA). É um IC muito útil e pode ser usado em placas de sinais LED, visores, teclados, controle industrial, etc. Existem 8 pinos de E / S, 3 pinos (A0, A1, A2) para endereço de barramento I2C e SDA, pinos SCL.
A placa controladora do LCD possui um potenciômetro embutido para controlar o contraste do LCD.
Os diagramas de pinos do IC e do controlador LCD são fornecidos abaixo.
Diagrama de circuito
As conexões para fazer a interface do LCD com ESP32 são fornecidas abaixo
- conecte o pino 1-16 do módulo I2C ao pino 1-16 do display LCD.
- Pino SDA do módulo I2C -> pino SDA de ESP32, ou seja, D21
- Pino SCL do módulo I2C -> pino SCL do ESP32, ou seja, D22
Eu conectei 3v de ESP32 a 5v de I2C apenas para demonstração, mas precisamos de 5V de alimentação para o módulo I2C para exibir os dados corretamente, porque ESP32 só pode fornecer 3,3 volts, o que é baixo para o módulo I2C e os dados não serão visíveis claramente. Portanto, é melhor usar uma fonte externa de 5V.
Precisamos de arquivos de placa para ESP32, portanto, se você for novo no ESP32, siga primeiro o tutorial de Introdução ao ESP32 e depois volte aqui. Você também pode conectar o LCD com ESP32 sem I2C, mas será necessário mais pinos do ESP32.
Código para encontrar o endereço do controlador I2C
Antes de entrar no código principal, primeiro temos que encontrar o endereço do módulo I2C.
O controlador I2C tem um bit ADDRESS embutido que é usado para controlar o barramento I2C. O ADDRESS padrão é 0x27, mas em alguns casos pode ser 0x3f. Portanto, para verificar o endereço do controlador I2C, conecte o circuito conforme mostrado acima, carregue o código fornecido abaixo e abra o monitor serial. Você verá o endereço em hexadecimal.
#incluir
Observe que usamos este endereço em nosso código de interface LCD.
No controlador I2C, como você pode ver, existem três jumpers / almofadas de solda rotulados como A0, A1 e A2. Eles são usados para alterar o endereço do módulo. Veja como o endereço muda do valor padrão 0x27 ou 0x3F, se você conectar os painéis de endereço. (1 = Não conectado. 0 = Conectado):
A0 |
A1 |
A2 |
Endereço HEX |
1 |
1 |
1 |
0x27 |
0 |
1 |
1 |
0x26 |
1 |
0 |
1 |
0x25 |
0 |
0 |
1 |
0x24 |
1 |
1 |
0 |
0x23 |
0 |
1 |
0 |
0x22 |
1 |
0 |
0 |
0x21 |
0 |
0 |
0 |
0x20 |
Código para ESP32
Primeiro, precisamos de uma biblioteca LiquidCrystal_I2C para o módulo I2C LCD. A biblioteca Liquidcrsytal comum não funcionará porque estamos usando I2C aqui.
Baixe a biblioteca desta
O código é escrito de forma que tudo o que for digitado no monitor serial, será exibido no LCD. Arduino IDE foi usado para escrever e fazer upload de nosso código.
Primeiro, temos que incluir a biblioteca de fios para comunicação I2C que vem com o Arduino IDE.
#incluir
Então, para I2C LCD, inclua LiquidCrystal_I2C.h que foi baixado anteriormente.
#incluir
Em seguida, defina o endereço I2C do LCD para 0x27 ou o endereço que você obteve executando o código do scanner fornecido acima para um display de 2 linhas de 16 caracteres
LiquidCrystal_I2C lcd (0x27, 16,2);
Na função de configuração , inicialize a comunicação serial e LCD por 16 caracteres 2 linhas e ligue a luz de fundo. Se você quiser desligar a luz de fundo, use lcd .noBacklight () e altere a função setCursor () de acordo com sua preferência.
void setup () { Serial.begin (9600); lcd.init (); lcd.backlight (); lcd.setCursor (0,0); lcd.print ("Olá, mundo!"); atraso (1000); lcd.setCursor (0,1); lcd.print ("circuitdigest.com"); atraso (3000);
O LCD primeiro exibirá as instruções para usar o Monitor serial e digitar os caracteres a serem exibidos.
Defina a opção Monitor serial para "Sem fim de linha"
lcd.clear (); lcd.setCursor (0,0); lcd.print ("Use Ser. Monitor"); lcd.setCursor (0,1); lcd.print ("Digite para exibir"); }
a função de loop verificará continuamente os dados seriais de entrada da porta serial usando a função Serial.available (). Se houver uma mensagem, espere um segundo e imprima a mensagem no LCD usando as funções lcd .write () e Serial.read ().
void loop () {{// quando os caracteres chegam pela porta serial… if (Serial.available ()) {delay (100); // espere um pouco até que toda a mensagem chegue lcd.clear (); // limpa a tela enquanto (Serial.available ()> 0) {// lê todos os caracteres disponíveis lcd.write (Serial.read ()); // exibe cada caractere para o LCD}}}}
O código do Compete é fornecido abaixo, então carregue o código e abra o monitor serial. Em seguida, digite mensagem e pressione Enter. Sua mensagem será exibida no LCD.
Se você não obtiver uma resposta adequada ou nenhuma resposta no LCD, verifique o endereço do controlador I2C ou faça a varredura novamente com o código fornecido acima para obter o endereço correto.