Introducción I2C (Inter-Integrated Circuit) es un bus de comunicación en serie que se utiliza para conectar periféricos a un microcontrolador, como Arduino. Creado por Philips Semiconductor en la década de 1980, I2C permite conectar múltiples periféricos con solo dos cables: uno para datos (SDA) y otro para reloj (SCL).Cada dispositivo en el bus I2C tiene una dirección única, lo que permite que el maestro se comunique individualmente con cada esclavo. Cómo funciona El enlace I2C es semidúplex, es decir, no se pueden escuchar y enviar datos simultáneamente. El enlace I2C tiene una velocidad de datos promedio de 100 kilohercios a 1 megahercio.Como se muestra en el diagrama a continuación, el enlace I2C no es exclusivo, lo que significa que un maestro puede comunicarse con varios esclavos. A wide range of electronic components can communicate with each other using just 2 wires:Data signal: SDAClock signal: SCL Pin I2C en la placa Arduino Para usar I2C con una placa Arduino, necesitas saber qué pines están dedicados a la comunicación I2C. Los pines varían ligeramente según el modelo de Arduino, pero generalmente son:Arduino Uno: A4 (SDA) y A5 (SCL).Arduino Mega: 20 (SDA) y 21 (SCL).Arduino Leonardo: 2 (SDA) y 3 (SCL).Para la placa Arduino Uno, estos pines se pueden encontrar en la siguiente imagen: Escribiendo en el I2C Para escribir un mensaje en el I2C, primero necesitas saber la dirección I2C a la que quieres enviarlo. Aquí está el programa para enviar datos por I2C: #include <Wire.h> void setup() { Wire.begin(); // Initialize as master } void loop() { Wire.beginTransmission(0x3C); // Start transmission with device at address 0x3C Wire.write(“Hello”); // Send data Wire.endTransmission(); // End transmission delay(500); } Leyendo en el I2C A continuación se muestra un ejemplo de cómo leer el I2C de la placa Arduino en la dirección 0X3C: #include <Wire.h> void setup() { Wire.begin(0x3C); // Initialize as slave with address 0x3C Wire.onReceive(receiveEvent); // Register a receive function Serial.begin(9600); } void loop() { delay(100); // Leave time for other tasks } void receiveEvent() { while (Wire.available()) { char c = Wire.read(); // Read data sent by master Serial.print(c); // Display received data } } Conclusión Si quieres ver un ejemplo de un proyecto Arduino con I2C, consulta nuestro curso sobre el módulo RTC.Si quieres aprender sobre otros buses de comunicación, tienes UART y SPI.