/*
* I2C Scanner para ESP8266
* ArtificialRoot - artificialroot.es
*
* Escanea el bus I2C y muestra los dispositivos encontrados
* Útil para verificar conexiones antes del proyecto principal
*
* Pines I2C personalizados:
* SDA → D6 (GPIO14)
* SCL → D5 (GPIO12)
*/
#include <Wire.h>
#define SDA_PIN 14 // D6
#define SCL_PIN 12 // D5
void setup() {
Serial.begin(115200);
while (!Serial);
Serial.println("\n=== Scanner I2C - ArtificialRoot ===");
Serial.println("Iniciando escaneo...\n");
// Inicializar I2C con pines personalizados
Wire.begin(SDA_PIN, SCL_PIN);
Wire.setClock(100000); // 100kHz
escanearI2C();
}
void loop() {
delay(5000);
Serial.println("\n--- Nuevo escaneo ---");
escanearI2C();
}
void escanearI2C() {
byte error, address;
int dispositivos = 0;
Serial.println("Escaneando direcciones 0x01-0x7F...\n");
for(address = 1; address < 127; address++) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("Dispositivo encontrado en: 0x");
if (address < 16) Serial.print("0");
Serial.print(address, HEX);
Serial.print(" (");
identificarDispositivo(address);
Serial.println(")");
dispositivos++;
}
else if (error == 4) {
Serial.print("Error desconocido en: 0x");
if (address < 16) Serial.print("0");
Serial.println(address, HEX);
}
}
Serial.println("\n------------------------");
if (dispositivos == 0) {
Serial.println("No se encontraron dispositivos I2C");
Serial.println("Verifica:");
Serial.println("- Conexiones SDA/SCL");
Serial.println("- Alimentación 3.3V");
Serial.println("- Cables no demasiado largos");
}
else {
Serial.print("Total dispositivos encontrados: ");
Serial.println(dispositivos);
}
Serial.println("========================\n");
}
void identificarDispositivo(byte address) {
switch(address) {
case 0x38:
Serial.print("Posible AHT21/AHT20");
break;
case 0x3C:
Serial.print("OLED Display SSD1306");
break;
case 0x3D:
Serial.print("OLED Display SSD1306 (Alt)");
break;
case 0x53:
Serial.print("Sensor ENS160");
break;
case 0x76:
case 0x77:
Serial.print("Posible BME280/BMP280");
break;
default:
Serial.print("Desconocido");
break;
}
}