Каталог
I2C-сканер на Arduino

I2C-сканер на Arduino

В этой статье я расскажу, как с помощью Arduino сделать I2C-сканер, используя LCD1602 дисплей с интерфейсом I2C.

Немного теории

I2C — это протокол, позволяющий различным устройствам взаимодействовать по одной шине данных (SDA и SCL). Каждому устройству присваивается уникальный адрес (максимум 127 устройств). Изменить адрес устройства нельзя, но некоторые производители позволяют менять адрес в небольшом диапазоне, что позволяет подключать несколько одинаковых устройств к одной шине.

Зачем нужен I2C-сканер?

Иногда документация на устройство недоступна или адрес микросхемы отличается от указанного в документации. В таких случаях I2C-сканер помогает определить адрес устройства.

Оборудование

Для примера используем Arduino UNO и LCD модуль I2C. Интерфейс I2C на Arduino UNO работает на выводах A4 и A5.

Схема подключения

Для подключения LCD1602 дисплея к Arduino используйте следующую схему:

  • VCC подключите к 5V на Arduino.
  • GND подключите к GND на Arduino.
  • SDA подключите к A4 на Arduino.
  • SCL подключите к A5 на Arduino.

Пример кода

Откройте Arduino IDE, скопируйте и загрузите следующий скетч:

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

Проверка

Откройте «Монитор порта», установите скорость 9600. Если все подключено правильно, программа покажет адрес устройства. В моем случае, это LCD с адресом 0x27.

Заключение

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

 
Комментарии
Отзывов еще никто не оставлял
Товары упомянутые в статье
В наличии
Предзаказ
арт. 365
Символьный дисплей LCD1602 с синей подсветкой – жидкокристаллический дисплей (Liquid...
1 490 тг
Предзаказ
Предзаказ успешно отправлен!
Имя *
Телефон *
Добавить в корзину
Название товара
100 тг
1 шт.
Перейти в корзину
Обратный звонок
Запрос успешно отправлен!
Имя *
Телефон *
Заказ в один клик
С помощью уведомлений о заказе можно не только получать актуальную информацию по заказу, но и иметь быстрый канал связи с магазином