Raspberry Pi Pico: I2C сканер (Arduino IDE) — поиск адреса I2C устройств
Это краткое руководство, которое показывает, как найти адрес I2C устройств с помощью Raspberry Pi Pico, запрограммированного в Arduino IDE.
Уже знакомы с 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 устройств. Вам достаточно подключить I2C периферийное устройство к Raspberry Pi Pico и загрузить предоставленный скетч I2C сканера.
Мы надеемся, что это руководство было для вас полезным.
Узнайте больше о Raspberry Pi Pico из наших материалов: