Principe
Le bus I2C permet de relier facilement différents circuits à un microprocesseur.
Il est implémenté par logiciel dans le microcontrôleur Arduino.
I²C est alors utilisable avec la bibliothèque 'Wire'.
Plusieurs équipements, soit maîtres, soit esclaves, peuvent être connectés au bus.
Quand on réalise un branchement sur le bus I2C , on a besoin de savoir si le dispositif est bien branché et s'il répond correctement.
Programme Scanner I2C
Ce petit programme I2cScanner permet de scanner les adresses 7-bits (de 1 à 127) et de lister tous les dispositifs I2C qu'il trouve.
- Code: Tout sélectionner
// --------------------------------------
// i2c_scanner
// Ce programme teste ce qui est branché sur le bus I2C
//
// Version 4, March 3, 2013, Using Arduino 1.0.3
// by Arduino.cc user Krodal.
// Changes by louarnold removed.
// according to the i2c scanner by Nick Gammon
// http://www.gammon.com.au/forum/?id=10896
// Tiptopboards.com modifié 16 08 2013
//Source : http://playground.arduino.cc/Main/I2cScanner
#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
Serial.println("\n Scanner I2C");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Recherche...");
nDevices = 0;
for(address = 1; address < 127; address++ ) //Adresses 1-127
{
// Le scanner I2C utilise la valeur retournée par Write.endTransmisstion
//pour voir si un dispositif répond à cette aderess
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("Dispositif I2C trouve a l addresse 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Erreur inconnue a l addresse 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("Pas de dispositif I2C trouve\n");
else
Serial.println("Termine\n");
delay(5000); // Attend 5 secondes pour lancer le scan suivant
}
Utilisation :

Dans cet exemple un module horloge RTC DS1307 est branché sur le bus I2C et il fonctionne correctement.
Traduit d'après http://playground.arduino.cc/Main/I2cScanner
Connexion
La connexion I2C est réalisée par l'intermédiaire de 2 lignes :
- SDA (Serial Data Line) : ligne de données bidirectionnelle,
- SCL (Serial Clock Line) : ligne d'horloge de synchronisation bidirectionnelle.
en ajoutant
- GND la masse qui doit être commune aux équipements.
- La tension d'alimentation VDD
Documentation
La norme I2C http://fr.wikipedia.org/wiki/I2C
http://playground.arduino.cc/Main/I2cScanner