Como digitalizar o endereço I2C no ESPPOP 10 usando o Arduino IDE

Como digitalizar o endereço I2C no ESPPOP 10 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 ESP32. Discutiremos o Circuito Integrado ou o Protocolo de Comunicação I2C neste guia e como digitalizar um endereço de um dispositivo.

Introdução à comunicação I2C

O i2C conhecido como i2c ou iiC é um protocolo de comunicação síncrono-escravo mestre-escravo, onde um dispositivo mestre de sinal pode controlar o número múltiplo 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 comunicação.

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

A seguir, as duas linhas i2C usam:

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

Esp32 I2C Bus Interfaces

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

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

Conectando dispositivos I2C com ESP32

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

O ESP32 pode ser configurado como no modo mestre e escravo.

Esp32 I2C Master Modo

Nesse modo.

Os dois pinos GPIO no ESP32 que são predefinidos para a comunicação I2C:

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

Esp32 I2C Modo de escravo

No modo escravo, o relógio é gerado pelo dispositivo mestre. Master é 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 ESP32 I2C, apenas o mestre pode iniciar a transferência de dados entre dispositivos.

A imagem mostra duas placas ESP32 na configuração de escravos mestre.

A partir de agora, entendemos o funcionamento do modo I2C no ESP32 agora, podemos encontrar facilmente o endereço I2C de qualquer dispositivo, enviando o 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 exclusivo e o intervalo de endereços de 0 a 127 ou (0 a 0x7f) em hexadecimal. Por exemplo, se estivermos usando dois monitores OLED do mesmo número ou produto do modelo, ambos terão o mesmo endereço I2C, para que não possamos usar os dois na mesma linha i2C no ESP32.

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

Esquemático

Abaixo da imagem mostra o diagrama esquemático de interface com tela OLED com a placa ESP32 usando o I2C Communication Protocol.

A conexão do ESP32 com OLED inclui:

Tela OLED PIN ESP32
VCC 3v3/vin
Gnd Gnd
SCL GPIO 22
SDA GPIO 21

Código
Open Arduino Editor e faça o upload do código de digitalização I2C fornecido na placa ESP32. Verifique se o ESP32 está conectado e a porta COM está selecionada.

/*****************
******************
Linuxhint.com
******************
****************/
#include /*biblioteca de arame incluída* /
Void Setup ()
Arame.começar(); /*I2C A comunicação começa*/
Serial.começar (115200); /*Taxa de transmissão definida para comunicação serial*/
Serial.println ("\ ni2c scanner"); /*Print Scanner no monitor serial*/

Void Loop ()
erro de byte, endereço;
Int ntevices;
Serial.println ("Digitalização ..."); /*ESP32 inicia a digitalização de dispositivos i2c disponíveis*/
ndevices = 0;
para (endereço = 1; endereço < 127; address++ ) /*for loop to check number of devices on 127 address*/
Arame.BEGNTRANSMISSÃO (ENDEREÇO);
erro = fio.ENDTRANSMISSÃO ();
if (error == 0) /*se o dispositivo i2c encontrado* /
Serial.print ("dispositivo i2c encontrado no endereço 0x");/*imprima esta linha se o dispositivo i2c encontrado*/
if (endereço<16)
Serial.print ("0");

Serial.println (endereço, hex); /*Imprime o valor hexadecimal do endereço i2C*/
ndevices ++;

else if (error == 4)
Serial.print ("Erro desconhecido no endereço 0x");
if (endereço<16)
Serial.print ("0");

Serial.println (endereço, hex);


if (ndevices == 0)
Serial.println ("não dispositivos I2C encontrados \ n"); /*Se nenhum dispositivo I2C anexou esta mensagem*/

outro
Serial.println ("feito \ n");

atraso (5000); /*Atraso dado para verificar o barramento I2C a cada 5 segundos*/

O código acima vai digitalizar os dispositivos I2C disponíveis. O código começou ligando para a biblioteca de arames 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 endereço são definidos. Essas duas variáveis ​​armazenam o endereço I2C dos dispositivos. Em seguida, é inicializado um loop que digitalizará o endereço I2C a partir de 0 a 127 dispositivos.

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

Hardware

Aqui podemos ver o OLED 0.A tela I2C de 96 polegadas está conectada à placa ESP32 nos pinos GPIO 21 e 22. VCC e GND da tela estão conectados com Esp32 3v3 e GND PIN.

Saída
Na saída, podemos ver o endereço I2C da tela OLED conectada à placa ESP32. Aqui, o endereço I2C é 0x3C, por isso não podemos usar nenhum outro dispositivo I2C com o mesmo endereço, para que tenhamos que alterar o endereço I2C desse dispositivo primeiro.

Obtivemos com sucesso o endereço I2C da tela OLED conectada à placa ESP32.

Conclusão

Encontrar um endereço I2C enquanto conecta vários dispositivos com o 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 dois dispositivos corresponder, ele poderá ser alterado de acordo com as especificações do dispositivo.