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éthodeInitialisation du bus I2c

Pour initialiser le bus il faut utiliser la méthode : begin() à mettre dans la fonction setup().

  1. 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...

  2. 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éthodeLes méthodes utilisables en mode maître : pour envoyer (écrire) des données dans un esclave .

  • beginTransmission() -->Initie un transfert en mode écriture

    1. Génère une condition de départ

    2. 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 :

    1. nb=Wire.write(value) --> avec value : l'octet à écrire ( nb contient le nombre d'octets écrits .( sa lecture est optionnelle :-->Wire.write(value) )

    2. nb=Wire.write(string)--> avec string : une chaine de caractère à envoyer

    3. 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 :

    1. Wire.endTransmission(); -->Génère une condition d'arrêt. (met fin à la transmission)

    2. 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éthodeLes méthodes utilisables en mode maître : pour recevoir (lire) des données provenant d'un esclave .

  • requestFrom() -->Initie un transfert en mode lecture :

    1. Génère une condition de départ

    2. envoie le premier octet (adresse de l'esclave sur 7 bits ) et (bit r/w à 1)

    3. 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"