I²C-communicatie


Wat is I²C?

I²C (Inter-Integrated Circuit) is een seriële communicatiebus ontwikkeld door Philips in 1980. Het gebruikt slechts twee lijnen:

Dankzij deze eenvoud kunnen meerdere apparaten via één bus communiceren.

De I²C-bus is een veelgebruikte manier om apparaten met elkaar te laten praten. Handig, want je hebt er maar twee datalijnen voor nodig: SDA (data) en SCL (klok). Daarmee kun je tot wel 112 apparaten aansluiten (bij gebruik van 7-bits adressen) — of zelfs meer als je overstapt op 10-bits adressering.
Het mooie van I²C is dat je één centrale controller (de master) kunt laten communiceren met meerdere sensoren of modules (de slaves). In sommige gevallen zijn zelfs meerdere masters mogelijk. Dat maakt het een ideale oplossing voor compacte, slimme ontwerpen waar meerdere onderdelen met elkaar moeten samenwerken.

I2c uitleg

Voordelen van I²C

Hardware-aansluitingen

Voor een Arduino Uno gebruik je de volgende pinnen:

Voor een ESP32 gebruik je de volgende pinnen:

VCC en GND als voeding. Afhankelijk van de sensor kan dit 3.3V of 5V zijn.

Voorbeeldcode


#include <Wire.h>

#define I2C_SDA 21
#define I2C_SCL 22
#define I2C_ADDR 0x76  // Verander dit naar jouw sensoradres (bijv. 0x77)

void setup() {
  Serial.begin(115200);

  // I2C starten
  Wire.begin(I2C_SDA, I2C_SCL);  // Je kunt ook gewoon Wire.begin() doen als je de standaard pinnen gebruikt
  Serial.println("I2C scan gestart...");

  scanI2CDevices();
}

void loop() {
  // Eventueel uitlezen hier als je een specifieke sensor gebruikt
  delay(5000);
}

void scanI2CDevices() {
  byte error, address;
  int nDevices = 0;

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

    if (error == 0) {
      Serial.print("I2C-apparaat gevonden op adres 0x");
      if (address < 16)
        Serial.print("0");
      Serial.print(address, HEX);
      Serial.println();
      nDevices++;
    }
  }

  if (nDevices == 0)
    Serial.println("Geen I2C-apparaten gevonden.");
  else
    Serial.println("I2C scan klaar.");
}

Populaire I²C-sensoren

Met I²C voeg je eenvoudig sensoren en modules toe aan je project met minimale bedrading.