Como digitalizar o endereço I2C no ESP32 usando o Arduino IDE

Como Digitalizar O Endereco I2c No Esp32 Usando O Arduino Ide



O 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 do ESP32. Discutiremos o protocolo de comunicação Inter Integrated Circuit ou I2C neste guia e como digitalizar um endereço de um dispositivo.

Introdução à Comunicação I2C

I2C, alternativamente conhecido como I2C ou IIC, é um protocolo de comunicação mestre-escravo síncrono em que um dispositivo mestre de sinal pode controlar vários números de dispositivos escravos em 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 duas linhas TX e Rx para comunicação I2C também usa duas linhas SDA e SCL para comunicação.









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



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





  • SDA (dados seriais) : Linha para transmitir e receber dados do mestre para o escravo e vice-versa
  • SCL (relógio serial) : Linha de sinal de relógio para selecionar um dispositivo escravo específico

Interfaces de barramento ESP32 I2C

O ESP32 possui duas interfaces de barramento I2C usando as quais a comunicação I2C é realizada como mestre ou escravo, dependendo do dispositivo que faz interface com o ESP32. De acordo com o datasheet 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 registros de comando
  • A interface de barramento ESP32 I2C é mais flexível no controle

Conectando Dispositivos I2C com ESP32

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



O ESP32 pode ser configurado tanto no modo Master quanto no modo Slave.

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 : PIN GPIO 21
  • SCL : GPIO PIN 22

Modo Escravo ESP32 I2C

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

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

A partir de agora, entendemos o funcionamento do modo I2C no ESP32, agora podemos encontrar facilmente o endereço I2C de qualquer dispositivo fazendo o upload do código fornecido.

Como digitalizar o endereço I2C no ESP32 usando o 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 podemos nos comunicar com eles em uma única linha de barramento.

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

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

Esquema

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

A conexão do ESP32 com OLED inclui:

Visor OLED Pino ESP32
VCC 3V3/VIN
GND GND
SCL GPIO 22
SDA GPIO 21

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

/****************
****************
linuxhint.com
****************
****************/

#include  /*Biblioteca Wire incluída*/

anular configuração ( ) {
Wire.begin ( ) ; /* A comunicação I2C começa */
Serial.begin ( 115200 ) ; /* Taxa de transmissão definida para comunicação em série */
Serial.println ( ' \n Leitor I2C' ) ; /* scanner de impressão no monitor serial */
}

loop vazio ( ) {
erro de byte, endereço;
int nDispositivos;
Serial.println ( 'Digitalizando...' ) ; /* O ESP32 começa a escanear os dispositivos I2C disponíveis */
nDispositivos = 0 ;
para ( endereço = 1 ; Morada < 127 ; endereço++ ) { /* para loop para verificar o número de dispositivos em 127 Morada */
Wire.beginTransmission ( Morada ) ;
error = Wire.endTransmission ( ) ;
E se ( erro == 0 ) { /* E se Dispositivo I2C encontrado */
Serial.print ( 'Dispositivo I2C encontrado no endereço 0x' ) ; /* imprimir esta linha E se Dispositivo I2C encontrado */
E se ( Morada < 16 ) {
Serial.print ( '0' ) ;
}
Serial.println ( endereço, HEX ) ; /* imprime o valor HEX do endereço I2C */
nDispositivos++;
}
outro E se ( erro == 4 ) {
Serial.print ( 'Erro desconhecido no endereço 0x' ) ;
E se ( Morada < 16 ) {
Serial.print ( '0' ) ;
}
Serial.println ( endereço, HEX ) ;
}
}
E se ( nDispositivos == 0 ) {
Serial.println ( 'Nenhum dispositivo I2C encontrado \n ' ) ; /* Se nenhum dispositivo I2C conectado imprimir esta mensagem */
}
outro {
Serial.println ( 'feito \n ' ) ;
}
atraso ( 5000 ) ; /* atraso dado para verificando o barramento I2C a cada 5 segundo */
}

O código acima irá procurar os dispositivos I2C disponíveis. O código começou chamando a biblioteca de fios 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 varredura I2C, dois nomes de variáveis, erro e Morada são definidos. Essas duas variáveis ​​armazenam o endereço I2C dos dispositivos. Em seguida, é inicializado um loop for que irá procurar o endereço I2C começando de 0 a 127 dispositivos.

Depois de ler o endereço I2C, a saída é impressa no monitor serial no formato HEX.

hardware

Aqui podemos ver que o display I2C OLED de 0,96 polegadas está conectado à placa ESP32 nos pinos GPIO 21 e 22. Vcc e GND do display estão conectados com ESP32 3V3 e pino GND.

Saída
Na saída podemos ver o endereço I2C do display OLED conectado na 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 primeiro o endereço I2C desse dispositivo.

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

Conclusão

Encontrar um endereço I2C ao conectar vários dispositivos com ESP32 é importante, pois os 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 com as especificações do dispositivo.