Raspberry Pi Pico: I2C Scanner

09.03.2024 Raspberry Pi #pico #raspberry #i2c

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);