Назад

Pico I2C Сканер: Поиск устройств на шине

Введение

I2C (Inter-Integrated Circuit) — популярный протокол связи, позволяющий микроконтроллерам общаться с датчиками, дисплеями и другими периферийными устройствами всего по двум проводам: SDA (данные) и SCL (тактирование). Но при прототипировании вы часто не знаете точный адрес нового I2C-устройства. Вот тут и пригодится I2C сканер. Он опрашивает все возможные адреса на шине и сообщает, какие из них отвечают.

В этом руководстве мы создадим I2C сканер для Raspberry Pi Pico с помощью симулятора Velxio в браузере. Вы узнаете, как собрать простую схему с двумя индикаторными светодиодами, написать код сканирования на Arduino C++ и интерпретировать результаты. Никакого оборудования не нужно — только ваш браузер!

Схема pico-i2c-scanner на холсте симулятора Velxio

Сборка схемы

Наша схема минималистична, но поучительна. Мы используем два светодиода для визуальной обратной связи во время сканирования:

Оба светодиода имеют общее заземление, подключенное к контакту GND.1 на Pico. Сама шина I2C использует стандартные выводы: SDA = GP4 и SCL = GP5. Внешние подтягивающие резисторы не требуются, так как библиотека Wire включает внутренние подтяжки Pico.

Чтобы собрать эту схему в Velxio:

  1. Откройте выбор компонентов на панели инструментов холста. Модальное окно выбора компонентов Velxio с просмотром деталей по категориям
  2. Добавьте плату Raspberry Pi Pico.
  3. Добавьте два светодиода (синий и зеленый) из категории Output.
  4. Подключите их, как описано: GP12 → анод синего светодиода, GP10 → анод зеленого светодиода, оба катода → GND.
  5. Используйте панель инструментов холста для масштабирования и аккуратного расположения компонентов. Панель инструментов холста Velxio над окном симуляции

Разбор кода

Теперь давайте разберем код. Откройте редактор кода в Velxio и вставьте следующий скетч:

// Raspberry Pi Pico — I2C Scanner
// Scans I2C bus (Wire / I2C0: SDA=GP4, SCL=GP5) for devices

#include <Wire.h>

void setup() {
  Serial.begin(115200);
  delay(500);
  Wire.begin(); // SDA=GP4, SCL=GP5 by default on Pico
  Serial.println("=== Pico I2C Scanner ===");
  Serial.println("Default I2C0: SDA=GP4, SCL=GP5");
  Serial.println();
}

void loop() {
  Serial.println("Scanning I2C bus...");
  int found = 0;

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

    if (error == 0) {
      found++;
      Serial.print("  Device found at 0x");
      if (addr < 16) Serial.print("0");
      Serial.print(addr, HEX);

      // Identify known addresses
      switch (addr) {
        case 0x48: Serial.print(" (Temperature sensor)"); break;
        case 0x50: Serial.print(" (EEPROM)"); break;
        case 0x68: Serial.print(" (DS1307 RTC)"); break;
        case 0x27: Serial.print(" (LCD backpack)"); break;
        case 0x3C: Serial.print(" (SSD1306 OLED)"); break;
        default: break;
      }
      Serial.println();
    }
  }

  Serial.print("Scan complete. Found ");
  Serial.print(found);
  Serial.println(" device(s).");
  Serial.println();
  delay(5000);
}

Как это работает

Чтобы скомпилировать и запустить, нажмите кнопку compile на панели инструментов редактора. Панель инструментов редактора Velxio с элементами управления компиляцией и запуском

Ключевые концепции

Типичные ошибки и советы по отладке

Предлагаемые расширения

Попробуйте сами!

Готовы просканировать шину I2C? Откройте живой пример в Velxio и начинайте экспериментировать:

Запустить Pico I2C Scanner на Velxio

Никаких загрузок, никакой пайки — только чистая симуляция. Изменяйте код, добавляйте новые компоненты и мгновенно видите результаты. Удачного сканирования!


Поделиться:
David Montero

Автор

David Montero

Creator of Velxio, the open-source circuit and Arduino simulator.

GitHub velxio.dev

Похожие статьи


Предыдущая статья
Чтение виртуальных часов DS1307 RTC через I2C на Raspberry Pi Pico
Следующая статья
Управление светодиодом через последовательный порт на Pico: создаём первую командную консоль