Como escanear endereço I2C no ESP32 usando Arduino IDE

Neste guia, irá aprender como encontrar o endereço de dispositivos I2C com o ESP32 programado usando o Arduino IDE.

ESP32 é uma plataforma baseada em microcontrolador que pode interagir com vários dispositivos para controlar diferentes saídas de acordo com a entrada. Todos os protocolos de comunicação como UART, SPI e I2C desempenham um papel significativo na comunicação ESP32. Discutiremos o protocolo de comunicação Inter Integrated Circuit ou I2C neste guia e como escanear um endereço de um dispositivo.

 

Introdução à Comunicação I2C

I2C, também conhecido como I2C ou IIC, é um protocolo de comunicação mestre-escravo síncrono, onde um dispositivo mestre de sinal pode controlar vários dispositivos escravos por meio de um único fio (linha SDA).

O I2C combina o funcionamento dos protocolos UART e SPI, por exemplo, o SPI suporta o controle de vários dispositivos escravos sobre um único mestre. O I2C também suporta isso. Por outro lado, o UART usa TX e Rx de duas linhas para comunicação. O I2C também usa SDA e SCL de duas linhas para comunicação.

Como scanear I2C

Aqui podemos ver que usamos resistores pull up com ambas as linhas SDA e SCL. Isso ocorre porque, por padrão, o I2C só emite dois níveis de LOW ou circuito aberto. Por padrão, o I2C em todos os chips está no modo de circuito aberto, então, para puxá-los para HIGH, usamos um resistor pull-up.

A seguir estão as duas linhas que o I2C usa:

  • SDA (Serial Data) : Linha para transmitir e receber dados do mestre para o escravo e vice-versa
  • SCL (Serial Clock) : Linha de sinal de clock para selecionar um dispositivo escravo específico

 

Interfaces de barramento I2C ESP32

O ESP32 apresenta duas interfaces de barramento I2C usando as quais a comunicação I2C é realizada como mestre ou escravo, dependendo do dispositivo que está interligado ao ESP32. De acordo com a folha de dados do ESP32, a interface I2C da placa ESP32 suporta a seguinte configuração:

  • Comunicação I2C de modo padrão a uma taxa de 100 Kbit/s
  • Comunicação I2C de modo rápido ou avançado a uma velocidade de 400 Kbit/s
  • Modo de endereçamento duplo de 7 bits e 10 bits
  • Os usuários podem controlar a interface I2C programando os registradores de comando
  • A interface de barramento I2C ESP32 é mais flexível no controle

Conectando dispositivos I2C com ESP32

A interface de dispositivos com o ESP32 usando o protocolo I2C é muito simples, assim como o UART, precisamos apenas de duas linhas para conectar o SDA e a linha de clock SCL.

O ESP32 pode ser configurado tanto no modo Mestre quanto no modo Escravo.

 

Modo Mestre ESP32 I2C

Neste modo, o ESP32 gera um sinal de clock que inicia a comunicação com os dispositivos escravos conectados.

Os dois pinos GPIO no ESP32 que são pré-definidos para comunicação I2C:

  • SDA : GPIO PIN 21
  • SCL : PINO GPIO 22

Escravos I2C ESP32

Modo escravo ESP32 I2C

No modo escravo, o clock é gerado pelo dispositivo mestre. O mestre é o único dispositivo que aciona a linha SCL na comunicação I2C. Os escravos são os dispositivos que respondem ao mestre, mas não podem iniciar uma transferência de dados. No barramento I2C do ESP32, apenas o mestre pode iniciar a transferência de dados entre os dispositivos.

A imagem mostra duas placas ESP32 em configuração mestre-escravo.

ESP32 I2C Mestre e Escravo

 

Agora que entendemos o funcionamento do modo I2C no ESP32, podemos encontrar facilmente o endereço I2C de qualquer dispositivo enviando o código fornecido.

Compre O ESP32 clicando neste link.

 

Como escanear endereço I2C no ESP32 usando Arduino IDE

Encontrar o endereço I2C dos dispositivos conectados com o ESP32 é importante porque se estivermos usando dispositivos com o mesmo endereço I2C, não poderemos nos comunicar com eles por meio de uma única linha de barramento.

Cada dispositivo I2C deve conter um endereço exclusivo e o intervalo de endereços de 0 a 127 ou (0 a 0X7F) em HEX. Por exemplo, se estivermos usando dois displays OLED do mesmo número de modelo ou produto, ambos terão o mesmo endereço I2C, então não podemos usar ambos na mesma linha I2C no ESP32.

Para encontrar um endereço IC, vamos dar um exemplo.

 

Esquemático

A imagem abaixo mostra o diagrama esquemático da interface do display OLED com a placa ESP32 usando o protocolo de comunicação I2C.

Interfacing-OLED-Display-with-ESP32-using-Arduino-IDE-and-I2C

A conexão do ESP32 com OLED inclui:

OLED Display ESP32 Pin
VCC 3V3/VIN
GND GND
SCL GPIO 22
SDA GPIO 21

 

Código

Abra o editor Arduino e carregue o código de escaneamento I2C fornecido na placa ESP32. Certifique-se de que o ESP32 esteja conectado e a porta COM esteja selecionada.

O código acima fará a varredura dos dispositivos I2C disponíveis. O código começou chamando a biblioteca wire para comunicação I2C. A próxima comunicação serial é iniciada usando a taxa de transmissão.

Na parte do loop do código de escaneamento I2C, dois nomes de variáveis, erro e endereço, são definidos. Essas duas variáveis ​​armazenam o endereço I2C dos dispositivos. Em seguida, um loop for é inicializado para escanear o endereço I2C começando de 0 a 127 dispositivos.

 

Saída

Na saída, podemos ver o endereço I2C do display OLED conectado à placa ESP32. Aqui, o endereço I2C é 0X3C, então não podemos usar nenhum outro dispositivo I2C com o mesmo endereço, para isso temos que alterar o endereço I2C desse dispositivo primeiro.

Como scanear dispositivos I2C usando ESP32 e arduino Ide

 

Obtivemos com sucesso o endereço I2C do display OLED conectado à placa ESP32.

Conclusão

Encontrar um endereço I2C ao conectar vários dispositivos com ESP32 é importante, pois dispositivos que compartilham o mesmo endereço I2C não podem ser conectados em um único barramento I2C. Usando o código acima, pode-se identificar o endereço I2C e, se o endereço de quaisquer dois dispositivos corresponder, ele pode ser alterado de acordo, dependendo das especificações do dispositivo.

 

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *