Skip to content

Cara Cek Alamat I2C dengan I2C Scanner Saat Modul Bentrok

Pasang dua modul I2C di jalur SDA/SCL yang sama, tapi yang kebaca cuma satu, atau datanya ngaco? Kemungkinan besar modulnya sehat, yang bentrok alamat I2C-nya. Cara paling cepat untuk memastikan adalah menjalankan sketch I2C scanner, lalu membaca alamat yang muncul di Serial Monitor. Di artikel ini kamu akan tahu cara scan, cara membaca hasilnya, dan tiga jalan keluar kalau alamatnya ternyata kembar.

Kenapa dua modul I2C bisa bentrok

I2C adalah bus yang dipakai bareng-bareng. Semua modul menempel di dua kabel yang sama: SDA (data) dan SCL (clock). Biar nggak tertukar, setiap modul punya alamat, misalnya 0x68 atau 0x3C. Arduino atau ESP32 memanggil modul lewat alamat itu, mirip guru yang absen pakai nomor di kelas.

Masalah muncul kalau dua modul punya alamat yang sama. Saat mikrokontroler memanggil 0x68, dua-duanya menjawab bersamaan. Hasilnya data tabrakan: angka ngaco, pembacaan loncat-loncat, atau modul sama sekali nggak terdeteksi.

Contoh yang paling sering kejadian:

  • MPU-6050 + MPU-6050: sama-sama 0x68 (kalau pin AD0 keduanya dibiarkan LOW).
  • MPU-6050 + RTC DS3231: keduanya ternyata memakai 0x68.

Fungsinya beda, tapi alamat bawaan pabriknya kembar. Berikut alamat umum beberapa modul yang sering dipakai (bisa sedikit beda tergantung varian modul):

Modul Alamat umum
MPU-6050 0x68 (AD0 ke GND) atau 0x69 (AD0 ke VCC)
RTC DS3231 0x68
OLED SSD1306 0x3C (kadang 0x3D)
LCD 16×2 dengan modul I2C 0x27 atau 0x3F
BMP280 0x76 atau 0x77
Multiplexer TCA9548A 0x70 sampai 0x77

Langkah 1: Jalankan I2C scanner

Sketch scanner bekerja sederhana. Library Wire mengecek alamat 1 sampai 126 satu per satu dengan Wire.beginTransmission() lalu Wire.endTransmission(). Kalau hasilnya 0, artinya ada modul yang menjawab di alamat itu.

Sketch ini jalan di Arduino Uno/Nano maupun ESP32:

#include <Wire.h>

void setup() {
  Serial.begin(115200);
  Wire.begin();
  delay(1000);
  Serial.println("I2C scanner mulai...");
}

void loop() {
  byte jumlah = 0;

  for (byte alamat = 1; alamat < 127; alamat++) {
    Wire.beginTransmission(alamat);
    byte hasil = Wire.endTransmission();

    if (hasil == 0) {
      Serial.print("Ketemu modul di alamat 0x");
      if (alamat < 16) Serial.print("0");
      Serial.println(alamat, HEX);
      jumlah++;
    }
  }

  if (jumlah == 0) {
    Serial.println("Tidak ada modul I2C terdeteksi");
  }
  Serial.println("---");
  delay(3000);
}

Upload, buka Serial Monitor, dan atur baud rate ke 115200. Setiap 3 detik scanner akan mengulang pengecekan.

Langkah 2: Baca hasil di Serial Monitor

Ada dua kemungkinan hasil yang perlu kamu kenali:

  1. Dua modul terpasang, muncul dua alamat berbeda. Aman, nggak ada bentrok.
  2. Dua modul terpasang, tapi cuma muncul satu alamat. Alamatnya kembar.

Tips supaya yakin: colok modul satu per satu. Pasang modul pertama, catat alamatnya. Cabut, pasang modul kedua, catat lagi. Kalau kedua catatanmu sama, ketemu penyebabnya.

Kalau scanner bilang tidak ada modul sama sekali, bukan soal alamat. Periksa dulu kabel SDA dan SCL (jangan tertukar), sambungan GND, dan tegangan modul. ESP32 bekerja dengan logika 3,3 V, jadi pastikan modulmu cocok dengan level tegangan itu.

Alamat kembar? Ada 3 jalan keluar

Urutannya dari yang paling simpel:

1. Ganti alamat lewat pin atau jumper

Beberapa modul menyediakan pin atau solder jumper untuk menggeser alamat. Di MPU-6050, pin AD0 ke GND menghasilkan 0x68, sedangkan AD0 ke VCC menghasilkan 0x69. Jadi dua MPU-6050 bisa hidup berdampingan: satu AD0-nya ke GND, satu lagi ke VCC.

Trik ini juga menyelesaikan bentrok MPU-6050 dengan DS3231. Geser MPU-6050 ke 0x69, DS3231 tetap di 0x68. Jangan lupa ubah alamat di kodemu supaya library memanggil alamat yang baru.

2. Pakai multiplexer TCA9548A

Kalau modulnya nggak punya pilihan alamat, TCA9548A memberi tiap modul jalur (channel) sendiri. Kamu memilih channel yang aktif secara bergantian, jadi modul kembar nggak pernah “bicara” bersamaan. TCA9548A sendiri punya alamat default 0x70.

Memilih channel dilakukan dengan menulis satu byte ke multiplexer:

void pilihChannel(byte channel) {
  Wire.beginTransmission(0x70);
  Wire.write(1 << channel);
  Wire.endTransmission();
}

Panggil pilihChannel(0) sebelum membaca modul pertama, lalu pilihChannel(1) sebelum membaca modul kedua.

3. Bus I2C kedua di ESP32

ESP32 punya dua controller I2C. Kamu bisa memisahkan modul ke dua pasang pin yang berbeda:

#include <Wire.h>

void setup() {
  Wire.begin(21, 22);   // bus 1: SDA 21, SCL 22
  Wire1.begin(25, 26);  // bus 2: SDA 25, SCL 26
}

void loop() {}

Dua modul beralamat sama tinggal ditaruh di bus yang berbeda. Perlu diingat, library sensor yang kamu pakai harus bisa menerima objek Wire1 (banyak library mendukungnya lewat parameter saat inisialisasi).

Urutan yang disarankan: coba pin alamat dulu, baru multiplexer atau bus kedua kalau modulnya memang nggak bisa diganti alamatnya.

Kesalahan yang sering terjadi

  • Langsung menyalahkan modul. Scan dulu sebelum beli pengganti.
  • Mengubah pin AD0 tapi lupa mengubah alamat di kode, jadi modul tetap dipanggil ke alamat lama.
  • Mengira semua modul sejenis punya alamat sama. Varian dari pabrik berbeda kadang beda alamat, misalnya LCD I2C yang bisa di 0x27 atau 0x3F. Karena itu scanner lebih bisa dipercaya daripada tebakan dari tutorial.
  • Menancapkan banyak modul sekaligus lalu bingung membaca hasil scan. Colok satu per satu.
  • Kabel SDA/SCL terlalu panjang atau sambungan breadboard longgar, sehingga scan kadang menemukan modul, kadang tidak.

Komponen yang dibutuhkan

Untuk latihan scan alamat, kamu cukup butuh board Arduino atau ESP32, kabel jumper, dan minimal satu modul I2C. Kalau kamu punya proyek tampilan, Modul I2C LCD 16×2 Interface Serial Converter Adapter 2.54mm adalah contoh modul I2C yang alamatnya sering perlu dicek dulu dengan scanner, karena varian yang beredar bisa memakai alamat yang berbeda.

Kesimpulan

Kalau dua modul I2C bikin data kacau, jangan buru-buru menyimpulkan modulnya rusak. Jalankan I2C scanner, baca alamat yang muncul, dan bandingkan. Kalau kembar, geser alamat lewat pin, gunakan multiplexer TCA9548A, atau pisahkan ke bus I2C kedua di ESP32. Simpan sketch scanner-nya, karena ini salah satu alat debugging paling sering kepakai. Modul nggak kebaca? Scan dulu, belanja belakangan. 💡

Pertanyaan yang Sering Diajukan

Kenapa I2C scanner tidak menemukan modul apa pun?

Biasanya masalahnya di wiring, bukan alamat. Cek SDA dan SCL tidak tertukar, GND tersambung, tegangan modul sesuai, dan sambungan di breadboard tidak longgar.

Apakah dua modul I2C dengan alamat sama bisa dipakai tanpa tambahan komponen?

Tidak bisa di satu bus yang sama, karena keduanya akan menjawab bersamaan. Solusinya geser alamat lewat pin atau jumper, pakai multiplexer TCA9548A, atau pisahkan ke bus I2C kedua di ESP32.

Alamat MPU-6050 itu 0x68 atau 0x69?

Keduanya bisa. Kalau pin AD0 ke GND alamatnya 0x68, kalau AD0 ke VCC alamatnya 0x69.

Berapa bus I2C yang dimiliki ESP32?

ESP32 punya dua controller I2C. Di Arduino core, kamu bisa memakai Wire dan Wire1 dengan pin SDA dan SCL yang berbeda.

Komponen di Ichibot Store

Cek harga dan stok terbaru langsung di halaman produknya. Butuh bantuan milih komponen? Tanya kami lewat chat di toko.