Lekce 5

Skener sběrnice I²C

Pátá lekce Arduino kurzu pro začátečníky: naučíte se naskenovat sběrnici I²C a zjistit adresu připojeného zařízení. Ukážeme si zapojení, kód do Arduino IDE i to, jak Arduino vypíše nalezené I²C adresy do sériového monitoru – hodí se vždy, když neznáte přesnou adresu svého displeje nebo čidla.

🧩Co budeš potřebovat
Arduino USB kabel I²C zařízení (LCD displej nebo RTC modul) Propojovací vodiče
🔌Zapojení
Schéma zapojení Arduino – I2C skener, LCD 1602 připojený přes SDA na A4 a SCL na A5

Popisek obrázku: I²C zařízení (zde LCD 1602) připojíte čtyřmi vodiči. GND na GND, VCC na 5 V, datový vodič SDA na pin A4 a hodinový SCL na pin A5 (na Arduino Mega jsou to piny 20 a 21).

🔗Připojení pinů
I²C zařízeníArduino UnoArduino Mega
GNDGNDGND
VCC5V5V
SDAA420
SCLA521
💡Jak to funguje

Každé zařízení na sběrnici I²C má svou jedinečnou adresu, přes kterou s ním Arduino komunikuje – posílá příkazy a přijímá data. Skener postupně zkouší oslovit všechny možné adresy (1 až 126) a sleduje, která adresa odpoví. Nalezená zařízení pak vypíše jako hexadecimální číslo do sériového monitoru. Tuto 7bitovou adresu pak použijete třeba ve funkci Wire.begin. Zařízení můžete připojovat i odpojovat za chodu – skener se opakuje každých pár vteřin.

Postup
  1. Propojte I²C zařízení s Arduinem podle tabulky výše – SDA na A4 a SCL na A5.
  2. Zkopírujte kód do Arduino IDE a nahrajte ho do Arduina.
  3. Otevřete sériový monitor (rychlost 9600 Bd) a přečtěte si vypsanou adresu.
</>Kód
lekce05_i2c_skener.ino
// Skener sběrnice I2C
// Email: podpora@laskakit.cz · Web: laskakit.cz

// připoj knihovnu
#include <Wire.h>

void setup() {
  Wire.begin();
  Serial.begin(9600);
  while (!Serial);                // Leonardo: počkat na sériový monitor
  Serial.println("\nI2C Skener");
}

void loop() {
  byte error, address;
  int nDevices;

  Serial.println("Skenování...");

  nDevices = 0;
  for (address = 1; address < 127; address++) {
    // vrácená hodnota Wire.endTransmission()
    // říká, zda zařízení potvrdilo adresu
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0) {
      Serial.print("I2C zařízení nalezeno na adrese 0x");
      if (address < 16) {
        Serial.print("0");
      }
      Serial.print(address, HEX);
      Serial.println("  !");
      nDevices++;
    } else if (error == 4) {
      Serial.print("Neznámá chyba na adrese 0x");
      if (address < 16) {
        Serial.print("0");
      }
      Serial.println(address, HEX);
    }
  }
  if (nDevices == 0) {
    Serial.println("Žádné I2C zařízení nenalezeno\n");
  } else {
    Serial.println("Hotovo\n");
  }

  delay(5000);                     // počkat 5 vteřin
}
Výsledek
💡
V sériovém monitoru uvidíte hlášku Skenování... a pod ní adresu nalezeného zařízení, například I2C zařízení nalezeno na adrese 0x27. Sken se každých pět vteřin opakuje, takže můžete zařízení odpojit a připojit a sledovat, jak se výpis mění. Teď znáte adresu, kterou použijete v dalších lekcích.
Časté chyby
?Kontrolní otázka

QK čemu slouží I²C skener?