🛠 Scanner le bus I2C depuis le microcontrôleur

LattePanda 3 Delta (id : lattepanda-3) · intermediaire · Schéma : IMG-lattepanda-3-intermediaire-2-scanner-i2c.svg — Un capteur I2C connecté aux broches SDA/SCL de l'en-tête Arduino avec résistances de pull-up, l'ATmega32U4 balayant les adresses de 0x08 à 0x77.

Objectifs

L'en-tête Arduino de la LattePanda 3 Delta expose un bus I2C (des tutoriels officiels ADC et I2C existent dans la documentation IO_Playability). Plutôt que de supposer un capteur précis, ce tutoriel écrit un scanner I2C natif en C++ sur l'ATmega32U4 : il balaie toutes les adresses 7 bits et rapporte les périphériques présents sur le port série interne. C'est l'outil de diagnostic indispensable avant tout branchement de capteur, et il montre une fois de plus la double personnalité de la carte : le bus est du côté Arduino, pas du côté PC.

Matériel

Code complet

Sketch Arduino IDE (board « Arduino Leonardo ») :

// Scanner I2C pour l'ATmega32U4 embarqué de la LattePanda 3 Delta.
#include <Wire.h>

void setup {
  Serial.begin(9600);
  while (!Serial) {}               // attendre le port série USB
  Wire.begin;                    // maître I2C
  Serial.println("Scan I2C : 0x08 -> 0x77");
}

void loop {
  byte trouve = 0;
  for (byte addr = 8; addr < 120; addr++) {
    Wire.beginTransmission(addr);
    if (Wire.endTransmission == 0) {   // 0 = ACK reçu
      Serial.print("Périphérique trouvé à 0x");
      Serial.println(addr, HEX);
      trouve++;
    }
  }
  if (trouve == 0) Serial.println("Aucun périphérique I2C.");
  Serial.println("---");
  delay(5000);                     // refaire un scan toutes les 5 s
}

Les lignes s'affichent dans le moniteur série de l'IDE ou sur le port COM du MCU depuis le SoC (voir le tutoriel pont série).

Vérification attendue

Avec un module branché, le scan affiche son adresse (par exemple une adresse 0x3C pour beaucoup d'écrans OLED — l'adresse réelle dépend du module). Sans rien brancher mais SDA/SCL laissés en l'air, beaucoup d'adresses peuvent répondre faussement : c'est le symptôme classique de l'absence de pull-up.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels