Panduan Lengkap & “Cheatsheet” Alamat I2C (Address) untuk ESP32 dan Arduino

I2C Address

Bagi Anda yang baru mulai belajar IoT dengan ESP32 atau Arduino, Anda pasti pernah melihat kode seperti 0x3C, 0x27, atau 0x68 saat menghubungkan sensor. Seringkali, proyek gagal hanya karena salah memasukkan angka-angka misterius ini.

Sebenarnya, apa itu Address I2C dan mengapa setiap sensor memilikinya? Artikel ini akan mengupas tuntas konsep tersebut dan memberikan daftar lengkap (Cheatsheet) alamat perangkat yang paling sering digunakan.

Apa itu I2C Address? (Penjelasan Sederhana)

Bayangkan protokol komunikasi I2C sebagai sebuah Bus Sekolah.

  • ESP32 adalah Supir Bus (Master).
  • Sensor & Layar adalah Penumpang (Slave).

Hebatnya I2C, semua penumpang ini duduk di jalur kabel yang sama (hanya dua kabel: SDA dan SCL). Agar Pak Supir (ESP32) bisa berbicara ke penumpang tertentu tanpa yang lain ikut menyahut, setiap penumpang wajib memiliki Nomor Kursi yang unik.

Nah, Nomor Kursi itulah yang disebut I2C Address.

Mengapa ditulis 0x?

Format seperti 0x3C adalah penulisan bilangan Hexadesimal (bilangan basis 16).

  • 0x hanyalah kode bagi komputer yang berarti: “Hei, angka di belakang ini adalah Hexadesimal.”
  • Meskipun Anda bisa menulisnya dalam bentuk desimal, standar internasional dalam pemrograman hardware selalu menggunakan format 0x ini.

Daftar Lengkap Alamat I2C (Cheatsheet)

Berikut adalah daftar perangkat yang paling populer di kalangan maker, dikelompokkan berdasarkan fungsinya. Simpan tabel ini agar Anda tidak perlu bolak-balik mencari datasheet.

1. Display (Layar Tampilan)

Ini adalah komponen yang paling sering membuat bingung karena satu jenis barang bisa memiliki alamat berbeda tergantung pabriknya.

PerangkatFungsiAlamat DefaultAlamat AlternatifCatatan Penting
OLED SSD1306Layar Grafis (0.96″)0x3C0x3DPaling umum digunakan. Alamat bisa diubah dengan memindah solderan (resistor) di belakang PCB.
OLED SH1106Layar Grafis (1.3″)0x3C0x3DSering tertukar dengan SSD1306. Jika gambar di layar glitch (berantakan) tapi alamat sudah benar, coba ganti driver library ke SH1106.
LCD 16×2 / 20×4Layar Teks0x270x3FMenggunakan modul backpack di belakang layar. Chip buatan NXP biasanya 0x27, chip buatan TI biasanya 0x3F.

2. Sensor Lingkungan (Suhu, Cuaca, Cahaya)

Kelompok sensor ini sering digunakan untuk proyek Stasiun Cuaca atau Smart Garden.

PerangkatFungsiAlamat DefaultAlamat AlternatifCatatan Penting
BME280 / BMP280Suhu, Tekanan, Lembab0x760x77Hati-hati! Modul murah (warna ungu) biasanya 0x76. Modul mahal (Adafruit) biasanya 0x77.
BH1750Sensor Cahaya (Lux)0x230x5CSensor cahaya paling presisi dan mudah digunakan.
AHT10 / AHT20Suhu & Lembab0x38Alternatif murah untuk DHT11/DHT22, tapi menggunakan I2C.
SHT31 / SHT30Suhu & Lembab Pro0x440x45Sensor kelas industri dengan akurasi tinggi.
MLX90614Suhu Non-Kontak0x5ASensor suhu inframerah (thermometer tembak).

3. Motion & Time (Gerak & Waktu)

Perhatian: Ini adalah zona rawan konflik! Banyak modul di kategori ini menggunakan alamat yang sama (0x68).

PerangkatFungsiAlamat DefaultAlamat AlternatifCatatan Penting
DS3231 / DS1307Jam Real Time (RTC)0x68Alamat ini fixed (tidak bisa diubah). Modul ini juga punya chip memori di alamat 0x57.
MPU6050Gyro & Accelerometer0x680x69Sering bentrok dengan RTC! Jika Anda memakai RTC dan MPU6050 bersamaan, ubah alamat MPU ke 0x69 (biasanya dengan menyambung pin AD0 ke VCC).
HMC5883LKompas Digital0x1E0x0DHati-hati barang tiruan (QMC5883L) biasanya memiliki alamat 0x0D, bukan 0x1E.

4. Ekspander & Driver (Kontrol Tambahan)

PerangkatFungsiAlamat DefaultAlamat AlternatifCatatan Penting
PCA9685Servo Driver (16 Ch)0x400x40 – 0x7FBisa digabung (chain) banyak modul sekaligus. Alamat diatur via solder pad A0-A5.
ADS1115ADC 16-bit0x480x49 – 0x4BWajib punya jika butuh membaca sensor analog dengan presisi tinggi di ESP32.
PCF8574I/O Expander0x200x20 – 0x27Untuk menambah jumlah pin digital (GPIO).

Solusi: Bagaimana Jika Alamat Sama? (Conflict)

Apa yang terjadi jika Anda ingin memasang dua sensor yang alamatnya sama persis (misalnya dua layar OLED 0x3C) di satu ESP32? Terjadi Tabrakan Data.

Ada 3 Solusi:

  1. Gunakan Pin ADDR/A0:Cek fisik sensor Anda. Jika ada pin atau pad solder bernama ADDR, A0, atau CS:
    • Sambung ke GND = Alamat Default.
    • Sambung ke VCC (3.3V) = Alamat Alternatif (biasanya +1).
  2. Gunakan 2 Bus I2C (Khusus ESP32):ESP32 memiliki kelebihan dibanding Arduino Uno, yaitu punya dua jalur I2C hardware. Anda bisa memisahkan sensor A di pin 21/22 dan sensor B di pin 16/17.
  3. Gunakan I2C Multiplexer (TCA9548A):Ini adalah alat tambahan yang berfungsi seperti “Saklar Rel Kereta”. Alat ini membagi satu jalur I2C menjadi 8 cabang terpisah.

Cara Paling Ampuh: Gunakan I2C Scanner

Jangan menebak-nebak! Sebelum menulis kode program utama, wajib hukumnya menjalankan program I2C Scanner untuk melihat alamat asli yang dideteksi oleh ESP32.

Salin kode ini ke Arduino IDE Anda dan upload ke ESP32:

#include <Wire.h>

void setup() {
  Wire.begin();
  Serial.begin(115200);
  Serial.println("\nI2C Scanner dimulai...");
}

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

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

    if (error == 0) {
      Serial.print("Ditemukan perangkat di alamat: 0x");
      if (address < 16) Serial.print("0");
      Serial.println(address, HEX); // <-- Ini alamat yang Anda cari!
      nDevices++;
    }
  }
  
  if (nDevices == 0) Serial.println("Tidak ada perangkat I2C ditemukan.");
  else Serial.println("Selesai.\n");
  
  delay(5000);
}

Buka Serial Monitor (set baud rate 115200), dan Anda akan melihat alamat yang benar. Selamat mencoba!