Introdução
I2C (Inter-Integrated Circuit) é um protocolo de comunicação popular que permite que microcontroladores conversem com sensores, displays e outros periféricos usando apenas dois fios: SDA (dados) e SCL (clock). Mas, durante a prototipagem, muitas vezes você não sabe o endereço exato de um novo dispositivo I2C. É aí que um scanner I2C se torna útil. Ele testa todos os endereços possíveis no barramento e informa quais respondem.
Neste tutorial, vamos construir um scanner I2C para o Raspberry Pi Pico usando o simulador online Velxio. Você aprenderá a montar um circuito simples com dois LEDs indicadores, escrever o código de varredura em Arduino C++ e interpretar os resultados. Nenhum hardware necessário — apenas seu navegador!

Montagem do Circuito
Nosso circuito é mínimo, mas instrutivo. Usaremos dois LEDs para fornecer feedback visual durante a varredura:
- LED azul (led-scan): Conectado ao GP12 (D12 no Pico) através de um resistor limitador de corrente (interno ao componente LED). Seu ânodo (A) conecta-se ao GP12, e seu cátodo (C) vai ao terra. Este LED pisca cada vez que o scanner envia uma condição de início no barramento I2C.
- LED verde (led-found): Conectado ao GP10 (D10). Seu ânodo vai ao GP10, cátodo ao terra. Este LED acende sempre que um dispositivo é encontrado durante a varredura.
Ambos os LEDs compartilham uma conexão comum de terra com o pino GND.1 do Pico. O barramento I2C em si usa os pinos padrão: SDA = GP4 e SCL = GP5. Não são necessários resistores de pull-up externos, pois os pull-ups internos do Pico são habilitados pela biblioteca Wire.
Para montar este circuito no Velxio:
- Abra o seletor de componentes na barra de ferramentas do canvas.

- Adicione uma placa Raspberry Pi Pico.
- Adicione dois LEDs (azul e verde) da categoria Saída.
- Conecte-os conforme descrito: GP12 → ânodo do LED azul, GP10 → ânodo do LED verde, ambos os cátodos → GND.
- Use a barra de ferramentas do canvas para ampliar e organizar os componentes de forma organizada.

Explicação do Código
Agora vamos mergulhar no código. Abra o editor de código no Velxio e cole o sketch a seguir:
// 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);
}
Como Funciona
Wire.begin()inicializa o periférico I2C nos pinos padrão (GP4/GP5). No Pico, isso configura o I2C0.- O loop
foritera por todos os endereços de 7 bits possíveis, de 1 a 127. O endereço 0 é reservado para chamada geral, então o pulamos. - Para cada endereço, chamamos
Wire.beginTransmission(addr)e depoisWire.endTransmission(). O valor de retorno deendTransmission()é 0 se o dispositivo confirmou, ou um código de erro diferente de zero caso contrário. - Se um dispositivo responder, imprimimos seu endereço em formato hexadecimal. O código também inclui uma instrução switch que rotula alguns endereços comuns (por exemplo, 0x3C para displays OLED SSD1306).
- O LED azul no GP12 alterna cada vez que um ciclo de varredura começa (você pode adicionar
digitalWrite(12, HIGH)edigitalWrite(12, LOW)ao redor do loop de varredura para feedback visual). O LED verde no GP10 acende quando um dispositivo é encontrado.
Para compilar e executar, clique no botão compilar na barra de ferramentas do editor.

Conceitos Principais
- Protocolo I2C: Um barramento de comunicação serial multi-mestre, multi-escravo, com comutação de pacotes e terminação única. Cada dispositivo possui um endereço único.
- Biblioteca Wire: Biblioteca integrada do Arduino para comunicação I2C. No Pico, ela usa I2C0 por padrão.
- Resistores de Pull-up: As linhas I2C precisam de resistores de pull-up para VCC. O Pico possui pull-ups internos que podem ser habilitados, mas para operação confiável com muitos dispositivos, resistores externos de 4,7kΩ são recomendados.
- Endereçamento: Endereços de 7 bits variam de 0x01 a 0x7F (127). Alguns endereços são reservados (por exemplo, 0x00 para chamada geral).
Armadilhas Comuns e Dicas de Depuração
- Nenhum dispositivo encontrado? Verifique se seus dispositivos I2C estão alimentados e conectados corretamente. Na simulação, certifique-se de ter adicionado periféricos I2C virtuais (como um OLED ou sensor de temperatura) ao circuito.
- Pinos errados? Os pinos padrão I2C0 do Pico são GP4 (SDA) e GP5 (SCL). Se você estiver usando pinos diferentes, chame
Wire.setSDA(pin)eWire.setSCL(pin)antes deWire.begin(). - Monitor Serial não está mostrando saída? Certifique-se de que a taxa de transmissão corresponde (115200 em nosso código). No Velxio, abra o Monitor Serial na barra de ferramentas.
- LEDs não estão piscando? Verifique a fiação: ânodo no GPIO, cátodo no GND. Verifique também se você configurou os pinos como saídas em
setup()compinMode(12, OUTPUT)epinMode(10, OUTPUT).
Extensões Sugeridas
- Adicione um dispositivo I2C real: Coloque um OLED SSD1306 ou um sensor BMP280 no canvas e veja o scanner detectá-lo.
- Varra múltiplos barramentos: O Pico possui dois periféricos I2C (I2C0 e I2C1). Modifique o código para varrer ambos.
- Exiba resultados em um LCD: Em vez do Serial, mostre os endereços encontrados em um LCD 16x2.
- Detecção e configuração automáticas: Depois de saber o endereço de um dispositivo, inicialize automaticamente sua biblioteca.
Experimente Você Mesmo!
Pronto para varrer o barramento I2C? Abra o exemplo ao vivo no Velxio e comece a experimentar:
Inicie o Scanner I2C Pico no Velxio
Sem downloads, sem solda — apenas simulação pura. Modifique o código, adicione novos componentes e veja os resultados instantaneamente. Boa varredura!