Introduction L’I2C (Inter-Integrated Circuit), est un bus de communication série utilisé pour connecter des périphériques à un microcontrôleur, comme l’Arduino. Créé par Philips Semiconductor dans les années 1980, l’I2C permet de connecter plusieurs périphériques avec seulement deux fils : un pour les données (SDA) et un pour l’horloge (SCL).Chaque périphérique sur le bus I2C a une adresse unique, permettant au maître de communiquer individuellement avec chaque esclave. Fonctionnement bus I2C La liaison I2C est une liaison half duplex, c’est à dire que l’on ne peut pas écouter et envoyer des données en même temps. La liaison I2C possède un débit moyen de 100 kilo-hertz à 1 Méga-hertz.Comme on peut voir sur le schéma ci-dessous la liaison I2C n’est pas exclusive, cela veut dire qu’un maitre peut parler à plusieurs esclaves. On peut faire communiquer entre eux des composants électronique très divers grâce à seulement 2 fils :Signal de donnée : SDASignal d’horloge : SCL Broche I2C sur la carte Arduino Pour utiliser l’I2C avec une carte Arduino, vous devez connaître les broches dédiées à la communication I2C. Les broches varient légèrement selon le modèle d’Arduino, mais généralement, elles sont :Arduino Uno : A4 (SDA) et A5 (SCL).Arduino Mega : 20 (SDA) et 21 (SCL).Arduino Leonardo : 2 (SDA) et 3 (SCL)Pour la carte Arduino Uno on peut les retrouver sur l’image ci-dessous : Ecriture sur l’I2C Pour écrire un message sur l’I2C vous devez d’abord connaître l’adresse I2C sur lequel vous souhaitez envoyer le message. Voici le programme pour envoyer des données sur l’I2C : #include <Wire.h> void setup() { Wire.begin(); // Initialisation en tant que maître } void loop() { Wire.beginTransmission(0x3C); // Commencer une transmission avec le périphérique à l'adresse 0x3C Wire.write("Hello"); // Envoyer des données Wire.endTransmission(); // Terminer la transmission delay(500); } Lecture sur l’I2C Voic un exemple qui permet de lire sur l’I2C de la carte Arduino sur l’adresse 0X3C : #include <Wire.h> void setup() { Wire.begin(0x3C); // Initialisation en tant qu'esclave avec l'adresse 0x3C Wire.onReceive(receiveEvent); // Registre une fonction de réception Serial.begin(9600); } void loop() { delay(100); // Laisser du temps pour les autres tâches } void receiveEvent() { while (Wire.available()) { char c = Wire.read(); // Lire les données envoyées par le maître Serial.print(c); // Afficher les données reçues } } Conclusion Si vous souhaitez un exemple de projet sur Arduino utilisant l’I2C, vous pouvez voir notre cours sur le module RTC. Si vous souhaitez connaître d’autre bus de communication, vous avez l’UART et le SPI.