Определение адреса I2C устройства

Введение

Шина I2C очень популярна тем, что к ней можно подключить очень много устройств. Тем самым не требуется занимать много выводов контроллера и подключение намного понятнее и нагляднее. Чтобы обратиться к модулю на шине, нужно указать его адрес. Но покупая очередное устройство, не всегда понятно, как же определить, какой именно адрес на шине I2C принадлежит тому или иному устройству.

Простое определение адреса устройства

Шаг 1. Подключите устройство к контроллеру

Подключите Ваше устройство напрямую к контроллеру.

Шаг 2. Загрузите скетч, указанный ниже в контроллер

Скетч для загрузки:

#include <Wire.h> //подключение библиотеки
 
 
void setup()
{
  Wire.begin(); //инициализация шины
  Serial.begin(9600); //инициализация монитора Serial-порта
  while (!Serial); //ожидание доступности порта
  Serial.println("I2C Scanner");
}
 
 
void loop()
{
  //вспомогательные переменные
  byte error; //хранение кода ошибки
  byte address; //хранение адреса устройства
  int nDevices = 0; //счётчик устройств
 
  Serial.println("Scanning..."); //вывод надписи
 
  for (address = 1; address < 127; address++ )
  {
    /* Для поиска устройств воспользуемся функцией коммуникации и
     *  окончания коммуникации с устройством на адресе от 1 до 127. 
     *  При окончании коммуникации возвращается код ошибки.
     *  Если он не равен нулю, то коммуникация прошла успешно,
     *  и устройство на данном адресе найдено.
     *  В противном случае выводится информация об ошибке.
     */
    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) { //если код ошибки равен 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 found");
  } else {
    Serial.print("Found ");
    Serial.print(nDevices);
    Serial.println(" devices");
  }
 
  delay(5000);  //пауза в 5 секунд между сканированием
}

Шаг 3. Откройте монитор порта

В мониторе Serial-порта будет выведен адрес Вашего устройства. В данном примере адресом устройства является «0x51».

Scanning...
I2C device found at address 0x51  !
Found 1 devices

Примечание: Для подключения нескольких устройств, посмотрите примеры из статьи Расширитель I2C.