Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

I²C Kommunikation mit Arduino meistern – Praktisches Tutorial

Übersicht

I²C (Inter-Integrated Circuit) ist ein beliebter Kommunikationsbus, der nur zwei Leitungen (SDA, SCL) benötigt und bis zu 128 Geräte (7-Bit-Adressierung) oder 1024 Geräte (10-Bit) unterstützt. Ein Master steuert die Kommunikation mit mehreren Slaves.

I²C Kommunikation mit Arduino meistern – Praktisches Tutorial

Funktionsweise

Leitungen:

  • SCL (Serial Clock): Taktsignal, vom Master erzeugt, synchronisiert Datenübertragung.
  • SDA (Serial Data): Bidirektionale Datenleitung.

Beide Leitungen sind „Open-Drain“ → Pull-Up-Widerstände (2 kΩ–10 kΩ) erforderlich, damit Leitungen im Ruhezustand High sind. Geräte sind aktiv-low.

I²C Kommunikation mit Arduino meistern – Praktisches Tutorial

I²C Protokoll

Datenübertragung in 8-Bit-Sequenzen:

  1. Start-Bedingung: SDA fällt auf Low, während SCL High ist.
  2. Adress-Byte (7 Bit + R/W): MSB zuerst. 8. Bit: 0 = Master schreibt, 1 = Master liest.
  3. ACK/NACK: Slave zieht SDA auf Low (ACK) oder lässt High (NACK).
  4. Register-Adresse(n): Interne Register des Slaves adressieren.
  5. Daten-Bytes: Beliebig viele 8-Bit-Sequenzen mit jeweils ACK.
  6. Stop-Bedingung: SDA steigt auf High, während SCL High ist.
I²C Kommunikation mit Arduino meistern – Praktisches Tutorial
I²C Kommunikation mit Arduino meistern – Praktisches Tutorial
I²C Kommunikation mit Arduino meistern – Praktisches Tutorial

Praxisbeispiel

Zwei Breakout-Boards: GY-80 (4 Sensoren) + GY-521 (3 Sensoren) = 7 Sensoren an 2 Drähten.

I²C Kommunikation mit Arduino meistern – Praktisches Tutorial

Anschluss: Arduino SCL → beide Boards SCL, Arduino SDA → beide Boards SDA, GND & 5V gemeinsam. Pull-Ups auf Boards vorhanden.

I²C-Adressen der Sensoren

SensorChipAdresse
3-Achsen-BeschleunigungsmesserADXL3450x53
3-Achsen-GyroskopL3G4200D0x69
3-Achsen-MagnetometerHMC5883L0x1E
Barometer + ThermometerBMP0850x77
MPU6050 (GY-521)MPU60500x68

Adressen können auch per I²C Scanner Sketch (Arduino Playground) ausgelesen werden.

Interne Register

Beispiel ADXL345 X-Achse: Daten in zwei Registern: DATAX0 (0x32) und DATAX1 (0x33).

Arduino I²C Code (X-Achse ADXL345 auslesen)

/* I²C Kommunikation Tutorial
 * by Dejan, www.HowToMechatronics.com
 */
#include <Wire.h>

int ADXLAddress = 0x53;
#define X_Axis_Register_DATAX0 0x32
#define X_Axis_Register_DATAX1 0x33
#define Power_Register 0x2D

int X0, X1, X_out;

void setup() {
  Wire.begin();
  Serial.begin(9600);
  delay(100);
  // Messung aktivieren
  Wire.beginTransmission(ADXLAddress);
  Wire.write(Power_Register);
  Wire.write(8); // Bit D3 = 1
  Wire.endTransmission();
}

void loop() {
  Wire.beginTransmission(ADXLAddress);
  Wire.write(X_Axis_Register_DATAX0);
  Wire.write(X_Axis_Register_DATAX1);
  Wire.endTransmission();

  Wire.requestFrom(ADXLAddress, 2);
  if (Wire.available() <= 2) {
    X0 = Wire.read();
    X1 = Wire.read();
  }
  Serial.print("X0= "); Serial.print(X0);
  Serial.print(" X1= "); Serial.println(X1);
  // Hinweis: Rohdaten! Umrechnung nötig (siehe MEMS Tutorial).
}

Dieser Code demonstriert den reinen I²C-Lesevorgang. Die Umrechnung der Rohdaten in physikalische Werte erfolgt im MEMS-Tutorial.

Herstellungsprozess

  1. Nahtlose Arduino–Raspberry Pi 2 I2C-Integration für IoT-Sensorprojekte
  2. Arduino Energiemonitor & Datenlogger (Dr. Wattson, MCP39F521) – Schritt-für-Schritt
  3. Arduino Temperatur- & Feuchtelogger mit DHT11 & Ethernet Shield
  4. Python 3 zu Arduino UNO: Einfache Steuerung & LED-Demo
  5. Arduino an NMEA‑0183 anschließen: Schritt-für-Schritt-Anleitung
  6. JARVIS v1 Heimautomation mit Arduino Nano – Schritt-für-Schritt Tutorial
  7. Arduino Multithreading mit Protothreading meistern: Ein Schritt-für-Schritt-Tutorial
  8. Den nRF24L01 meistern: Drahtlose Kommunikation, Arduino-Integration, Schaltpläne & Code-Anleitung
  9. MPU6050 Beschleunigungs- & Gyrosensor mit Arduino: Tutorial
  10. ADXL345 Beschleunigungssensor mit Arduino: Orientierung tracken