Cara Menggunakan I2C Display 16x2 LCD pada Arduino ESP32

Parnaek
6 min readFeb 28, 2021

--

Selamat pagi para pembaca setia blog ini. Hari ini kita masih akan berkutat dengan pembahasan yang sama dengan hari-hari sebelumnya, yaitu topik Arduino ESP 32. Setelah beberapa pertemuan, akhirnya, kita sampai ke tahap memunculkan output lewat display layar LCD.

Sumber : LCD-display-featured-image

Sebenarnya untuk display sendiri ada alternatif yang tidak kalah bagus yaitu OLED Display. Namun, saat saya hendak belanja, toko sedang kehabisan stok display (katanya ada yang borong siangnya, waduh ga hoki banget kan saya, HEHEEHE ) . Oleh karena itu, saya menggunakan i2c bekas yang saya beli tahun lalu.

Sumber : i2c LCD Pinout

Oh ya untuk percobaan ini sendiri kita hanya membutuhkan barang-barang berikut :

  1. Arduino ESP32 ( saya masih pakai WEMOS MINI D1 )
  2. I2C Liquid Crystal LCD
  3. Jumper Male-to-Male
  4. Breadboard
  5. Kabel MicroUSB

Cukup sederhana, bukan? Selanjutnya mari kita masuk ke persiapan awal.

Hah, persiapan awal? Ya benar sekali. Kita pertama perlu menginstall library Liquid-Crystal terlebih dahulu. Eits, tenang saja anda tidak perlu kemana-mana kok, karena saya sudah menyediakan lewat link ini. Anda tinggal download file zip nya lalu extract.

Hasil download file-zip
Hasil pengekstarakan file zip

Nah, sesudahnya, anda bisa memindahkan folder tersebut ke direktori library Arduino anda. Lazimnya, para pengguna Windows bisa mengaksesnya di C :/ > Documents > Arduino > libraries . Apabila anda sudah menemukannya, anda rename dahulu foldernya menjadi LiquidCrystal_I2C. Pastikan untuk memperhatikan huruf besar dan kecil, karena akan tetap berpengaruh.

Final library setelah dipindahkan dan direname

Apabila sudah anda pindahkan, bisa di-restart dahulu software Arduino agar memberikan efek perubahan.

Setelah itu ngapain, bro? Udah ga sabar nih! Weits, kalem dongg. Oke kalau misal udah beres dengan urusan library, kita masuk tahap pengecekan dulu ya. HAH, pengecekan apa itu, bro? Ya, kita mendeteksi dulu dong, apakah i2c LCD Display kita terdeteksi ga oleh sistem.

Nah sebelumnya, kita pelajari dulu dong pastinya konfigurasi pin I2C Liquid Crystal LCD di Arduino ESP32. Nah, bisa dilihat di gambar di bawah ini.

Sumber : esp32_LCD_schema_diagram
Sumber : pin-configuration_I2C_LCD_table

Oke, langsung aja, kita langsung masuk tahap perakitan

  1. Siapkan Arduino ESP32. Lalu tancapkan ke breadboard. Bisa dilihat seperti inilah rupanya.
Arduino ditancapkan secara horizontal

2. Lalu, sambungkan jumper dari pin VCC ke pin VCC di Arduino ESP32.

3. Selanjutnya, kita sambungkan jumper dari pin GND ke pin GND Arduino ESP32.

4. Terakhir, kita sambungkan jumper dari pin SDA ke pin GPIO 21. Lalu, terakhir jumper dari pin SCL ke pin 22.

5. Apabila dirasa sudah cocok, bisa dilihat dengan gambar saya.

Pertama, sebelum kita pastikan LCD bisa menampilkan sesuatu di layar, mari kita mencari address dari I2C LCD nya terlebih dahulu. Jadi, kita memastikan apakah lcd kita terdeteksi oleh sistem Arduinonya. Untuk code nya sendiri, bisa dilihat di bawah ini.

Apabila hasil yang anda dapatkan sudah seperti saya (lihat di bawah ini), mari kita lanjut ke tahap selanjutnya. Namun, apabila belum, silahkan cek ulang wiring anda. Kesalahan umum pada tahap ini adalah SDA dan SCL yang terbalik, atau mungkin jumper kurang masuk ke dalam lubang breadboard.

Video LCD Scanner dan Detection

Mari kita lanjut lagi ke tahap yang lebih advanced. Karena kita sudah memastikan bahwa I2C LCD terbaca dengan baik, mari kita mencoba menampilkan teks statis terlebih dahulu. Dalam hal ini, saya mencoba menampilkan teks “Hello World” . Hanya saja “hello world” nya akan muncul di atas sekali dan di bawah sekali selama 1 detik berulang-ulang.

Sebelumnya, mari kita coba pahami kode di atas.

Langkah pertama dimulai dari meng-include library LiquidCrystal_I2C yaitu pada bagian kode ini

#include <LiquidCrystal_I2C.h>

Selanjutnya, menginisialisasi variable panjang dan lebar LCD yaitu pada bagian kode ini,

int lcdColumns = 16;int lcdRows = 2;

Pada bagian setup, kita memulai command dengan lcd.init untuk menginisasialisi LCD lalu lcd.backlight karena lcd membutuhkan backlight tidak seperti OLED yang tidak membutuhkan backight.

// inisiaslisi awal LCD lcd.init(); // mengaktifkan backlight LCDlcd.backlight();

Selanjutnya, kita mengeset kursor ke baris pertama (LCD kita punya 2 rows), maka fungsi lcd.setCursor(0,0) berarti teks dimulai dari kolom dan baris pertama (dimulai dari indeks 0). Setelah kita mengeset kursor ke (0,0), kita mem-print out kata Hello World dengan menggunakan perintah lcd.print(“Hello World”).

Setelahnya, kita memanggil lcd.clear() untuk membersihkan output, lalu memprint kalimat baru. Namun kali ini, kita mem-print dari baris selanjutnya (indeks ke-1) diikuti fungsi lcd.print() untuk memprint. Untuk setiap perintah kita memasukkan perintah delay(1000) yang artinya ada jeda 1 detik untuk setiap tulisan yang dimunculkan. Lalu, kembali lagi dipanggil fungsi clear untuk menghapus output dan membersihkan display.

// set cursor to first column, first row lcd.setCursor(0, 0); // print message lcd.print(“Hello, World!”);delay(1000); // clears the display to print new message lcd.clear(); // set cursor to first column, second row lcd.setCursor(0,1); lcd.print(“Hello, World!”); delay(1000); lcd.clear();

Lantas, bagaimana hasilnya? Anda bisa lihat di bawah ini untuk menjawab pertanyaan tersebut.

Video Display Teks Statis di Arduino ESP32

Bagaimana? Semakin penasaran bukan untuk eksperimen selanjutnya? Hah, masih ada percobaan lagi? Iya dong, kita akan coba dynamic (running text) di LCDnya. Emang bisa? Hm, mending dari pada banyak cengkonek, langsung aja cuss.

Dalam tahap ini, kita tidak perlu mengatur ulang set TKP breadboard kita ya. Kita hanya melakukan perubahan pada kodenya saja. Mari kita lihat kodenya seperti apa.

Saya pikir, apabila anda jeli, anda bisa menemukan dengan cepat, bagian kode yang sangat berbeda dengan kode sebelumnya. Yak, benar sekali ada dua yaitu adanya void scrollText().

void scrollText(int row, String message, int delayTime, int lcdColumns) {  for (int i=0; i < lcdColumns; i++) {
message = " " + message;
}
message = message + " ";
for (int pos = 0; pos < message.length(); pos++) {
lcd.setCursor(0, row);
lcd.print(message.substring(pos, pos + lcdColumns));
delay(delayTime);
}
}

Mari kita bahas fungsi ini. Ada beberapa variabel yang akan saya bahas disini.

  • row: jumlah baris yang ditampilkan
  • message: pesan yang hendak ditampilkan
  • delayTime: jeda waktu antar setiap karakter. Apabila angkanya semakin besar, maka teks akan makin lama untuk running. Demikian sebaliknya.
  • lcdColumns: jumlah kolom LCD

Selanjutnya, karena kita sudah mengeset void nya, kita langsung saja memanggilnya dengan perintah scrollText($param). $param artinya tinggal sesuaikan dengan parameter yang anda suka. Disini saya hanyamenggunakan 1 row dan jeda 250ms untuk setiap karakter.

scrollText(1, messageToScroll, 250, lcdColumns);

Apabila anda sudah mendapatkan hasil seperti berikut, berarti percobaan Anda telah berhasil.

Video Scrolling Text Display on LCD

Karena saya iseng, saya coba ganti tulisannya agar mirip dengan konter pulsa di perkotaan. Beginilah hasil yang saya dapatkan. Mungkin, suatu saat nanti, saya bisa merealisasikan dalam bentuk yang lebih besar.

Oke, sekian untuk tulisan hari ini. Saya harapkan teman-teman sekalian bisa ikut mencoba tidak sekadar membaca saja, karena dengan mempraktekkan kita bisa lebih mengerti tentang apa yang kita baca. Sekali lagi, saya haturkan terima kasih untuk anda sekalian pembaca setia tulisan saya. Akhir kata saya pamit undur diri dan sampai jumpa di postingan selanjutnya.

Goodbye and have a nice day!!

--

--