/*
 * Scanner I2C — Kaihatsu Lab
 * Affiche dans le moniteur série (115200 bauds) les adresses qui répondent.
 * Un écran SSD1306 répond en général à 0x3C, parfois à 0x3D.
 */
#include <Wire.h>

// ESP32 : SDA = 21 et SCL = 22 par défaut. Changez ces valeurs si votre câblage est différent.
const int PIN_SDA = 21;
const int PIN_SCL = 22;

void setup() {
  Serial.begin(115200);
#if defined(ARDUINO_ARCH_ESP32)
  Wire.begin(PIN_SDA, PIN_SCL);
#else
  Wire.begin();   // Uno / Nano : SDA = A4, SCL = A5
#endif
}

void loop() {
  Serial.println(F("Scan I2C..."));
  uint8_t found = 0;

  for (uint8_t address = 1; address < 127; address++) {
    Wire.beginTransmission(address);
    if (Wire.endTransmission() == 0) {   // 0 = un périphérique a répondu
      Serial.print(F("Périphérique trouvé à l'adresse 0x"));
      if (address < 16) Serial.print('0');
      Serial.print(address, HEX);
      if (address == 0x3C || address == 0x3D) Serial.print(F("  <- probablement l'écran OLED"));
      Serial.println();
      found++;
    }
  }

  if (found == 0) {
    Serial.println(F("Rien détecté : vérifie VCC, GND, SDA et SCL."));
  }
  Serial.println();
  delay(3000);
}
