Bei der Verwendung von I²C Modulen und Sensoren kann es vorkommen, dass der jeweilige Hersteller des Geräts die interne I²C Adresse nicht angibt bzw. nicht veröffentlicht. Es können dementsprechend schwerwiegende Probleme auftreten wenn die Sensor-Adresse nicht bekannt ist oder auf die falsche Adresse geschrieben wird. Mit einem Arduino I²C Scanner Sketch kann diese Frage jedoch schnell behoben werden.
I²C Pins verschiedener Arduino Geräte
Der I²C Bus besteht aus zwei Leitungen, welche als Serial Data (SDA) und Serial Clock (SCL) bezeichnet werden. Wie der Name bereits vermuten lässt, werden die entsprechenden Daten über die SDA Verbindung transferiert. Währenddessen gibt die SCL Verbindung die passende Taktrate vor und bestimmt somit die Datenrate.
Viele Arduino Modelle nutzen jedoch unterschiedliche GPIO-Pins für diese beiden Verbindungen:
Arduino Gerät | SDA | SCL |
---|---|---|
Arduino UNO | A4 | A5 |
Arduino Nano | A4 | A5 |
Arduino Mega2560 | 20 | 21 |
Wemos D1 Mini | D2 | D1 |
Node MCU | D2 | D1 |
Arduino I²C Scanner
Sketch
// https://iotspace.dev/arduino-i2c-scanner-sketch-und-anleitung/ // Arduino I2C Scanner // Baudrate 115200 #include <Wire.h> void setup() { Wire.begin(); Serial.begin(115200); delay(500); Serial.println("\n=== I2C Scanner ==="); } void loop() { byte error, address; int nDevices; Serial.println("Starte Scanvorgang"); nDevices = 0; for (address = 1; address < 127; address++ ) { Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C Gerät gefunden - Adresse: 0x"); if (address < 16) Serial.print("0"); Serial.print(address, HEX); Serial.println(""); nDevices++; } else if (error == 4) { Serial.print("Unbekannter Fehler an Adresse: 0x"); if (address < 16) Serial.print("0"); Serial.println(address, HEX); } } if (nDevices == 0) Serial.println("Keine I2C Geräte gefunden\n"); else Serial.println("Scanvorgang Abgeschlosse\n"); delay(10000); }
Ausgabe
Die Ausgabe des seriellen Monitors der Arduino IDE zegt nun das angeschlossene Gerät mit der entsprechenden I2C Adresse. Im folgenden Beispiel wurde ein GY-302 Lichtintensitätssensor verwendet.