Langsung ke isi
Stasiun 3 · MikrokontrolerI2C: sensor digital

Materi 11 dari 12 · Stasiun 3

I2C: sensor digital

20 menit6 kartuDraf AI · belum direview

Setelah materi ini, kamu bisa:

  • Bisa menjelaskan I2C sebagai jalur bersama (bus) dua kabel (SDA dan SCL) yang dipakai bersama banyak perangkat.
  • Bisa menjelaskan peran alamat dan kenapa dua perangkat tidak boleh beralamat sama.
  • Bisa menyambung sensor I2C ke ESP32 dan memeriksanya dengan program pemindai alamat.

Sensor yang mengirim angka jadi

Termistor butuh pembagi tegangan, ADC, rumus, dan kalibrasi (lihat ADC: membaca sensor analog). Sensor digital seperti BME280 atau SHT31 melakukan semua itu di dalam dirinya, lalu mengirim angka suhu matang.

Banyak sensor digital memakai jalur komunikasi bernama I2C. Dengan dua kabel saja, kamu bisa menyambung beberapa sensor dan layar sekaligus.

Bagian-bagian I2C

Ketuk satu per satu.

SDA
Serial Data. Kabel tempat data dikirim bergantian ke dua arah. Di ESP32 klasik, bawaannya GPIO 21.
SCL
Serial Clock. Detak penanda waktu, diberikan oleh pengendali (ESP32). Bawaannya GPIO 22.
Alamat
Setiap perangkat punya alamat 7 bit, misalnya 0x76 untuk BME280 atau 0x3C untuk layar OLED. Awalan 0x berarti angkanya ditulis dalam bilangan heksadesimal (basis 16). ESP32 memanggil perangkat dengan alamatnya.
Resistor pull-up
SDA dan SCL butuh pull-up ke 3,3 V (lihat Input digital: tombol dan pull-up). Modul sensor biasanya sudah memasangnya.

Satu percakapan I2C

Pilih skenario dan jalankan. Perhatikan bahwa ESP32 selalu memulai percakapan. Kartu terbuka setelah kamu menjalankan dua skenario.

Simulasi interaktif tersedia saat JavaScript aktif.

Semua perangkat mendengar kabel yang sama, tapi hanya yang alamatnya dipanggil yang menjawab. Jawaban ini disebut ACK (acknowledge, tanda terima). Kalau tidak ada yang menjawab, kemungkinan alamatnya salah atau kabelnya tidak tersambung.

Pemindai alamat I2C

Program pertama yang dijalankan setiap kali memasang perangkat I2C baru.

#include <Wire.h>
void setup() {
  Serial.begin(115200);
  Wire.begin(21, 22);
  for (byte a = 1; a < 127; a++) {
    Wire.beginTransmission(a);
    if (Wire.endTransmission() == 0) {
      Serial.print("Ada perangkat di 0x");
      Serial.println(a, HEX);
    }
  }
}
void loop() {}
  • Baris 4: Wire.begin(SDA, SCL). Bisa memilih pin lain di ESP32.
  • Baris 7: endTransmission() mengembalikan 0 kalau ada ACK, yaitu ada perangkat di alamat itu.

Benar atau salah?

  1. "Semua perangkat I2C boleh memakai alamat yang sama karena kabelnya bersama."
    • Benar
    • Salah
    Jawaban

    Salah. Dua perangkat dengan alamat sama akan menjawab bersamaan dan datanya bertabrakan. Banyak modul punya pin atau jumper untuk memilih alamat lain (misalnya 0x76 atau 0x77).

  2. "Pemindai tidak menemukan apa pun. Hal pertama yang dicek adalah SDA dan SCL tertukar, daya, dan GND."
    • Benar
    • Salah
    Jawaban

    Benar. Kesalahan kabel adalah penyebab paling umum. Cek juga apakah modulnya 3,3 V atau 5 V.

Selesai

  • I2C = dua kabel (SDA, SCL) untuk banyak perangkat, ditambah daya dan GND.
  • Setiap perangkat punya alamat unik. ESP32 memanggil, perangkat menjawab ACK.
  • Jalankan pemindai alamat setiap memasang perangkat baru.

Pancingan

Ini materi lanjutan. Untuk proyek di Teknol, sensor analog sudah cukup. Saatnya menggabungkan semuanya di materi Proyek: pengendali suhu mandiri.

Berikutnya

Referensi
  • NXP, UM10204 I2C-bus specification and user manual.
  • Dokumentasi Arduino, pustaka Wire.
  • Lembar data Bosch BME280 (alamat I2C 0x76/0x77).

Draf AI. Belum direview manusia.

Kode materi p10 · versi 0.1 · 2026-10-06