Tutorial Arduino : Mencari Address Modul I2C pada Display LCD 16x2 - Elang Sakti
Download Ebook Belajar Arduino PDF, Arduino untuk pemula
Jasa Pembuatan Program Arduino, pemrograman Arduino
# Hack Your Skills! to be Professional Mechatronics

Tutorial Arduino : Mencari Address Modul I2C pada Display LCD 16x2

12 komentar
Beberapa hari ini kita lagi sibuk ngerjain 4 project Arduino. Project-projectnya bergelut dengan modul GPS U-blox Neo 6M, modul GSM SIM900, Sensor Suhu, Keypad 3x4, modul SDCard, RTC DS1307, Sensor Arus, Sensor Tegangan, dan modul LCD. Yang menarik, setiap project yang dipesan kudu menggunakan LCD 16x2 yang di-drive dengan modul I2C adapter. Tapi bukan itu inti dari artikel ini, hehe :p. Pada artikel ini kita akan sharing tentang cara menghubungkan I2C adapter pada Arduino Uno dan Nano, plus cara mencari address I2C yang valid dengan bantuan program Arduino.

Pembuatan Project Arduino

Modul I2C untuk LCD kadang menyebalkan. Sebab, jika salah dalam memilih address yang berbeda, maka efeknya bukan layar lcd tidak menyala, tapi layar lcd muncul kotak-kotak berbaris. Pada dasarnya, address I2C yang digunakan setiap modul punya rentang dari 0-126. Misal, pada tulisan ini saya contohkan 2 modul I2C dengan merk yang sama, tapi memiliki address yang berbeda yaitu 0x27 dan 0x3F. Berikut contoh program arduino lcd 16x2, untuk setting I2C adapter untuk LCD dengan address 0x3F.

// load library LCD I2C
#include <LiquidCrystal_I2C.h>

// Setting LCD pada address 0x3F
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7);

Sekilas tentang Komunikasi I2C

Mengingat jumlah kaki LCD yang banyak, maka untuk menghemat pemakaian kaki Arduino bisa menggunakan adapter dengan komunikasi I2C. Komunikasi I2C (Inter-Integrated Circuit) adalah komunikasi synchronous yang hanya membutuhkan 2 jalur komunikasi yang disebut dengan SDA (synchronous data) dan SCL (synchronous clock). Komunikasi I2C juga dikenal dengan istilah Two-Wire Serial Interface (TWI). Jadi, jika ada modul yang menggunakan komunikasi TWI, berarti bisa diakses menggunakan I2C.

Gambar modul LCD 16x2 dan Arduino + I2C Adapter


Kita tidak ingin membahas protokol I2C pada artikel ini. Tapi, beberapa modul yang kadang membutuhkan komunikasi ini yaitu RTC, EEPROM, LCD (meski ada tambahan modul), dan beberapa sensor lainnya. Hal yang paling penting dan perlu diingat adalah : jalur SDA dan SCL tidak boleh terbalik. Kalau terbalik? Ya tentu tidak bisa berkomunikasi lah, hehe (becanda). Tapi, karena setiap modul I2C didentifikasi berdasarkan address yang berbeda, maka kita bisa memasangnya secara paralel dengan modul I2C yang lain. Kita akan contohkan pada penjelasan selanjutnya.

Jalur SDA dan SCL pada Arduino

Boleh diingat kembali bahwa I2C membutuhkan 2 jalur komunikasi, yaitu jalur data (SDA) dan jalur clock (SCL). Jadi, kita harus tahu ada dimana posisi pin SDA dan SCL pada arduino.

Pada Arduino Uno dan Nano, jalur SDA sama-sama ada pada pin A4 (Analog 5) sedangkan jalur SCL sama-sama pada pin A5 (Analog 5). Nah, pada Arduino, pin SDA dan SCL hanya ada satu. Jadi, jika kita memiliki banyak perangkat yang harus berkomunikasi dengan I2C, maka kita bisa menyambungnya secara paralel. Seperti gambar di bawah ini, dari Arduino disambung ke RTC1307 dan LCD adapter.

Gambar Modul LCD I2C dan RTC 1307 Diparalel

Mencari Alamat pada Modul I2C dengan I2C Address Scanner

Cerita sedikit, kita pernah memiliki 2 buah modul LCD I2C adapter. Pada modul yang pertama, berdasarkan beberapa tutorial di internet, kita "mencoba" menggunakan address 0x20 dan berhasil. Saat itu kita belum tahu bahwa modul-modul I2C bisa saja memiliki address yang berbeda.

Nah, ketika mencoba modul LCD yang kedua, ternyata address 0x20 tidak works. Kita kebingungan, bahkan kita sampai mengira bahwa modul tersebut sudah rusak! Whatt!!! Dalam hati berkata, "haruskah Aku komplain sama penjual ituuuuh?!!". Dua jam berlalu tanpa hasil, modul itu kita tinggal tidur. =))

Setelah bangun, kita coba cari-cari lagi di internet. Ternyata ada orang di stackoverflow yang berhasil menggunakan address 0x3F. Dengan sedikit harapan, kita coba alamat tersebut, eh, ternyata bisa. Dari pengalaman tersebut, muncul pertanyaan dalam hati, "Apakah setiap modul punya address yang berbeda?". Lalu kita coba googling dengan keyword "how do we know i2c lcd address", sok keminggris, hehe. Ya, sebab referensi yang bagus belum banyak yang berbahasa Indonesia. v^_^

Berdasarkan diskusi-diskusi, protokol, dan contoh source code yang ada, maka dibuatlah program untuk mencari tahu address modul I2C dengan program berikut ini:

/*
 * I2C Scanner
 * Explored by Elangsakti.com
 * # Hack Your Skill!
 */

#include <Wire.h>

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

    Serial.println("#============o0o=============#");
    Serial.println("#         I2C Scanner        #");
    Serial.println("# Explored by Elangsakti.com #");
    Serial.println("#============================#");

    Cari_Alamat();
}

void loop() { }

void Cari_Alamat()  {
    byte respon, alamat, modul = 0;

    Serial.println("Scanning...");
    Serial.println();
    
    for(alamat=0; alamat<127; alamat++){
        Wire.beginTransmission(alamat);
        respon = Wire.endTransmission();
        switch(respon){
            case 0:
                Serial.print("  ");
                Serial.print(modul+1);
                Serial.print(". Alamat = 0x");
                if( alamat < 16 ) Serial.print("0");
                Serial.println(alamat, HEX);
                modul++;

                break;

            case 4:
                Serial.print("  - Error ");
                if( alamat < 16 ) Serial.print("0");
                Serial.println(alamat, HEX);
        }
    }
    Serial.println();

    if(modul > 0){
        Serial.print("Ditemukan ");
        Serial.print(modul);
        Serial.println(" modul I2C.");
    }else{
        Serial.println("Tidak ada modul I2C.");
    }

    delay(2000);
}


Cara menggunakannya, cukup hubungkan modul I2C ke Arduino. Misal menggunakan Uno atau Nano, maka SDA ke pin A4, lalu SCL ke pin A5. VCC ke VCC dan GND ke GND. Berikut adalah hasil dari pencarian alamat / address modul I2C pada dua project yang ada pada gambar di atas.


Contoh Program Arduino hasil program Arduino I2C Adrress Scanner


Semoga bermanfaat, mohon maaf jika dalam artikel ini bercampur cerita :P, tunggu tutorial arduino selanjutnya. Salam hangat dari Elangsakti.com

# Hack Your Skills! to be Professional Mechatronics

Written by ElangSakti
Tutorial Arduino : Mencari Address Modul I2C pada Display LCD 16x2
Bahasan: Beberapa hari ini kita lagi sibuk ngerjain 4 project Arduino. Project-projectnya bergelut dengan modul GPS U-blox Neo 6M, modul GSM SI...
Published at Jumat, 17 Februari 2017, Updated at Jumat, 17 Februari 2017
Reviewed by dr. on
Rating: 4.7

12 komentar :

  1. Terima kasih gan.
    Info nya berguna sekali bagi saya

    BalasHapus
  2. udah saya sesuain tp masih muncul kotak-kotak gan....solusinya gimana yah

    BalasHapus
    Balasan
    1. Kotak2 di lcd? Kalau iya, coba atur kontrasnya.

      Hapus
  3. wah keren gan, sangat membantu

    BalasHapus
  4. gan ada library lcdnya?

    BalasHapus
  5. bagus sekali gan tulisannya. Jelas banget daripada bog lain. thank.
    Sering-sering nulis beginian ya gan, hehe..
    Tapi program diatas ga bisa dicompile gan. kenapa ya?
    Error compiling for board ardoino mega. Diganti pake uno juga sama.

    BalasHapus
  6. bagus sekali gan tulisannya. Jelas banget daripada bog lain. thank.
    Sering-sering nulis beginian ya gan, hehe..
    Tapi program diatas ga bisa dicompile gan. kenapa ya?
    Error compiling for board ardoino mega. Diganti pake uno juga sama.

    BalasHapus
  7. Gan, saya mau menggunakan modul lcd i2c dan juga modul sensor bmp180, bagaimana cara menggunakan 2 perangkat i2c sekaligus? Dan setting alamat tiap tiap perangkat? Soalnya ketika saya hubungkan 2 perangkat tersebut secara pararel malah lcd nya tidak nampil apa apa.

    BalasHapus
  8. Cara pembacaan dari alamat lcd i2c itu bagaimana 0x27 ini kan bilangan hexadecimal dan bagimana penjelasan kepada orang untuk alamat dari i2c ini

    BalasHapus
    Balasan
    1. Alamat ini berfungsi seperti IP Address dalam jaringan komputer yang menjadi alamat komputer. Atau seperti alamat rumah saat kita pesan paket dari toko online.

      Hapus
  9. Terima Kasih Sharing Ilmunya.

    BalasHapus