I²C Kommunikation mit Arduino meistern – Praktisches Tutorial
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. Leitungen: 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. Datenübertragung in 8-Bit-Sequenzen: Zwei Breakout-Boards: GY-80 (4 Sensoren) + GY-521 (3 Sensoren) = 7 Sensoren an 2 Drähten. Anschluss: Arduino SCL → beide Boards SCL, Arduino SDA → beide Boards SDA, GND & 5V gemeinsam. Pull-Ups auf Boards vorhanden. Adressen können auch per I²C Scanner Sketch (Arduino Playground) ausgelesen werden. Beispiel ADXL345 X-Achse: Daten in zwei Registern: DATAX0 (0x32) und DATAX1 (0x33). Dieser Code demonstriert den reinen I²C-Lesevorgang. Die Umrechnung der Rohdaten in physikalische Werte erfolgt im MEMS-Tutorial.Übersicht

Funktionsweise

I²C Protokoll



Praxisbeispiel

I²C-Adressen der Sensoren
Sensor Chip Adresse 3-Achsen-Beschleunigungsmesser ADXL345 0x53 3-Achsen-Gyroskop L3G4200D 0x69 3-Achsen-Magnetometer HMC5883L 0x1E Barometer + Thermometer BMP085 0x77 MPU6050 (GY-521) MPU6050 0x68 Interne Register
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).
}
Herstellungsprozess
- Nahtlose Arduino–Raspberry Pi 2 I2C-Integration für IoT-Sensorprojekte
- Arduino Energiemonitor & Datenlogger (Dr. Wattson, MCP39F521) – Schritt-für-Schritt
- Arduino Temperatur- & Feuchtelogger mit DHT11 & Ethernet Shield
- Python 3 zu Arduino UNO: Einfache Steuerung & LED-Demo
- Arduino an NMEA‑0183 anschließen: Schritt-für-Schritt-Anleitung
- JARVIS v1 Heimautomation mit Arduino Nano – Schritt-für-Schritt Tutorial
- Arduino Multithreading mit Protothreading meistern: Ein Schritt-für-Schritt-Tutorial
- Den nRF24L01 meistern: Drahtlose Kommunikation, Arduino-Integration, Schaltpläne & Code-Anleitung
- MPU6050 Beschleunigungs- & Gyrosensor mit Arduino: Tutorial
- ADXL345 Beschleunigungssensor mit Arduino: Orientierung tracken