Raspberry Pi Pico: I2C сканер (Arduino IDE) — поиск адреса I2C устройств

Это краткое руководство, которое показывает, как найти адрес I2C устройств с помощью Raspberry Pi Pico, запрограммированного в Arduino IDE.

Raspberry Pi Pico I2C сканер Arduino IDE — поиск адреса I2C устройств

Уже знакомы с Raspberry Pi Pico? Перейдите к скетчу I2C сканера.

Предварительные требования

В этом руководстве используется Raspberry Pi Pico, программируемый с помощью Arduino IDE. Вам необходимо установить платы Raspberry Pi Pico в Arduino IDE и знать, как загружать код на плату. Ознакомьтесь со следующим руководством, если вы ещё этого не сделали:

Raspberry Pi Pico — I2C пины по умолчанию

В Raspberry Pi Pico доступны два периферийных устройства I2C, которые называются I2C1 и I2C0. Вы можете использовать две разные шины (I2C1 и I2C2) одновременно, но не можете использовать два I2C1 или два I2C2 одновременно. Вы можете использовать связь I2C на любом из доступных I2C пинов.

I2C пины по умолчанию — GPIO 4 (SDA) и GPIO 5 (SCL) — ознакомьтесь с распиновкой Raspberry Pi Pico.

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

I2C контроллер

SDA GPIO

SCL GPIO

I2C0

GPIO0, GPIO4, GPIO8, GPIO12, GPIO16, GPIO20

GPIO1, GPIO5, GPIO9, GPIO13, GPIO17, GPIO21

I2C1

GPIO2, GPIO6, GPIO10, GPIO14, GPIO18, GPIO26

GPIO3, GPIO7, GPIO11, GPIO15, GPIO19, GPIO27

I2C сканер — скетч для Arduino IDE

Если вы хотите узнать I2C адрес конкретного датчика, дисплея или любого другого I2C периферийного устройства, подключите его к I2C пинам Raspberry Pi Pico, а затем запустите предоставленный скетч I2C сканера.

Скопируйте следующий код в Arduino IDE и загрузите его на Raspberry Pi Pico.

/*********
  Rui Santos
  Complete project details at https://RandomNerdTutorials.com/raspberry-pi-pico-i2c-scanner-arduino/

  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*********/

#include <Wire.h>

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

void loop() {
  byte error, address;
  int nDevices;
  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.println(address,HEX);
      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);
}

Просмотреть исходный код на GitHub

После загрузки кода убедитесь, что ваше I2C периферийное устройство правильно подключено к плате на соответствующих I2C пинах (SCL=GPIO5; SDA=GPIO4).

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

Wire.begin();

На следующую строку, в которой I2C_SDA соответствует номеру GPIO, который вы используете как SDA, а I2C_SCL — номеру GPIO, который вы используете как SCL.

Wire.begin(I2C_SDA, I2C_SCL);

Откройте монитор порта (Serial Monitor) с скоростью передачи данных 115200 бод.

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

I2C сканер Raspberry Pi Pico — результат в мониторе порта Arduino IDE

Заключение

В этом руководстве вы узнали, как быстро найти адрес I2C устройств. Вам достаточно подключить I2C периферийное устройство к Raspberry Pi Pico и загрузить предоставленный скетч I2C сканера.

Мы надеемся, что это руководство было для вас полезным.

Узнайте больше о Raspberry Pi Pico из наших материалов: