¿Qué es el protocolo I2C?
I2C (Inter-Integrated Circuit) es un protocolo de comunicación serial síncrono desarrollado por Philips (ahora NXP) en los 80. Usa solo dos líneas: SDA (datos) y SCL (reloj). El maestro (Arduino) controla el bus y se comunica con los esclavos (sensores, pantallas) usando direcciones únicas de 7 bits, lo que permite hasta 127 dispositivos en el mismo par de cables.
En el Arduino Uno, SDA está en el pin A4 y SCL en el pin A5. En el Arduino Mega, son los pines 20 y 21. Todos los dispositivos I2C que encuentras en Especificar.cl —OLED, BME280, MPU-6050, LCD I2C— usan esta misma interfaz.
Librerías y uso básico
- La librería Wire.h viene incluida en Arduino IDE
- Wire.begin() inicializa el bus I2C
- Wire.beginTransmission(dirección) para seleccionar el esclavo
- Wire.write(dato) para enviar un byte
- Wire.endTransmission() para cerrar la comunicación
- Wire.requestFrom(dirección, cantidad) para leer bytes
Detectar direcciones I2C con el Scanner
Si no sabes la dirección I2C de tu módulo, carga el sketch "I2C Scanner" que escanea todas las direcciones de 0x01 a 0x7F e imprime por serial cuáles responden. Es indispensable cuando tienes módulos sin documentación clara o cuando dos módulos supuestamente tienen la misma dirección (como dos pantallas OLED).
Resistencias pull-up en I2C
El bus I2C requiere resistencias pull-up en SDA y SCL (típicamente 4.7kΩ a VCC). La mayoría de los módulos ya las traen incorporadas. Si tienes cables muy largos (>50 cm) o muchos dispositivos, puede ser necesario reducir las pull-up a 2.2kΩ para mejorar la integridad de la señal.