Toto je rychlý průvodce, který ukazuje, jak najít adresu I2C zařízení s Raspberry Pi Pico naprogramovaným pomocí PlatformIO.
Raspberry Pi Pico – výchozí I2C piny
V Raspberry Pi Pico jsou k dispozici dvě periferie I2C, pojmenované I2C1 a I2C0. Můžete používat dvě různé sběrnice (I2C1 a I2C2) současně, ale nemůžete používat dvě I2C1 nebo dvě I2C2 současně. Komunikaci I2C můžete použít na kterémkoli z dostupných pinů I2C.
Následující tabulka ukazuje všechny piny, které můžete použít pro I2C komunikaci.
Ovladač 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 Scanner Sketch – Arduino IDE
Pokud chcete najít I2C adresu konkrétního senzoru, displeje nebo jakékoli jiné I2C periferie, připojte ji k pinům Raspberry Pi Pico I2C a poté spusťte dodanou skicu I2C skeneru.
Zkopírujte následující kód do PlatformIO a nahrajte jej do Raspberry Pi Pico.
#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);
}
Po nahrání kódu se ujistěte, že máte periferní I2C správně připojenou k desce na správných I2C pinech (SCL=GPIO5; SDA=GPIO4).
Pokud používáte různé piny, ujistěte se, že jste to v kódu upravili. Nahradit:
Wire.begin();
S následujícím řádkem, ve kterém I2C_SDA odpovídá číslu GPIO, které používáte jako SDA, a I2C_SCL číslu GPIO, které používáte jako SCL.
Wire.begin(I2C_SDA, I2C_SCL);