Introducción
I2C (Inter-Integrated Circuit) es un protocolo de comunicación popular que permite a los microcontroladores comunicarse con sensores, pantallas y otros periféricos usando solo dos cables: SDA (datos) y SCL (reloj). Pero cuando estás prototipando, a menudo no conoces la dirección exacta de un nuevo dispositivo I2C. Ahí es donde un escáner I2C resulta útil. Sondea todas las direcciones posibles en el bus e informa cuáles responden.
En este tutorial, construiremos un escáner I2C para la Raspberry Pi Pico usando el simulador en navegador Velxio. Aprenderás a cablear un circuito simple con dos LEDs indicadores, escribir el código de escaneo en Arduino C++ e interpretar los resultados. ¡Sin necesidad de hardware, solo tu navegador!

Explicación del Circuito
Nuestro circuito es mínimo pero instructivo. Usaremos dos LEDs para proporcionar retroalimentación visual durante el escaneo:
- LED azul (led-scan): Conectado a GP12 (D12 en la Pico) a través de una resistencia limitadora de corriente (interna del componente LED). Su ánodo (A) se conecta a GP12 y su cátodo (C) va a tierra. Este LED parpadea cada vez que el escáner envía una condición de inicio en el bus I2C.
- LED verde (led-found): Conectado a GP10 (D10). Su ánodo va a GP10 y el cátodo a tierra. Este LED se enciende cada vez que se encuentra un dispositivo durante el escaneo.
Ambos LEDs comparten una conexión común a tierra con el pin GND.1 de la Pico. El bus I2C en sí mismo usa los pines predeterminados: SDA = GP4 y SCL = GP5. No se necesitan resistencias de pull-up externas porque las resistencias de pull-up internas de la Pico son habilitadas por la librería Wire.
Para construir este circuito en Velxio:
- Abre el selector de componentes desde la barra de herramientas del lienzo.

- Añade una placa Raspberry Pi Pico.
- Añade dos LEDs (azul y verde) desde la categoría de Salida.
- Conéctalos como se describe: GP12 → ánodo del LED azul, GP10 → ánodo del LED verde, ambos cátodos → GND.
- Usa la barra de herramientas del lienzo para hacer zoom y organizar los componentes de forma ordenada.

Explicación del Código
Ahora vamos a sumergirnos en el código. Abre el editor de código en Velxio y pega el siguiente sketch:
// Raspberry Pi Pico — I2C Scanner
// Scans I2C bus (Wire / I2C0: SDA=GP4, SCL=GP5) for devices
#include <Wire.h>
void setup() {
Serial.begin(115200);
delay(500);
Wire.begin(); // SDA=GP4, SCL=GP5 by default on Pico
Serial.println("=== Pico I2C Scanner ===");
Serial.println("Default I2C0: SDA=GP4, SCL=GP5");
Serial.println();
}
void loop() {
Serial.println("Scanning I2C bus...");
int found = 0;
for (byte addr = 1; addr < 127; addr++) {
Wire.beginTransmission(addr);
byte error = Wire.endTransmission();
if (error == 0) {
found++;
Serial.print(" Device found at 0x");
if (addr < 16) Serial.print("0");
Serial.print(addr, HEX);
// Identify known addresses
switch (addr) {
case 0x48: Serial.print(" (Temperature sensor)"); break;
case 0x50: Serial.print(" (EEPROM)"); break;
case 0x68: Serial.print(" (DS1307 RTC)"); break;
case 0x27: Serial.print(" (LCD backpack)"); break;
case 0x3C: Serial.print(" (SSD1306 OLED)"); break;
default: break;
}
Serial.println();
}
}
Serial.print("Scan complete. Found ");
Serial.print(found);
Serial.println(" device(s).");
Serial.println();
delay(5000);
}
Cómo Funciona
Wire.begin()inicializa el periférico I2C en los pines predeterminados (GP4/GP5). En la Pico, esto configura I2C0.- El bucle
foritera a través de todas las direcciones posibles de 7 bits, desde 1 hasta 127. La dirección 0 está reservada para llamada general, así que la saltamos. - Para cada dirección, llamamos a
Wire.beginTransmission(addr)y luego aWire.endTransmission(). El valor de retorno deendTransmission()es 0 si el dispositivo confirmó la recepción, o un código de error distinto de cero en caso contrario. - Si un dispositivo responde, imprimimos su dirección en formato hexadecimal. El código también incluye una sentencia switch que etiqueta algunas direcciones comunes (por ejemplo, 0x3C para pantallas OLED SSD1306).
- El LED azul en GP12 cambia de estado cada vez que comienza un ciclo de escaneo (puedes añadir
digitalWrite(12, HIGH)ydigitalWrite(12, LOW)alrededor del bucle de escaneo para retroalimentación visual). El LED verde en GP10 se enciende cuando se encuentra un dispositivo.
Para compilar y ejecutar, haz clic en el botón compilar en la barra de herramientas del editor.

Conceptos Clave
- Protocolo I2C: Un bus de comunicación serie, multipunto, multimestro y multi-esclavo, con conmutación de paquetes y señalización asimétrica. Cada dispositivo tiene una dirección única.
- Librería Wire: La librería integrada de Arduino para comunicación I2C. En la Pico, usa I2C0 por defecto.
- Resistencias de Pull-up: Las líneas I2C necesitan resistencias de pull-up a VCC. La Pico tiene pull-ups internos que se pueden habilitar, pero para un funcionamiento fiable con muchos dispositivos, se recomiendan resistencias externas de 4.7kΩ.
- Direccionamiento: Las direcciones de 7 bits van desde 0x01 hasta 0x7F (127). Algunas direcciones están reservadas (por ejemplo, 0x00 para llamada general).
Errores Comunes y Consejos de Depuración
- ¿No se encuentran dispositivos? Verifica que tus dispositivos I2C estén alimentados y conectados correctamente. En la simulación, asegúrate de haber añadido periféricos I2C virtuales (como un OLED o un sensor de temperatura) al circuito.
- ¿Pines incorrectos? Los pines predeterminados de I2C0 en la Pico son GP4 (SDA) y GP5 (SCL). Si estás usando pines diferentes, llama a
Wire.setSDA(pin)yWire.setSCL(pin)antes deWire.begin(). - ¿El Monitor Serie no muestra salida? Asegúrate de que la velocidad en baudios coincida (115200 en nuestro código). En Velxio, abre el Monitor Serie desde la barra de herramientas.
- ¿Los LEDs no parpadean? Verifica el cableado: ánodo al GPIO, cátodo a GND. También comprueba que has configurado los pines como salidas en
setup()conpinMode(12, OUTPUT)ypinMode(10, OUTPUT).
Extensiones Sugeridas
- Añade un dispositivo I2C real: Coloca un OLED SSD1306 o un sensor BMP280 en el lienzo y observa cómo el escáner lo detecta.
- Escanea múltiples buses: La Pico tiene dos periféricos I2C (I2C0 e I2C1). Modifica el código para escanear ambos.
- Muestra los resultados en un LCD: En lugar del Serial, muestra las direcciones encontradas en un LCD de 16x2.
- Detección y configuración automáticas: Una vez que conozcas la dirección de un dispositivo, inicializa su librería automáticamente.
¡Pruébalo Tú Mismo!
¿Listo para escanear el bus I2C? Abre el ejemplo en vivo en Velxio y empieza a experimentar:
Inicia el Escáner I2C para Pico en Velxio
Sin descargas, sin soldaduras, solo simulación pura. Modifica el código, añade nuevos componentes y ve los resultados al instante. ¡Feliz escaneo!