ESP8266 - Escanear el bus I2C en busca de dispositivos

Este simple boceto escanea el bus I2C en busca de dispositivos. Si se encuentra un dispositivo, se informa al monitor serie de Arduino.

Este boceto es el primer paso para que la comunicación I2C funcione.

i2c_scanner


Este simple boceto escanea el bus 
I2C en busca de dispositivos. Si se encuentra un dispositivo, se informa al monitor serie de Arduino.

Este boceto es el primer paso para que la comunicación I2C funcione.

El boceto muestra las direcciones de 7 bits de los dispositivos encontrados como valores hexadecimales. Ese valor se puede utilizar para la función "Wire.begin" que utiliza la dirección de 7 bits. Algunas hojas de datos utilizan la dirección de 8 bits y algunos bocetos de ejemplo utilizan direcciones decimales.

Enlaces interesantes

La referencia de cables de Arduino .

Desplazador de nivel bidireccional I2C sobre cambio de nivel, resistencias pull-up y dispositivos de conexión de 3.3V.

Página de Nick Gammon sobre I2C : http://gammon.com.au/i2c (la página también tiene un " Escáner I2C ").

robtillaart hizo un "Escáner I2C de múltiples velocidades" que escanea con diferentes velocidades I2C . Si usa cables más largos o bibliotecas que utilizan velocidades I2C más altas, el Escáner I2C de múltiples velocidades es muy útil. (verificado con UNO, 2009, MEGA)

Bosquejo

Abra un nuevo boceto y copie el boceto a continuación. Subalo al Arduino y abre el monitor serial. Se informa de todos los dispositivos encontrados en el bus I2C .

#include <Wire.h>

void setup()
{
  Wire.begin();
  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("nI2C Scanner");
}

void loop()
{
  byte error, address;
  int nDevices; 
 Serial.println("Scanning..."); 

  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission(); 

    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !"); 

      nDevices++;
    }
    else if (error==4)
    {
      Serial.print("Unknown error at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }   
  }
  if (nDevices == 0)
    Serial.println("No I2C devices foundn");
  else
    Serial.println("donen"); 

  delay(5000);           // wait 5 seconds for next scan
}

Puede cambiar los cables y los dispositivos I2C enchufables mientras se ejecuta i2c_scanner.

Comments

Leave your comment

Domingo Lunes Martes Miércoles Jueves Viernes Sábado January February March April May June July August September October November December