// ---------------------------------------------------------------------------
// (| " I2C_Scan_Pico.ino                                                  "|)
// (| " Este es un sencillo sketch para escanear buscando dispositivos     "|)
// (| " I2C conectados en I2C cero, localizandolos e imprimiendo las       "|)
// (| " direcciones encontradas en hexadecimal, en la shell o consola, con "|)
// (| " una raspberry pi pico y el lenguaje de programación Arduino        "|)
// (| " (basado en Wiring).                                                "|)
// (| "                                                                    "|)
// (| " El objeto contiene como variables el rango de direcciones para el  "|)
// (| " escaneo <Low_Address> y <High_Address>. El objeto se inicializa a  "|)
// (| " traves del método Init(). El escaneo se hara cada 5 segundos,      "|)
// (| " imprimiendo los resultados constantemente.                         "|)
// (| "                                                                    "|)
// (| " Usaremos los valores predeterminados de I2C0: SDA= Pin GP4         "|)
// (| " SCL= Pin GP5 Vcc= VBUS GND= GND de la raspberry pi pico.           "|)
// (| "                                                                    "|)
// (| " Este código de ejemplo es de dominio público.                      "|)
// (| "                                                                    "|)
// (| " Maker: jorgechac©                                                  "|)
// (| " Visita  https://jorgechac.blogspot.com                             "|)
// (| "                                                                    "|)
// (| " Venta de accesorios Arduino/Raspberry Pi Pico/ESP32   		         "|)
// (| " Whatsapp y Ventas NEQUI +573177295861                              "|)
// (| " Bucaramanga - Colombia                                             "|)
// (| " Simulaciön https://wokwi.com/projects/342110236819063378           "|)
// (| " https://jorgechac.blogspot.com/2021/04/raspberry-pi-pico-pin-mapping.html "|)
// ----------------------------------------------------------------------------------

#include <Wire.h>

void setup()
{
  Wire.begin();
  Serial1.begin(9600);
  Serial1.println("\nI2C Scanner");
}

void loop()
{
  byte error, address;
  int nDevices;

  Serial1.println("Scanning...");

  nDevices = 0;
  for (address = 1; address < 127; address++ )
  {

    // I2C_scanner utiliza el valor de retorno de la Write.endTransmisstion para ver si un dispositivo reconoció la dirección:

    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0)
    {
      Serial1.print("Dispositivo I2C encontrado en la direccion hexadecimal 0x");
      if (address < 16)
        Serial1.print("0");
      Serial1.print(address, HEX);
      Serial1.println(" !");

      nDevices++;
    }
    else if (error == 4)
    {
      Serial1.print("Unknow error at address 0x");
      if (address < 16)
        Serial1.print("0");
      Serial1.println(address, HEX);
    }
  }
  if (nDevices == 0)
    Serial1.println("No I2C devices found\n");
  else
    Serial1.println("done\n");

  delay(5000);                               // wait 5 seconds for next scan
}
BOOTSELLED1239USBRaspberryPiPico©2020RP2-8020/21P64M15.00TTT
pico:GP0
pico:GP1
pico:GND.1
pico:GP2
pico:GP3
pico:GP4
pico:GP5
pico:GND.2
pico:GP6
pico:GP7
pico:GP8
pico:GP9
pico:GND.3
pico:GP10
pico:GP11
pico:GP12
pico:GP13
pico:GND.4
pico:GP14
pico:GP15
pico:GP16
pico:GP17
pico:GND.5
pico:GP18
pico:GP19
pico:GP20
pico:GP21
pico:GND.6
pico:GP22
pico:RUN
pico:GP26
pico:GP27
pico:GND.7
pico:GP28
pico:ADC_VREF
pico:3V3
pico:3V3_EN
pico:GND.8
pico:VSYS
pico:VBUS
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
oled1:GND
oled1:VCC
oled1:SCL
oled1:SDA