Шина I2C (Inter-Integrated Circuit) - это протокол связи, который позволяет микроконтроллеру взаимодействовать с различными устройствами, подключенными к одной шине. Шина I2C является одной из наиболее распространенных и удобных способов подключения датчиков, дисплеев и других периферийных устройств к Arduino и другим МК.
Устройства на шине I2C имеют уникальные адреса, которые используются для их идентификации и взаимодействия с ними. Важно отметить, что некоторые устройства имеют возможность изменять свои адреса, обычно с помощью перманентных перемычек или специальных команд. Это особенно важно учитывать, когда на шине I2C подключено несколько устройств одного типа.
Цель этого урока - научиться сканировать устройства, подключенные к шине I2C, и определять их адреса с помощью Arduino.
Знание адресов подключенных устройств на шине I2C крайне важно для успешного взаимодействия с ними. Каждое устройство на шине I2C имеет уникальный адрес, который необходимо знать, чтобы отправлять и получать данные от него. Пример сканировании шины I2C с использованием Arduino из данного урока, поможет определить адреса подключенных устройств и использовать их в дальнейшей работе.
Теперь, когда мы понимаем, что мы будем делать и почему это важно, давайте перейдем к написанию кода и выполнению урока!
Перед тем, как начать, вам понадобятся следующие компоненты:

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

В большинстве случаев, библиотека Wire уже поставляется вместе с платами Arduino AVR и должна быть доступна без необходимости дополнительной установки.
Вы можете убедиться, что у вас установлена последняя версия плат Arduino AVR, следуя этим шагам:
Пожалуйста, обратите внимание, что указанные инструкции предназначены для Arduino IDE и плат Arduino AVR. Если вы используете другую IDE или другие платы Arduino, процесс установки и наличие библиотек могут незначительно отличаться.
Теперь давайте напишем программу, которая будет сканировать устройства на шине 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 секунд между сканированиями
}



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

Этот урок позволяет определить, какие устройства подключены к шине I2C и узнать их адреса. Это полезно для последующей работы с устройствами на шине I2C.
Чтобы изменить пины шины I2C в Arduino, вам нужно использовать библиотеку Wire и определить, какие пины вы будете использовать для SDA и SCL. В стандартной конфигурации для большинства плат Arduino, таких как Arduino Uno, Mega и Nano, используются следующие пины:
Однако, если вы используете плату, поддерживающую изменение пинов 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 секунд между сканированиями
}setup() инициализируем I2C с использованием заданных пинов.loop() вы можете добавить ваш код для работы с I2C.Wire.begin(); без параметров.Удачи в вашем эксперименте с шиной I2C и Arduino!
Мы рады объявить о нашем присутствии на Boosty! Arduino-Tex приглашает всех наших друзей и последователей поддержать нас на этой замечательной платформе. Здесь вы найдете эксклюзивный контент, уникальные проекты и возможность стать частью нашей творческой команды. Присоединяйтесь к нам на Boosty и вместе мы сделаем мир Arduino еще удивительнее!
Понравился урок. Сканирование устройств на шине I2C с помощью Arduino? Не забудь поделиться с друзьями в соц. сетях.
А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.
Спасибо за внимание!
Технологии начинаются с простого!
Фотографии к статье
Файлы для скачивания
| Скетч сканирование устройств на шине I2C .ino | 1 Kb | 617 | Скачать |
Читайте также
Мы в соц сетях
Комментарии