При подключении нескольких устройств или датчиков бывает необходимо определить адрес каждого устройства. Обычно производитель пишет информацию об адресе, но иногда нет времени искать. Ниже приведу Скетч-пример как на Arduino просканировать все подключенние устройства и вывести их адреса.

Подключение

Подключается через контакты SDA и SCL (на ардуино УНО и НАНО они на контактах A4 и A5).

Скетч

#include <Wire.h>

byte error, address;
int nDevices;  //Кол-во найденных устройств

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

void loop() {
  Serial.println("Scanning...");
  nDevices = 0;
  for (address = 1; address < 127; 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("Unknow error at address 0x");
      if (address < 16)
        Serial.print("0");
      Serial.println(address, HEX);
    }
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
  delay(5000);  // Ждем 5 сек. до следующего сканирования
}
Комментарии  
+1 # Глеб 17.06.2016 23:45
спасибо работает
очень полезная программа
Ответить | Ответить с цитатой | Цитировать
0 # Сергей 20.06.2016 15:12
Спасибо!
Ответить | Ответить с цитатой | Цитировать
0 # Vit 13.09.2016 17:20
Спаибо, очень помогли.
Ответить | Ответить с цитатой | Цитировать
0 # irishorver 09.10.2016 16:37
О! Спасибо огромное! Я полдня долбался с дисплеем, пока с помощью вашего скетча не выяснил, что использовал не тот порт!
Ответить | Ответить с цитатой | Цитировать
0 # Саша 12.10.2016 00:43
ОООО друг спасибо! Подключил я свой дисплей.... А до этого хотел уже спор с китайцем открывать мол дисплей продал не рабочий. Оказывается они устройства по этой шине имеют разные адреса. И при том не все одинаковые.
Ответить | Ответить с цитатой | Цитировать
+1 # Rescuer 15.10.2016 18:13
Спасибо, дружище! Начал потихоньку разбираться в i2c,а то дисплей подключить не мог, не знал, что виновато: адрес не тот или монтаж с ошибками.
Ответить | Ответить с цитатой | Цитировать
0 # 1602_pcf8574at 04.12.2016 19:20
Почему-то не видит ничего. Подключал проверенные рабочие устройства (4-значный семиегментник на tm1637). Не видит.

Плата Arduino UNO R3 AT Mega328p китайская.
Ответить | Ответить с цитатой | Цитировать
0 # OmegaTS 03.01.2017 00:54
А на tm1637 случаем не SPI?
Ответить | Ответить с цитатой | Цитировать
-1 # Александр 12.01.2017 12:28
Почему-то скетч вообще не работает, загружается и все, хоть бы одно сообщение на эран выдало. Почему так?
Туплю по страшному... ;-)
Ответить | Ответить с цитатой | Цитировать
0 # Вячеслав 09.02.2017 16:16
Монитор порта откройте. Информация туда выводится.
Ответить | Ответить с цитатой | Цитировать
-1 # Дмитрий Анисимов 03.03.2017 00:46
Я только одного не понял к каким входам подключать устройства???
Ответить | Ответить с цитатой | Цитировать
0 # Администратор 03.03.2017 09:39
Поправил информацию.
Ответить | Ответить с цитатой | Цитировать
0 # Георгий 14.09.2017 03:13
Огромное спасибо за скетч, помог найти дисплей! :-)
Ответить | Ответить с цитатой | Цитировать
Добавить комментарий