
Neste post vamos conhecer um pouco sobre comunicação I2C e ver um exemplo usando a plataforma do Arduino e o ambiente de simulação do Tinkercad.
No vídeo abaixo são apresentados alguns detalhes sobre a comunicação I2C.
O I²C (Inter Integrated Circuit) também conhecido como comunicação I2C foi desenvolvido pela empresa Phillips em 1982 e operava em até 100 kHz, permitia um endereçamento de 7 bits e suportava até 112 dispositivos, mas havia uma quantidade de endereços reservados, o que limitava a quantidade dispositivos que podiam ser conectados no barramento I2C.
Em 1992 foi publicado a primeira especificação para o protocolo de comunicação I2C, foram adicionados mais 3 bits de endereços, o que permitia um endereçamento de 10 bits. Além disso a velocidade aumentou para 400 kHz (modo rápido).
Atualmente alguns microcontroladores conseguem operar em frequências de 1 MHz, 3.4 MHz e 5 MHz.
O I2C é um protocolo de comunicação serial que permite que um ou mais controladores, ou dispositivos sejam controlados na mesma rede, ou seja, é possível conectar vários dispositivos utilizando apenas 4 ligações, isso facilita muito a ligação de vários dispositivos. Na figura abaixo é mostrado a arquitetura básica da comunicação I2C.

Em alguns caso será necessário adicionar um circuito para adequar os níveis de tensão entre os controladores e os dispositivos a serem controladores, por exemplo, quando se usa um microcontrolador que opera com uma tensão de alimentação de 3V3, e um display de 5V será necessário o uso de um voltage translator. Na figura abaixo é mostrado como ficaria a topologia.

Abaixo é apresentado um exemplo de ligação com resistores de pull entre um microcontrolador e uma memória.

Também é muito importante verificar em qual endereço os nossos dispositivos estão configurados, pois isso pode causar problemas de comunicação.
Controle de display LCD com comunicação I2C
Como exemplo, vamos fazer o controle de um display LCD usando I2C. Para isso vamos precisar dos seguintes materiais:
* Arduino Uno ou Arduino Nano;
* 4 cabos para ligação;
* 1 display LCD 1602 com placa para controle I2C.
Abaixo é apresentado o código que vamos utilizar no nosso exemplo.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(32, 16, 2); // Endereço I2C do LCD e número de colunas/linhas
void setup() {
lcd.init(); // Inicializa o LCD
lcd.backlight(); // Ativa a retroiluminação do LCD
}
void loop() {
lcd.clear(); // Limpa o LCD
lcd.setCursor(1, 0); // Posiciona o cursor
lcd.print("Feliz Ano Novo");
lcd.setCursor(6, 1); // Posiciona o cursor
lcd.print("2024");
delay(1000); // Atualiza a exibição a cada segundo
}
Simulação
Abaixo é possível fazer a simulação do código apresentado.
Conclusão
Com isso concluímos nossa introdução ao protocolo de comunicação I2C, vimos um exemplo de código e alguns aspectos de hardware, importantes para o bom funcionamento dos dispositivos conectados ao nosso barramento I2C.
Isso é tudo pessoal e até o próximo post.
Referências:
https://en.wikipedia.org/wiki/I%C2%B2C