Сканирование устройств на шине I2C с помощью Arduino.

Шина I2C (Inter-Integrated Circuit) - это протокол связи, который позволяет микроконтроллеру взаимодействовать с различными устройствами, подключенными к одной шине. Шина I2C является одной из наиболее распространенных и удобных способов подключения датчиков, дисплеев и других периферийных устройств к Arduino и другим МК.

Устройства на шине I2C имеют уникальные адреса, которые используются для их идентификации и взаимодействия с ними. Важно отметить, что некоторые устройства имеют возможность изменять свои адреса, обычно с помощью перманентных перемычек или специальных команд. Это особенно важно учитывать, когда на шине I2C подключено несколько устройств одного типа.

некоторые устройства имеют возможность изменять свои адреса, обычно с помощью перманентных перемычек или специальных команд.

Цель этого урока - научиться сканировать устройства, подключенные к шине I2C, и определять их адреса с помощью Arduino.

На шине I2C можно подключить широкий спектр устройств, включая:

  • Датчики температуры и влажности, такие как датчик BME280 или BMP180.
  • Датчики освещенности, например BH1750.
  • Акселерометры и гироскопы, например MPU-6050.
  • OLED дисплеи (LCD) с контроллером типа SSD1306.
  • Адаптеры расширения портов, такие как MCP23017.
  • Потенциометры и датчики силы нажатия, например ADS1115.
  • Многоканальные аналогово-цифровые преобразователи (ADC), такие как ADS1015.
  • EEPROM-память для хранения данных.
  • Магнитные компасы, например HMC5883L.
  • И многие другие устройства.

На шине I2C можно подключить широкий спектр устройств

Знание адресов подключенных устройств на шине I2C крайне важно для успешного взаимодействия с ними. Каждое устройство на шине I2C имеет уникальный адрес, который необходимо знать, чтобы отправлять и получать данные от него. Пример сканировании шины I2C с использованием Arduino из данного урока, поможет определить адреса подключенных устройств и использовать их в дальнейшей работе.

Теперь, когда мы понимаем, что мы будем делать и почему это важно, давайте перейдем к написанию кода и выполнению урока!

Шаг 1: Подготовка оборудования

Перед тем, как начать, вам понадобятся следующие компоненты:

  • Arduino (любая модель, совместимая с библиотекой Wire).
  • Компьютер с установленной Arduino IDE.
  • Устройства, у которых вы хотите узнать адресс на шине I2C. Убедитесь, что они поддерживают протокол I2C.

Подготовка оборудования

Подключите ваш Arduino к компьютеру с помощью USB-кабеля. Затем подключите устройства к шине I2C на Arduino. Обычно, пины A4 и A5 используются в качестве пинов SDA и SCL соответственно.

Затем подключите устройства к шине I2C на Arduino. Обычно, пины A4 и A5 используются в качестве пинов SDA и SCL соответственно.

Шаг 2: Загрузка (обновить) библиотеку Wire.

В большинстве случаев, библиотека Wire уже поставляется вместе с платами Arduino AVR и должна быть доступна без необходимости дополнительной установки.

Вы можете убедиться, что у вас установлена последняя версия плат Arduino AVR

Вы можете убедиться, что у вас установлена последняя версия плат Arduino AVR, следуя этим шагам:

  • Откройте Arduino IDE на вашем компьютере.
  • Нажмите на меню "Инструменты" (Tools) в верхней части окна Arduino IDE.
  • Наведите курсор на "Плата" (Board) в выпадающем меню.
  • В появившемся подменю выберите "Плата Arduino AVR" (Arduino AVR Boards).

Пожалуйста, обратите внимание, что указанные инструкции предназначены для Arduino IDE и плат Arduino AVR. Если вы используете другую IDE или другие платы Arduino, процесс установки и наличие библиотек могут незначительно отличаться.

Шаг 3: Написание кода

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

#include <Wire.h> //библиотека Wire. 

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

void loop() {
  byte error, address;
  int devices = 0;

  Serial.println("Scanning...");

  for (address = 1; address < 127; address++) {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0) {
      Serial.print("Device found at address 0x");
      if (address < 16) {
        Serial.print("0");
      }
      Serial.print(address, HEX);
      Serial.println();
      devices++;
    } else if (error == 4) {
      Serial.print("Unknown error at address 0x");
      if (address < 16) {
        Serial.print("0");
      }
      Serial.print(address, HEX);
      Serial.println();
    }
  }

  if (devices == 0) {
    Serial.println("No I2C devices found");
  } else {
    Serial.println("Scan complete");
  }

  delay(5000);  // Пауза в 5 секунд между сканированиями
}

Шаг 4: Загрузка и запуск кода

  • Подключите Arduino к компьютеру с помощью USB-кабеля.
  • Откройте Arduino IDE и убедитесь, что выбран правильный тип платы и порта в меню "Инструменты" (Tools).

Откройте Arduino IDE и убедитесь, что выбран правильный тип платы и порта в меню "Инструменты" (Tools).

  • Скопируйте код выше в окно Arduino IDE.
  • Нажмите кнопку "Загрузить" (Upload) для загрузки кода на Arduino.

Нажмите кнопку "Загрузить" (Upload) для загрузки кода на Arduino.

  • Откройте монитор порта (Serial Monitor) в Arduino IDE, чтобы просмотреть результаты сканирования.

Откройте монитор порта (Serial Monitor) в Arduino IDE, чтобы просмотреть результаты сканирования.

После загрузки кода, Arduino будет сканировать шину I2C и отображать найденные устройства в мониторе порта. Если устройства обнаружены, их адреса будут выводиться на мониторе порта.

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

Этот урок позволяет определить, какие устройства подключены к шине I2C и узнать их адреса. Это полезно для последующей работы с устройствами на шине I2C.

Чтобы изменить пины шины I2C в Arduino, вам нужно использовать библиотеку Wire и определить, какие пины вы будете использовать для SDA и SCL. В стандартной конфигурации для большинства плат Arduino, таких как Arduino Uno, Mega и Nano, используются следующие пины:

  • SDA: A4 (для Uno и Nano), 20 (для Mega)
  • SCL: A5 (для Uno и Nano), 21 (для Mega)

Однако, если вы используете плату, поддерживающую изменение пинов I2C, например, ESP32, вы можете указать свои собственные пины.

Вот пример кода для Arduino, который демонстрирует, как использовать нестандартные пины I2C:

#include <Wire.h>

// Определите пины SDA и SCL
#define SDA_PIN 33  // Замените на ваш пин SDA
#define SCL_PIN 32  // Замените на ваш пин SCL

void setup() {
  // Инициализация I2C с пользовательскими пинами
  Wire.begin(SDA_PIN, SCL_PIN); 

  Serial.begin(9600);
  Serial.println("I2C Initialized with custom pins.");
}

void loop() {
  byte error, address;
  int devices = 0;

  Serial.println("Scanning...");

  for (address = 1; address < 127; address++) {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0) {
      Serial.print("Device found at address 0x");
      if (address < 16) {
        Serial.print("0");
      }
      Serial.print(address, HEX);
      Serial.println();
      devices++;
    } else if (error == 4) {
      Serial.print("Unknown error at address 0x");
      if (address < 16) {
        Serial.print("0");
      }
      Serial.print(address, HEX);
      Serial.println();
    }
  }

  if (devices == 0) {
    Serial.println("No I2C devices found");
  } else {
    Serial.println("Scan complete");
  }

  delay(5000);  // Пауза в 5 секунд между сканированиями
}

Объяснение:

  1. Подключение библиотеки: Подключаем библиотеку Wire для работы с I2C.
  2. Определение пинов: Указываем пины SDA и SCL, которые вы хотите использовать.
  3. Инициализация I2C: В функции setup() инициализируем I2C с использованием заданных пинов.
  4. Основной цикл: В loop() вы можете добавить ваш код для работы с I2C.

Примечание:

  • Убедитесь, что выбранные вами пины поддерживают функцию I2C для вашей конкретной платы.
  • Если вы используете стандартные пины, можно просто вызвать Wire.begin(); без параметров.


Удачи в вашем эксперименте с шиной I2C и Arduino!

Мы рады объявить о нашем присутствии на Boosty! Arduino-Tex приглашает всех наших друзей и последователей поддержать нас на этой замечательной платформе. Здесь вы найдете эксклюзивный контент, уникальные проекты и возможность стать частью нашей творческой команды. Присоединяйтесь к нам на Boosty и вместе мы сделаем мир Arduino еще удивительнее!

Понравился урок. Сканирование устройств на шине I2C с помощью Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

Фотографии к статье

Файлы для скачивания

Скетч сканирование устройств на шине I2C Скетч сканирование устройств на шине I2C .ino1 Kb 528 Скачать

Комментарии

Ваше Имя*


Разработка проектов