I2C Scanner – jak znaleźć adres swojego czujnika?

I2C Scanner – jak znaleźć adres swojego czujnika?

Podłączyłeś czujnik I2C do Arduino, wgrałeś przykład z biblioteki i… nic nie działa? Brak odczytów, błąd komunikacji, puste dane? Nie martw się – bardzo możliwe, że problemem jest niewłaściwy adres I2C. Na szczęście istnieje prosty sposób, by to sprawdzić – za pomocą tzw. I2C Scannera.

❓ Dlaczego adres I2C jest tak ważny?

Każde urządzenie komunikujące się przez magistralę I2C ma przypisany adres, dzięki któremu mikrokontroler wie, z którym układem się komunikuje. Jeśli w programie wpiszemy błędny adres, urządzenie po prostu nie odpowie.

Czasem producent podaje adres w dokumentacji, ale w praktyce:

  • adres może być inny, jeśli urządzenie ma możliwość zmiany (np. zworką),
  • adres może być podany w innej notacji (dziesiętnej zamiast szesnastkowej lub odwrotnie),
  • urządzenie może nie być poprawnie podłączone.

Dlatego zawsze warto zacząć od sprawdzenia, czy urządzenie w ogóle odpowiada na magistrali I2C – i to właśnie umożliwia I2C Scanner.

🧰 Czym jest I2C Scanner?

To prosty program, który przeszukuje wszystkie możliwe adresy I2C (od 1 do 127) i wyświetla te, które odpowiadają. Dzięki temu od razu widzimy, czy urządzenie jest widoczne i jaki ma adres.

#include <Wire.h>

void setup() {
  Wire.begin();
  Serial.begin(115200);
  while (!Serial); // Czeka na otwarcie monitora portu szeregowego
  Serial.println("\nI2C Scanner startuje...");
}

void loop() {
  byte error, address;
  int liczbaUrządzeń = 0;

  Serial.println("Skanuję...");

  for (address = 1; address < 127; address++) {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0) {
      Serial.print("Znaleziono urządzenie I2C na adresie 0x");
      if (address < 16) Serial.print("0");
      Serial.print(address, HEX);
      Serial.println();
      liczbaUrządzeń++;
    }
  }

  if (liczbaUrządzeń == 0) {
    Serial.println("Nie znaleziono żadnych urządzeń I2C.");
  } else {
    Serial.println("Skanowanie zakończone.");
  }

  delay(5000); // Czekaj 5 sekund przed kolejnym skanowaniem
}

Po wgraniu programu otwórz Monitor portu szeregowego (prędkość 115200) – pojawi się lista wykrytych adresów.

⚠️ Co jeśli nic nie znajduje?

Jeśli skaner nie wykrywa żadnych urządzeń, sprawdź kilka rzeczy:

  • Czy SDA i SCL są dobrze podłączone?
  • Czy linie SDA/SCL nie są zamienione miejscami?
  • Czy urządzenie ma odpowiednie zasilanie (np. 3.3V vs 5V)?
  • Czy są rezystory podciągające do VCC (jeśli nie są wbudowane)?
  • Czy wybrałeś odpowiednie piny SDA/SCL dla Twojej płytki (np. na ESP32 są one konfigurowalne)?

👀 Przykład – BME280

Czujnik BME280 ma domyślny adres 0x76, ale niektóre wersje pozwalają na zmianę na 0x77. Jeśli nie jesteś pewien, jaki masz – użyj skanera. Dzięki temu unikniesz wpisywania złego adresu do kodu biblioteki, co często jest przyczyną „niewidzialnych” czujników.

🧪 Jak to wygląda „na kablach”? – analiza sygnału z użyciem analizatora logicznego

Dla bardziej dociekliwych – sprawdźmy, co dokładnie dzieje się na linii SDA/SCL podczas działania programu I2C Scanner. Do tego użyliśmy analizatora logicznego, który pozwala podejrzeć, co wysyła mikrokontroler na magistrali.

Poniżej znajduje się zrzut ekranu z takiej analizy:

🧾 Co dokładnie widzimy?

  • Program wysyła kolejne zapytania do urządzeń pod adresami 0x73 0x74, 0x75 i 0x76.
  • W trzech pierwszych przypadkach (0x73 0x74 i 0x75) otrzymujemy NAK – czyli brak odpowiedzi. To znaczy, że te adresy nie są zajęte przez żadne urządzenie.
  • Dopiero przy adresie 0x76 pojawia się odpowiedź ACK – co oznacza, że na tym adresie znajduje się fizycznie podłączone urządzenie i poprawnie odpowiada.

📌 Co to potwierdza?

  • Program I2C Scanner działa tak, jak powinien – próbuje po kolei wszystkie adresy od 1 do 127.
  • W tym przypadku jedynym „aktywnym” urządzeniem na magistrali jest układ pod adresem 0x76.
  • To idealne narzędzie, żeby sprawdzić, czy czujnik w ogóle odpowiada – zanim zaczniemy pisać do niego kod.

🔄 I2C Scanner na innych platformach

  • ESP32: działa dokładnie tak samo – ale upewnij się, które piny pełnią rolę SDA i SCL (np. 21 i 22).
  • Raspberry Pi: możesz użyć i2cdetect w terminalu (pakiet i2c-tools), np. komendą i2cdetect -y 1.

🛒 Sprawdź urządzenia I2C w naszym sklepie

Jeśli chcesz poćwiczyć korzystanie z I2C Scanner, polecamy kilka prostych modułów:

OLED 0.96″ – wyświetlacz z interfejsem I2C
BME280 – czujnik temperatury i ciśnienia I2C
DS3231 – precyzyjny zegar czasu rzeczywistego
PCF8574 – ekspander pinów GPIO przez I2C

📌 Podsumowanie

I2C Scanner to jedno z najważniejszych narzędzi w arsenale każdego, kto pracuje z elektroniką. Jest prosty, szybki i skuteczny. Dzięki niemu nie musisz zgadywać, czy czujnik działa – po prostu to sprawdzasz.

Zachęcamy, by zawsze zaczynać pracę z nowym urządzeniem I2C właśnie od uruchomienia skanera. Oszczędzisz mnóstwo czasu i nerwów.


📖 Wpis powiązany


Prezentowaną w artykule elektronikę znajdziesz oczywiście w naszym sklepie 👉 sklep.msalamon.pl 👈Zapraszamy również na nasze social media, gdzie na bieżąco informujemy o nowych produktach oraz o najciekawszych promocjach 😎👇


Podobne wpisy

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *