La bibliothèque <Wire>
Sur l'Arduino, pour utiliser le bus I2C, il faut inclure la bibliothèque <Wire> avec la ligne suivante (avant le setup()).
#include <Wire.h>
Méthode : Initialisation du bus I2c
Pour initialiser le bus il faut utiliser la méthode : begin() à mettre dans la fonction setup().
Wire.begin() -->Configure la carte Arduino en maître sur le bus I2C. C'est le cas le plus courant on utilise la carte Arduino pour lire des capteurs, afficher des valeurs...
Wire.begin(xx) -->Configure la carte Arduino en mode esclave avec l'adresse 'xx'
Attention :
La méthode begin() ne doit être appelée qu'une seule fois.
Si vous utilisé une autre bibliothèque qui utilise le bus I2C, il faut veiller à ce que les lignes ( #include <Wire.h> ; et Wire.begin(); ) ne soient pas écrites en double.
Méthode : Les méthodes utilisables en mode maître : pour envoyer (écrire) des données dans un esclave .
beginTransmission() -->Initie un transfert en mode écriture
Génère une condition de départ
envoie le premier octet (adresse de l'esclave sur 7 bits) et (bit r/w à 0)
exemple :
Wire.beginTransmission(0x4C); --> va générer une condition de départ, puis envoyer l'adresse de l'esclave (0x4C) en mode écriture
write()--> Ecriture d'un ou plusieurs octets du maître vers l'esclave
exemples :
nb=Wire.write(value) --> avec value : l'octet à écrire ( nb contient le nombre d'octets écrits .( sa lecture est optionnelle :-->Wire.write(value) )
nb=Wire.write(string)--> avec string : une chaine de caractère à envoyer
nb=Wire.write(data,length)--> data : un tableau de donnée et length : le nombre d'octets à transmettre
endTransmission() --> Génère une condition d'arrêt. (met fin à la transmission). Ou génère un ‘restart' (condition d'arrêt + condition de départ)
exemples :
Wire.endTransmission(); -->Génère une condition d'arrêt. (met fin à la transmission)
Wire.endTransmission(false) ; --> génère un ‘restart' (condition d'arrêt + condition de départ)
Exemple de code pour écrire 2 octets ( 0x2C puis 0x21 ) dans le composant "i2c_ID"
La définition de "i2c_ID" a été donnée au début du programme par la directive #define".
(Dans l'exemple précédent "i2c_ID" <-> 0x4C)

Méthode : Les méthodes utilisables en mode maître : pour recevoir (lire) des données provenant d'un esclave .
requestFrom() -->Initie un transfert en mode lecture :
Génère une condition de départ
envoie le premier octet (adresse de l'esclave sur 7 bits ) et (bit r/w à 1)
met fin au transfert par l'envoi d'une condition d'arrêt (ou restart)
exemple : ( adi2c représente l'adresse I2C du composant et nb le nombre d'octets à lire)
Wire.requestFrom(adi2c,nb); --> va générer une condition de départ, puis envoyer l'adresse de l'esclave 'adi2c' en mode lecture et attendre la lecture des 'nb' octets pour envoyer automatiquement la condition d’arrêt
Wire.requestFrom(adi2c,nb,false); --> idem ci-dessus mais la condition d’arrêt est remplacée par un 'restart' (condition d'arrêt + condition de départ)
read()-->lit un octet sur le bus ( méthode à utiliser après un requestFrom() )
exemple :
valeur =Wire.read(); --> la variable valeur
available()--> cette méthode permet de connaître le nombre d'octet qu'il reste à lire (méthode à utiliser après un requestFrom() )
Exemple pour la lecture de 2 octets dans le composant "i2c_ID" : val1 et val2 sont 2 variables déclarés préalablement

Remarque :
Nous n'étudierons pas les méthodes utilisables lorsque l'Arduino est en mode esclave.
Pour plus d'information : le logiciel Arduino comporte une description des librairies standards dans "Aide / Référence ->Vous y trouverez une documentation complète dans la partie "Wire"