Haut de la page Suggestions, erreurs, liens mort, idées, ect…
Tutoriels
Scanner le bus I2C
Scanner le bus I2C avec l'IDE Arduino

Avant de commencer, assurez-vous que la dernière version de l'IDE Arduino est installée sur votre ordinateur...

... voir également.

Connecté la carte la carte Arduino ou Esp32 sur un des ports USB ainsi qu'un capteur, par exemple un capteur de température GY-906 MLX90614 I2C...

Redémarrer votre carte. Si un périphérique I2C est connecté à votre carte l'adresse doit apparaitre, dans cet exemple 0x5A...

Allez dans le menu Fichier / Ouvrir... et sélectionner le code ScanI2C.ino téléchargé précédemment, puis cliquer sur le bouton téléversé.

Allez dans le menu Fichier / Outils... pour ouvrir le Moniteur série.

...puis lancer l'IDE Arduino.

Principe

Le bus I2C est un bus série synchrone bidirectionnel half-duplex qui permet de faire communiquer entre eux des composants électroniques très divers grâce à seulement deux fils : Un signal de donnée (SDA), un signal d'horloge (SCL). Il a été développé au début des années 1980, par Philips.

Chaque circuit connecté au bus I²C possède une adresse, qui doit être unique.

Lorsque vous utiliser des modules I2C pour vos projets Arduino, le fabricant n'a parfois pas donné l'adresse du périphérique I2C à l'intérieur de la puce. Cela peut être un problème si l'adresse est inconnue ou si vous entrez la mauvaise adresse.

 

On va voir comment scanner l'adresse I2C avec un code simple, qui va permettre de balayer le périphérique I2C à l'intérieur de votre module connecté au bus I2C.

Pour un Arduino Uno / Nano / Pro Mini, le bus I2C est connecté par défaut sur les ports GPIO A4 (SDA) et A5 (SCL).

Pour un Arduino Mega 2560, le bus I2C est connecté par défaut sur les ports GPIO D20 (SDA) et D21 (SCL).

Pour ma Carte esp32 (Seekool) le bus I2C est connecté par défaut sur les ports GPIO D21 (SDA) et D22 (SCL).

Télécharger le code:

Note

 

void setup() {

  Wire.begin(16,17);

  Serial.begin(115200);

  Serial.println("\nI2C Scanner");

}

 

Si vous voulez affecter d'autre port GPIO au bus I2C, modifier la ligne de code surligné.

Par exemple, pour affecté les ports 16 et 17, GPIO 16 pour SDA et GPIO 17 pour SCL, modifié la ligne Wire.begin() en Wire.begin(16,17).

/*

  Scan I2C pour Esp32

 

  http://nano-ordinateur-info.fr/

*/

 

#include <Wire.h>

 

 

void setup() {

  Wire.begin();

  Serial.begin(115200);

  Serial.println("\nI2C Scanner");

}

 

void loop() {

  byte error, address;

  int nDevices;

  Serial.println("Scan en cours...");

  nDevices = 0;

  for(address = 1; address < 127; address++ ) {

    Wire.beginTransmission(address);

    error = Wire.endTransmission();

    if (error == 0) {

      Serial.print("Périphérique I2C trouvé à l'adresse 0x");

      if (address<16) {

        Serial.print("0");

      }

      Serial.println(address,HEX);

      nDevices++;

    }

    else if (error==4) {

      Serial.print("Erreur inconnue à l'adresse 0x");

      if (address<16) {

        Serial.print("0");

      }

      Serial.println(address,HEX);

    }   

  }

  if (nDevices == 0) {

    Serial.println("Pas de périphérique I2C trouvé");

  }

  else {

    Serial.println("Terminé");

  }

  delay(5000);         

}