Belajar Arduino Dasar Komunikasi I2C Master Reader


Beberapa board Arduino dapat saling berhubungan untuk kemudian bertukar data satu sama lain. Hal tersebut akan sangat berguna dalam sebuah project besar yang menuntut lebih dari sebuah board Arduino. Sebagai contoh, dua board Arduino digunakan untuk dapat melakukan komunikasi bertukar data satu sama lain, sebagai perangkat Master Reader-Slave Sender melalui jalur komunikasi I2C synchronous serial. Untuk itu perlu digunakan beberapa function yang ada pada library Wire Arduino untuk komunikasi I2C tersebut. Arduino pertama, digunakan sebagai perangkat master, yang akan meminta data dari slave, lalu membaca data tersebut, dengan 6 byte data dikirim melalui pengalamatan slave Arduino. Setelah data diterima, isi data tersebut dapat dilihat pada Serial Monitor Arduino IDE.
Komunikasi I2C Arduino membutuhkan dua jalur pengkabelan untuk mengirimkan dan menerima data, adalah pin serial clock (SCL) yang pada Arduino memberikan pulsa clock interval pengiriman data, dan pin serial data (SDA) yang memmuat data yang akan dikirimkan antar kedua perangkat tersebut. Setiap kali pulsa clock berubah dari low menjadi high (disebut dengan istilah rising edge of the clock), sebuah bit informasi yang memuat alamat perangkat dan perintaan untuk data, dikirimkan dari Arduino melalui I2C jalur SDA, ke perangkat lainnya yang terhubung. Pada saat pin clock berubah dari high menjadi low (disebut dengan istilah falling edge of the clock), balasan data yang diminta sebelumnya akan dikirimkan, juga melalui jalur I2C Arduino yang sama.
Karena jalur komunikasi dengan I2C mengharuskan bahwa setiap perangkat slave yang terhubung untuk memiliki alamat uniknya masing-masing, supaya perangkat master dan slave mampu tetap berkomunikasi dalam satu jalur. Bahkan perangkat master dapat berkomunikasi dengan banyak perangkat slave, dengan tetap hanya menggunakan dua buah pin Arduino saja. Selama alamat unik dari setiap perangkat slave dikenali maka komunikasi mungkin untuk dilakukan.

Wiring Diagram

<img src="arduino_master_slave_i2c.png" alt="arduino_master_slave_i2c">


Untuk menghubungkan dua board Arduino Uno dilakukan dengan cara menghubungkan pin A4 (SCL) master dengan pin A4 slave, pin A5 (SDA) master dengan pin A5 slave, serta dengan menghubungkan Ground kedua board tersebut. Untuk wiring tampak seperti pada gambar.

Source Code
Berikut ini adalah source code (sketch) Arduino untuk perangkat master yang akan mengirimkan request untuk selanjutnya membaca data yang dikirimkan oleh perangkat slave tersebut.

/*
Program membaca data
perangkat master Arduino

Loki Lang
*/

#include <Wire.h>

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

void loop()
{
  Wire.requestFrom(2, 6);

  while(Wire.available())
  {
    char c = Wire.read();
    Serial.print(c);
  }
  delay(500);
}


Perangkat master akan mengirimkan request ke slave di alamat nomor 2, dengan data character berukuran 6 byte. Data character yang dikirimkan oleh slave setelah diterima kemudian akan dibaca, untuk selanjutnya ditampilkan di Serial Monitor Arduino IDE. Setelah source code (sketch) untuk perangkat master, selanjutnya perlu membuat bagian untuk perangkat slave, yakni sebagai berikut.

/*
Program mengirimkan data
perangkat slave Arduino

Loki Lang
*/

#include <Wire.h>

void setup()
{
  Wire.begin(2);
  Wire.onRequest(requestEvent);
}

void loop()
{
  delay(100);
}

void requestEvent()
{
  Wire.write("hello ");
}


Pada perangkat slave perlu dilakukan deklarasi alamat perangkat tersebut. Dalam hal ini, perangkat slave diberikan alamat nomor 2, dan telah disesuaikan dengan sorce code (sketch) pada perangkat master. Setelah menerima request dari perangkat master, perangkat slave akan mengirimkan data 6 byte yang merepresentasikan character dari pesan "hello " ke perangkat master. Setiap character dari "hello " dalam 1 byte data. Hingga pada perangkat master pesan data tersebut diterima untuk kemudian ditampilkan pada Serial Monitor sebagai pesan "hello " dari perangkat slave.

Sayangnya bila menggunakan feature I2C bus pada board Arduino Uno, sekaligus mengorbankan pin A4 dan A5. Sehinggga pin A4 dan pin A5 tidak dapat digunakan untuk membaca data analog. Saran bila mengerjakan sebuah project yang menggunakan lima buah sensor analog ditambah I2C, dengan board Arduino Uno, sebaiknya menggunakan multiplexer analog untuk pembacaan data sensor analog tersebut.
Bila ada sesuatu yang belum jelas dan ingin tahu lebih dalam seputar project Arduino, pemrograman, dan elektronika, bisa bertanya pada bagian comment.