(Logo, pesquisa)

Cursos Materiais Sobre Contato

Como Encontrar Endereços I2C no Arduino

 

A comunicação I2C (Inter-Integrated Circuit) é amplamente utilizada em projetos de Arduino (como vimos nesse artigo) para conectar sensores, displays e outros dispositivos com apenas dois fios: SDA (dados) e SCL (clock). Uma das primeiras etapas ao utilizar um novo dispositivo I2C é identificar seu endereço, essencial para a comunicação. Neste artigo, explicaremos como encontrar o endereço I2C de forma prática utilizando o Arduino.


O que é o protocolo I²C?

O protocolo I2C permite que múltiplos dispositivos se comuniquem em um único barramento compartilhado, com um mestre (geralmente o Arduino) e diversos escravos (sensores, displays, etc.). Cada dispositivo escravo deve ter um endereço único, geralmente fornecido pelo fabricante. No entanto, em muitos casos, esse endereço pode variar ou não estar claro na documentação. Felizmente, podemos escaneá-lo usando o próprio Arduino.

Materiais necessários

  • 1 Placa Arduino (Uno, Mega, Nano, etc.)

  • 1 Dispositivo I2C (como o sensor MPU6050, display OLED, etc.)

  • Jumpers para conexão

  • Protoboard (opcional)


Conexões típicas I²C

Os pinos I2C variam de acordo com o modelo do Arduino:

Placa ArduinoSDASCL
Uno/Nano                        A4A5
Mega                        2021
Leonardo                        23
ESP8266/ESP32                 Definíveis por software

Conecte os fios da seguinte maneira:

  • SDA do sensor ao SDA do Arduino

  • SCL do sensor ao SCL do Arduino

  • VCC ao 3.3V ou 5V (conforme especificado pelo sensor)

  • GND ao GND do Arduino

  • É importante lembrar que, eventualmente, é necessário um resistor de pull-up na rede I²C (como vimos aqui)

  • Alguns sensores possuem pinos de configuração de endereço. Verifique o datasheet.


Código para escanear endereços I²C

Essa é uma programação que encontramos por padrão na IDE do Arduino. Abra o Arduino IDE, vá em Arquivo > Exemplos > Wire > i2c_scanner. Caso não encontre, copie o código abaixo:

#include <Wire.h>

void setup() {
  Wire.begin();
  Serial.begin(9600);
  while (!Serial); // Aguarda o monitor serial abrir
  Serial.println("Escaneando dispositivos I2C...");
}

void loop() {
  byte error, address;
  int count = 0;

  for (address = 1; address < 127; address++) {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0) {
      Serial.print("Dispositivo I2C encontrado no endereço 0x");
      if (address < 16) Serial.print("0");
      Serial.print(address, HEX);
      Serial.println();
      count++;
    }
  }

  if (count == 0) {
    Serial.println("Nenhum dispositivo I2C encontrado.");
  } else {
    Serial.print("Total encontrado(s): ");
    Serial.println(count);
  }

  delay(5000); // Aguarda antes de repetir
}


Interpretando os resultados

Depois de fazer o upload para o Arduino e abrir o Monitor Serial (Ctrl+Shift+M), você verá algo como:


Escaneando dispositivos I2C...

Dispositivo I2C encontrado no endereço 0x3C

Total encontrado(s): 1


Isso indica que um dispositivo está respondendo no endereço 0x3C. Esse endereço será usado na comunicação com bibliotecas específicas para o sensor ou módulo.