Cara Memprogram I2c Scanner Pada ESP32

Cara Memprogram I2c Scanner Pada ESP32

I2C Scanner adalah program sederhana yang dijalankan pada mikrokontroler (seperti ESP32 atau Arduino) untuk mendeteksi alamat I2C perangkat yang terhubung ke bus I2C.Berikut adalah code untuk memprogramnya:

#include <Arduino.h>

#include <Wire.h> 



void i2c_scanner()
{
byte error, address;
  int nDevices; 
  Serial.println("Memindai...");
  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
  
    if (error == 0)
    {
      Serial.print("I2C terbaca pada alamat 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");
  
      nDevices++;
    }
    else if (error==4)
    {
      Serial.print("Ada error yang tidak diketahui pada alamat 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("Tidak ada satupun alamat I2C yang ditemukan");
  else
    Serial.println("selesai");
  
  delay(5000);
}


void setup()
{
Serial.begin(9600);
  Wire.begin();

}
void loop(){
i2c_scanner();


}

Berikut ini adalah penjelasan dari kode di atas :

#include <Wire.h>

  • Mengimpor pustaka I2C bawaan Arduino/ESP32.
  • Digunakan untuk berkomunikasi dengan perangkat I2C.

void i2c_scanner()

  • Fungsi utama yang bertugas memindai seluruh alamat I2C (0x01 s/d 0x7F).
  • I2C hanya mendukung alamat 7-bit, yaitu 1 hingga 126 (0x01 – 0x7E).

for(address = 1; address < 127; address++)

  • Melakukan looping dari alamat 1 sampai 126, mencoba menghubungi setiap alamat.

Wire.beginTransmission(address);

  • Memulai komunikasi I2C ke alamat tertentu.

error = Wire.endTransmission();

  • Mengakhiri komunikasi dan mengembalikan hasil:
    • 0 → sukses (berarti ada perangkat di alamat itu)
    • 4 → kesalahan tak dikenal (perangkat mungkin rusak atau tidak responsif)

Jika error == 0:

cppCopyEditSerial.print("I2C terbaca pada alamat 0x");
  • Menampilkan alamat perangkat I2C yang berhasil dihubungi.

Jika error == 4:

cppCopyEditSerial.print("Ada error yang tidak diketahui pada alamat 0x");
  • Menampilkan peringatan jika ada error komunikasi pada alamat tertentu.

Setelah pemindaian:

cppCopyEditif (nDevices == 0)
  Serial.println("Tidak ada satupun alamat I2C yang ditemukan");
else
  Serial.println("selesai");
  • Memberi tahu hasil akhir: apakah ada perangkat I2C terdeteksi atau tidak.

delay(5000);

  • Menunggu 5 detik sebelum melakukan pemindaian ulang.

void setup()

cppCopyEditSerial.begin(9600);
Wire.begin();
  • Inisialisasi:
    • Serial Monitor (untuk melihat hasil)
    • I2C (menggunakan pin default: SDA = GPIO21, SCL = GPIO22 pada ESP32)

void loop()

cppCopyEditi2c_scanner();
  • Memanggil fungsi pemindaian berulang setiap 5 detik.

Kesimpulan:

Kode ini berfungsi untuk:

  • Mendeteksi perangkat I2C yang terhubung ke ESP32 atau Arduino.
  • Menampilkan alamat I2C dari perangkat yang aktif.
  • Membantu debugging saat kamu tidak tahu alamat modul seperti OLED, RTC, sensor suhu, dll.

untuk diskusi bisa kontak dibawah ini :

Sosial media :

Apa itu ESP32?