Inter-Integrated Circuit atau I2C merupakan sebuah protokol komunikasi yang digunakan untuk pertukaran data antar perangkat mikrokontroler dan sensor atau pun perangkat lainnya. I2C dirancang untuk menghubungkan berbagai perangkat dalam sebuah sistem menggunakan jalur komunikasi bersama. I2C banyak digunakan di beberapa perangkat, seperti sensor, EEPROM, RTC dan berbagai jenis chip lainnya yang mendukung komunikasi melalui I2C.
Komunikasi I2C pada Arduinobiasanya dilakukan menggunakan dua pin, yaitu SDA (Serial Data Line) dan SCL (Serial Clock Line). SDA digunakan untuk mengirim data dan SCL digunakan untuk mengirimkan sinyal clock yang akan mengatur timing komunikasi antar perangkat yang terhubung.
Berikut ini uraian singkat mengenai bagaimana komunikasi I2C digunakan antara dua perangkat pada Arduino:
1. Master dan Slave
Pada komunikasi I2C,
terdapat salah satu perangkat yang berperan sebagai “Master” dan perangkat
lainnya berperan sebagai “Slave”. Master yaitu perangkat yang menginisiasi
komunikasi dan mengontrol alur komunikasi, sedangkan slave yaitu perangkat yang
menerima instruksi dari master.
2. Start Condition
Start condition merupakan
proses awal pada komunikasi I2C. Ketika sinyal pin SDA berpindah dari HIGH ke
LOW saat pin SCL berada pada kondisi HIGH, maka start condition akan terbentuk.
Hal ini menunjukkan bahwa transmisi data akan dimulai.
3. Addressing
Alamat slave yang akan
dituju dikirimkan oleh master bersamaan dengan bit pembacaan atau penulisan.
Setiap perangkat slave memiliki alamat yang unik dan alamat tersebut digunakan
oleh master untuk mengidentifikasi perangkat yang ingin berkomunikasi.
4. Data Transfer
Master dan slave akan
berkomunikasi dengan mengirimkan atau menerima data dalam bentuk byte. Data
tersebut dikirim dalam bentuk urutan MSB (Most Significant Bit) terlebih
dahulu.
5. Acknowledge (ACK) Bit
Setiap byte data yang diterima oleh slave akan diikuti dengan bit ACK yang dikirimkan oleh slave sebagai konfirmasi bahwa byte data diterima dengan baik. Slave akan mengirimkan bit NACK jika tidak bisa atau tidak ingin menerima lebih banyak data.
6. Stop Condition
Stop condition merupakan akhir dari suatu proses komunikasi I2C. Ketika sinyal pin SDA berpindah dari LOW ke HIGH saat pin SCL berada pada kondisi HIG, maka stop condition akan terbentuk. Komunikasi I2C pada Arduino diimplementasikan menggunakan library Wire (Wire.h) menggunakan fungsi “Wire.begin()” , “Wire.beginTransmission()” , “Wire.write()” , “Wire.endTransmission()” dan “Wire.requestFrom()”. Jadi, Anda dapat dengan mudah mengatur komunikasi I2C antara perangkat master dan slave. Berikut ini contoh sederhana untuk mengirim data dari master ke slave menggunakan komunikasi I2C :
Master (Read)
#include <Wire.h>
void setup() {
Wire.begin(); // Memulai komunikasi I2C
}
void loop() {
Wire.beginTransmission(8); // Mengirim data ke perangkat dengan alamat 8
Wire.write('A'); // Mengirim karakter 'A'
Wire.endTransmission(); // Mengakhiri transmisi
delay(1000);
}
Slave (Penerima)
#include <Wire.h>
void setup() {
Wire.begin(8); // Memulai komunikasi I2C dengan alamat 8
Wire.onReceive(receiveEvent); // Mengatur fungsi untuk menangani data masuk
Serial.begin(9600);
}
void loop() {
delay(100);
}
void receiveEvent(int byteCount) {
while (Wire.available()) {
char data = Wire.read(); // Membaca data yang diterima
Serial.print("Received: ");
Serial.println(data);
}
}
Pada contoh di atas, perangkat master dengan alamat 0 mengirimkan karakter “A” ke perangkat slave dengan alamat 8. Kemudian perangkat slave membaca data yang diterima dan mencetaknya melalui serial monitor.
0 on: "Komunikasi I2C untuk Pertukaran Data Antar Device pada Arduino"