Yang dimaksud dengan I2C LCD adalah modul LCD yang dikendalikan secara serial sinkron dengan protokol I2C/IIC (Inter Integrated Circuit) atau TWI (Two Wire Interface). Normalnya, modul LCD dikendalikan secara parallel baik untuk jalur data maupun kontrolnya. Namun, jalur parallel akan memakan banyak pin di sisi kontroller (misal Arduino, Android, komputer, dll). Setidaknya Anda akan membutuhkan 6 atau 7 pin untuk mengendalikan sebuah modul LCD. Dengan demikian untuk sebuah kontroller yang ‘sibuk’ dan harus mengendalikan banyak I/O, menggunakan jalur parallel adalah solusi yang kurang tepat.
Sebagai contoh, sebuah Arduino Uno memiliki pin digital sebanyak 13 buah. Jika Anda gunakan separuhnya untuk mengendalikan LCD berarti Anda hanya punya alternatif sekitar 6 atau 7 pin untuk mengendalikan perangkat yang lain, misalnya motor DC, sensor cahaya, keypad, dan I/O devices lainnya. Nah, sekarang tergantung pada sistem Anda, cukup atau tidak jika harus menggunakan 6/7 pin khusus untuk bekerja dengan LCD saja. Jika tidak cukup, Anda dengan mengubah jalur kendali LCD dari parallel ke serial (I2C) menggunakan modul I2C converter, sehingga Anda hanya akan membutuhkan 2 jalur kabel saja (plus satu kabel ground) untuk menghubungi sang LCD.
Arduino sendiri sudah mendukung protokol I2C/IIC. Di papan Arduino Uno, port I2C terletak pada pin A4 untuk jalur SDA (Serial Data) dan pin A5 untuk jalur SCL (Serial Clock). Jangan lupa untuk menghubungkan jalur kabel Ground antara Arduino dengan perangkat I2C client. Untuk sisi software, Arduino sudah cukup membantu kita bekerja dengan protokol ini melalui library ‘Wire.h’. Berikutnya, library ini akan dimanfaatkan untuk mengkonversi jalur parallel LCD menjadi jalur serial I2C. Anda dapat secara manual melakukannya, tapi jika tidak ingin repot, Anda dapat dengan mudah melakukannya menggunakan library LiquidCrystal_I2C.h (bersama dengan library LCD.h). Anda dapat mengunduh  LiquidCrystal_I2C secara gratis di sini dan library LCD.h di sini Untuk menambahkan library baru ke Arduino IDE dapat Anda baca caranya di sini.
Perlu saya sampaikan bahwa tidak ada (setidaknya belum saya temukan) hardware modul LCD yang mendukung/memiliki port I2C. Dengan demikian, kita akan tetap menggunakan modul LCD biasa (dengan komunikasi data secara parallel), namun akan kita konversi menggunakan modul I2C converter seperti tampak pada gambar di bawah.
Modul I2C converter ini menggunakan chip IC PCF8574 produk dari NXP sebagai kontrollernya. IC ini adalah sebuah  8 bit I/O expander for I2C bus yang pada dasarnya adalah sebuah shift register.
Untuk alur komunikasi datanya, ditunjukkan dengan pada gambar di bawah
Sedangkan wiring kabel antara Arduino, modul konverter I2C dan modul LCD dapat mengikuti gambar di bawah.
Untuk sisi software-nya, Anda cukup mendefinisikan library LiquidCrystal_I2C.h di bagian atas sketch Anda. Selanjutnya, seluruh function yang termaktub dalam library ini dapat Anda maksimalkan. Berikut ini adalah contoh sketch Arduino untuk menampilkan tulisan ke dalam LCD dengan perantara modul I2C converter PCF8574.
#include <Wire.h> #include <LCD.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2CÂ lcd(0x27,2,1,0,4,5,6,7); // 0x27 = alamat I2C modul void setup() { Â lcd.begin (16,2); // LCD 16x2 Â lcd.setBacklightPin(3,POSITIVE); Â lcd.setBacklight(HIGH); } void loop() { lcd.clear(); lcd.home (); // set cursor to 0,0 lcd.print("Hello World"); lcd.setCursor (0,1); lcd.print("Saptaji.com"); delay(1000); lcd.setBacklight(LOW);Â Â Â Â Â // Backlight off delay(250); lcd.setBacklight(HIGH);Â Â Â Â // Backlight on delay(1000); }
Perlu Anda perhatikan pada baris [1 – 3] digunakan untuk mendefinisikan library Wire, LCD dan LiquidCrystal_I2C. Ketiga library ini wajib ada jika akan bekerja dengan I2C LCD. Selanjutnya perlu kita buat sebuah instance ‘lcd’ pada class ‘LiquidCrystal_I2C’ (baris [5]). Perhatikan elemen/parameter dari class ini yang menunjukkan alamat modul I2C, pinout control dan pinout data LCD. Pada kesempatan lain akan saya jelaskan mengapa menggunakan angka default 27H (0x27) untuk mengalamati modul konverter I2C ini dan bagaimana mengubahnya jika menggunakan lebih dari satu modul I2C converter.
Berikutnya kita perlu menginisialisasi modul LCD dalam blok void setup. Perhatikan dalam blok ini, kita definisikan LCD yang kita pakai adalah tipe 16×2 (baris [9]) dan kita set kecerahan/pencahayaan LCD (baris [10-11]). Berturut-turut pada baris berikutnya kita akan membersihkan tampilan LCD (baris [16]), menuju koordinat LCD kolom 0, baris 0 (baris [17]), menuliskan tampilan ‘Hello Word’ ke LCD (baris [18]), mengeset kursor ke koordinat (0,1) yang artinya kolom 0, baris 1 (baris kedua LCD), menampilkan tulisan ‘Saptaji.com’ (baris [19-20]), dan sedikit meberikan efek animasi dengan menyalakan dan mematikan pencahayaan LCD pada baris [ 21-25 ].
Demikian tutorial penggunaan I2C LCD dengan modul konverter I2C dan Arduino, semoga ada manfaatnya. Tutorial berikutnya akan coba kita implementasikan I2C LCD ini untuk menampilkan pengukuran jarak bersama dengan sensor ultrasonik.
a Technopreneur – writer – Enthusiastic about learning AI, IoT, Robotics, Raspberry Pi, Arduino, ESP8266, Delphi, Python, Javascript, PHP, etc. Founder of startup Indomaker.com
Mas Saptaji, bisa minta header LCD.h gak?
googling aja mas, banyak
mas kenapa ya lcd ane cma blank kedapkedip doank ga ada tulisannya
coba dicek sketch-nya dan wiring-nya
Dah ngantuk mungkin mas :v
Makasih banyak mz infonya
sukses selalu
Mas sapta aji, di LCD 20×4 kok ga mau running ya ?
Malah LCD nya jadi mati, gak hidup. Mohon bantuannya mas …
kalau nggak ada tulisannya di lcd nya itu knp ya mas ?
yang pertama cek sketch-nya, udah yakin benar belum. Kalo udah yakin, coba atur brightness LCD-nya, mungkin itu sebenarnya udah tertampil tapi karena gelap jadi ga kelihatan
mas kalau program ini saya aplikasi kan ke lcd grafik dan kode 16, 2 aq ganti dg 128, 64 kira2 bisa jalan gak mas? saya udah coba sih tapi gak nampil, mohon solusinya
kyknya hrs pake library lain mas
selamat malam mas…
kalo misalnya yang mau kita tampilin counter dari detik gimana caranya ya..??
soalnya saya sudah coba perhitungan detiknya gak sesuai..
mohon pencerahannya…
heheee
kalo pengin akurat bisa pake RTC (Real Time Clock) module, tutorialnya bisa di baca di http://saptaji.com/2015/07/19/5-menit-handling-rtc-ds3231ds3232-dengan-arduino/ atau kalo mau secara software juga bisa, bisa di sini http://saptaji.com/2015/06/24/arduino-sebagai-rtc-real-time-clock/
mas, saya mau nampilin tulisan di lcd tp ngga keluar. bagaimana ya?
yg pertama coba puter2 trimpot yg ada di i2c lcd, barangkali sebenarnya karakter sudah keluar tapi karena kurang cerah jadi ga tertampil.
yg kedua, coba ubah alamat i2c dar 0x2F menjadi 0x3F, karena di pasaran ada dua macam tipe i2c module
mas, untuk coding 2,1,0,4,5,6,7,3 itu fungsinya apa ya?
define konfigurasi pin lcd mas, yg terhubung dg modul i2c-nya. Pin lcd -> RS, E, D4, D5 dst
download library lcd dimana ya? Mohon pencerahannya ^_^
di artikel udah ada linknya
Berapa panjang maksimal kabel untuk i2c arduino menggunakan sda scl yg ada d arduino? Saya belum mengerti akan hal ini mohon bantu jawab ya teman’
untuk teorinya bisa sangat panjang asal ada resistor pullup untuk ‘mengangkat’ arus data yang lewat. Terakhir saya coba 2 meter bisa tanpa resistor pullup
Berti 1km pun gk msalah y om
Asal d psang resistor pullup gtu
teorinya gitu, tapi sy belum pernah mencoba ya 🙂
btw, kalo untuk jarak 1 km, biasanya saya pake kabel LAN (atau WIFI) dg protokol TCP/IP
bang kok disuruh cari library wire.h? udah googling katanya udah ada di IDE tapi gak ada
Maaf mas mau nanya, untuk pin SCL dan SDA apakah bisa digunakan untuk mengoperasikan RTC dan I2C pada satu arduino uno?
bisa mas, tinggal bedain aja address masing-masing I2C device-nya
Alamat librarynya ya mas atau gmn, bisa tolong kirim contoh programnya mas?
alamat device-nya mas, misal ada dua I2C device dengan alamat 0x4a dan 0x20, kalo mau komunikasi dengan device tersebut tinggal Wire.beginTransmission(0x4a); atau Wire.beginTransmission(0x20); (misal pake library Wire.h). Bisa dilihat contoh scriptnya di File-Examples-Wire
suyanto ea
?
mas maaf, boleh minta tolong buat tutorial io expander kontrol relay …
pake PCF8574 aja mas biar mudah
saya mau tanya mas. data yang di tampilkan di lcd 16×2 yang ada di gambar diatas apakah bisa di ambil menggunakan arduino uno menggunakan komunikasi i2c atau komunikasi lain?
bisa mas, sepertinya sama modelnya