El protocolo I2C (Inter-Integrated Circuit) permite conectar hasta 127 dispositivos en solo dos cables: SDA (datos) y SCL (reloj). Es el protocolo estándar para pantallas LCD, OLEDs, sensores de presión, acelerómetros y memorias EEPROM.
¿Cómo Funciona I2C?
El Arduino actúa como master y llama a cada dispositivo por su dirección única (7 bits, de 0x08 a 0x77). Solo el dispositivo con esa dirección responde. Varios sensores comparten el mismo bus SDA/SCL — no hay conflicto porque cada uno tiene su dirección.
Pines I2C según Placa
| Placa | SDA | SCL |
|---|---|---|
| Arduino Uno/Nano | A4 | A5 |
| Arduino Mega | Pin 20 | Pin 21 |
| ESP32 | GPIO 21 | GPIO 22 |
| Raspberry Pi Pico | GP4/GP6/GP8 | GP5/GP7/GP9 |
Escáner I2C: Encontrar Todos los Dispositivos Conectados
#include <Wire.h>
void setup() {
Wire.begin();
Serial.begin(9600);
Serial.println("Escaneando bus I2C...");
for (byte addr = 1; addr < 127; addr++) {
Wire.beginTransmission(addr);
if (Wire.endTransmission() == 0) {
Serial.print("Dispositivo en: 0x");
if (addr < 16) Serial.print("0");
Serial.println(addr, HEX);
}
}
Serial.println("Escaneo completo.");
}
void loop() {}
Dispositivos Comunes y sus Direcciones
| Dispositivo | Dirección típica |
|---|---|
| LCD 1602 con PCF8574 | 0x27 o 0x3F |
| OLED SSD1306 | 0x3C o 0x3D |
| BMP280 (presión) | 0x76 o 0x77 |
| MPU-6050 (IMU) | 0x68 o 0x69 |
| DS3231 (RTC) | 0x57 / 0x68 |
Conflicto de Direcciones
Si dos dispositivos tienen la misma dirección: algunos módulos tienen pads o jumpers para cambiar la dirección (ej: BMP280 puede ser 0x76 o 0x77 según el pin SDO). Si no es posible cambiar la dirección, usa un multiplexor I2C como el TCA9548A que permite hasta 8 buses I2C separados.