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 :