Lompat ke konten utama
Iklan

Cara Menggunakan LCD I2C 16x2 pada Arduino: Panduan Lengkap Pemula

Kalau proyek Arduino Anda sudah bisa membaca sensor tapi hasilnya cuma bisa dilihat lewat Serial Monitor di laptop, artinya proyek itu belum benar-benar berdiri sendiri. Begitu kabel USB dicabut, datanya hilang entah ke mana. Solusi paling murah dan paling sering dipakai untuk masalah ini adalah LCD 16x2 dengan modul I2C.

Di tutorial ini kita bahas tuntas: kenapa harus versi I2C, cara menyambungkannya, cara mencari alamat I2C yang benar (ini yang paling sering bikin pemula menyerah), sampai menampilkan data sensor dan membuat karakter sendiri.

Kenapa LCD I2C, Bukan LCD Biasa

LCD 16x2 polos punya 16 kaki. Untuk memakainya secara paralel, Anda butuh minimal 6 pin digital Arduino: RS, E, D4, D5, D6, D7 — belum termasuk potensiometer eksternal untuk mengatur kontras. Di Arduino Uno yang cuma punya 14 pin digital, separuh pin Anda habis hanya untuk layar.

Modul I2C mengubah itu. Modul kecil berwarna hitam yang disolder di punggung LCD itu berisi chip PCF8574, sebuah IC I/O expander. Chip ini menerima perintah lewat protokol I2C yang cuma butuh 2 kabel data, lalu menerjemahkannya menjadi 8 jalur paralel ke LCD.

Hasilnya: dari 6 pin jadi 2 pin. Sisa pin Arduino bisa dipakai untuk sensor dan aktuator lain. Potensiometer kontras pun sudah menyatu di modul, berupa sekrup biru kecil yang bisa Anda putar pakai obeng minus.

Alat dan Bahan

KomponenJumlahCatatan
Arduino Uno / Nano / Mega1Board apa pun bisa, pin I2C-nya saja yang berbeda
LCD 16x2 + modul I2C1Pastikan sudah ada modul hitam di belakangnya
Kabel jumper male-to-female4Untuk VCC, GND, SDA, SCL
Kabel USB1Sekaligus sumber daya saat pengujian

Kalau LCD Anda belum ada modul I2C-nya, modul itu dijual terpisah dengan harga sangat murah dan tinggal disolder pada 16 lubang di tepi LCD.

Skema Penyambungan

Modul I2C hanya punya empat kaki. Ini yang membuatnya ramah pemula:

Arduino Uno UNO R3 5V GND A4 A5 Modul I2C (PCF8574) Halo Arduino Suhu: 28 C VCC GND SDA SCL 5V GND SDA (data) SCL (clock) Hanya 4 kabel — dua di antaranya jalur daya

Yang perlu diingat: pin SDA dan SCL berbeda di tiap board. Ini sumber kebingungan nomor satu. Berikut acuannya:

BoardSDASCL
Arduino Uno / NanoA4A5
Arduino Mega 2560Pin 20Pin 21
Arduino LeonardoPin 2Pin 3
NodeMCU ESP8266D2 (GPIO4)D1 (GPIO5)
ESP32GPIO21GPIO22

Catatan penting untuk pengguna ESP8266 dan ESP32: kedua board itu bekerja pada logika 3,3 V, sedangkan LCD butuh 5 V agar tampilannya terang. Sambungkan VCC modul ke pin VIN atau 5V pada NodeMCU (bukan 3V3), sementara SDA dan SCL tetap ke pin GPIO. Dalam praktik, mayoritas modul PCF8574 masih membaca sinyal 3,3 V dengan baik.

Memasang Library

Kita butuh library LiquidCrystal I2C. Cara memasangnya lewat Arduino IDE:

  1. Buka menu Sketch → Include Library → Manage Libraries (atau tekan Ctrl + Shift + I).
  2. Ketik LiquidCrystal I2C di kolom pencarian.
  3. Pilih yang dibuat oleh Frank de Brabander, lalu klik Install.

Kalau Anda belum memasang Arduino IDE sama sekali, ikuti dulu panduan cara download dan install Arduino IDE di Windows.

Langkah yang Sering Dilewati: Cari Alamat I2C

Setiap perangkat I2C punya alamat unik. Modul LCD umumnya memakai 0x27, tapi ada juga batch yang memakai 0x3F. Kalau Anda memasukkan alamat yang salah, layar akan menyala tapi tidak ada satu huruf pun muncul — dan di titik inilah banyak pemula mengira LCD-nya rusak.

Jangan menebak. Jalankan dulu sketch pemindai berikut:

#include <Wire.h>

void setup() {
  Wire.begin();
  Serial.begin(9600);
  Serial.println("Memindai perangkat I2C...");
}

void loop() {
  byte jumlah = 0;

  for (byte alamat = 1; alamat < 127; alamat++) {
    Wire.beginTransmission(alamat);
    if (Wire.endTransmission() == 0) {
      Serial.print("Perangkat ditemukan di alamat 0x");
      if (alamat < 16) Serial.print("0");
      Serial.println(alamat, HEX);
      jumlah++;
    }
  }

  if (jumlah == 0) Serial.println("Tidak ada perangkat terdeteksi. Periksa kabel SDA/SCL.");
  delay(5000);
}

Unggah, lalu buka Serial Monitor pada baud rate 9600. Anda akan melihat keluaran semacam Perangkat ditemukan di alamat 0x27. Catat angka itu — itulah yang dipakai di sketch berikutnya.

Kalau hasilnya "Tidak ada perangkat terdeteksi", berarti masalahnya di kabel, bukan di alamat. Periksa SDA dan SCL apakah tertukar, dan pastikan GND Arduino benar-benar tersambung ke GND modul.

Sketch Pertama: Menampilkan Teks

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Ganti 0x27 dengan alamat hasil pemindaian tadi
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  lcd.init();        // inisialisasi LCD
  lcd.backlight();   // nyalakan lampu latar

  lcd.setCursor(0, 0);      // kolom 0, baris 0
  lcd.print("Halo Arduino");

  lcd.setCursor(0, 1);      // kolom 0, baris 1
  lcd.print("RTO-408");
}

void loop() {
  // dibiarkan kosong: teks statis tidak perlu diperbarui
}

Tiga baris yang perlu Anda pahami:

  • LiquidCrystal_I2C lcd(0x27, 16, 2) — angka 16 adalah jumlah kolom, angka 2 jumlah baris. Untuk LCD 20x4, ganti menjadi (0x27, 20, 4).
  • lcd.setCursor(kolom, baris)keduanya dihitung mulai dari 0. Jadi baris pertama adalah baris 0, dan karakter paling kiri adalah kolom 0.
  • lcd.backlight() — tanpa baris ini layar tetap bekerja, tapi gelap dan sulit dibaca.

Menampilkan Data yang Berubah

Di proyek nyata, isi layar biasanya berubah terus. Contoh berikut menampilkan penghitung detik sekaligus pembacaan pin analog:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);
unsigned long detik = 0;

void setup() {
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Nilai A0:");
}

void loop() {
  int nilai = analogRead(A0);

  lcd.setCursor(10, 0);
  lcd.print("    ");        // hapus sisa angka lama
  lcd.setCursor(10, 0);
  lcd.print(nilai);

  lcd.setCursor(0, 1);
  lcd.print("Waktu: ");
  lcd.print(detik);
  lcd.print(" s   ");

  detik++;
  delay(1000);
}

Perhatikan trik lcd.print(" ") sebelum mencetak angka baru. LCD tidak menghapus karakter lama secara otomatis. Kalau angka berubah dari 1023 menjadi 85, tanpa penghapusan itu layar akan menampilkan 8523 — sisa dua digit lama masih menempel. Ini bug klasik yang membingungkan kalau tidak tahu penyebabnya.

Alternatifnya Anda bisa memakai lcd.clear(), tapi perintah itu mengosongkan seluruh layar dan membuat tampilan berkedip kalau dipanggil tiap loop. Menimpa dengan spasi jauh lebih halus.

Membuat Karakter Sendiri

LCD ini menyediakan 8 slot karakter buatan sendiri, masing-masing berukuran 5x8 titik. Berguna untuk simbol derajat, ikon suhu, atau logo sederhana:

byte derajat[8] = {
  0b01100,
  0b10010,
  0b10010,
  0b01100,
  0b00000,
  0b00000,
  0b00000,
  0b00000
};

void setup() {
  lcd.init();
  lcd.backlight();
  lcd.createChar(0, derajat);   // simpan di slot 0

  lcd.setCursor(0, 0);
  lcd.print("Suhu: 28");
  lcd.write(byte(0));           // panggil karakter slot 0
  lcd.print("C");
}

Setiap baris 0b mewakili satu baris titik. Angka 1 berarti titik menyala, 0 berarti mati. Kalau Anda gambar delapan baris itu di kertas kotak-kotak, bentuknya akan langsung terlihat.

Mengatasi Masalah yang Sering Muncul

GejalaPenyebab dan Solusi
Lampu latar menyala, tapi layar kosong Kontras belum diatur. Putar sekrup biru di modul I2C perlahan pakai obeng minus sampai karakter muncul. Ini penyebab tersering.
Layar penuh kotak putih semua LCD dapat daya tapi tidak menerima data. Periksa alamat I2C, dan pastikan lcd.init() ada di dalam setup().
Layar gelap total Masalah daya. Cek VCC ke 5V dan GND. Jangan ambil 5V dari pin 3V3.
Karakter muncul tapi acak Kabel terlalu panjang atau sambungan longgar sehingga sinyal I2C terganggu. Pakai jumper yang lebih pendek.
Error no matching function for call to LiquidCrystal_I2C Library yang terpasang beda versi. Hapus library lain yang namanya mirip, sisakan satu saja.

Langkah Selanjutnya

Setelah LCD berfungsi, gabungkan dengan sensor supaya proyek Anda benar-benar mandiri tanpa laptop. Beberapa kombinasi yang bisa langsung dicoba:

  • Tampilkan hasil bacaan dari sensor suhu — ganti analogRead(A0) pada contoh di atas dengan pembacaan sensor.
  • Tampilkan jarak dari sensor ultrasonik untuk membuat alat ukur jarak digital.
  • Pantau kelembaban tanah lewat sensor kelembaban.

Belum punya perangkat kerasnya? Anda tetap bisa mencoba semua sketch di atas lewat simulasi Proteus sebelum membeli komponen.

Kalau ada langkah yang macet atau layar Anda menampilkan gejala di luar tabel di atas, tulis di kolom komentar — sebutkan board yang dipakai dan hasil pemindaian alamat I2C-nya supaya lebih mudah ditelusuri.

Iklan
0 Komentar

Berkomentarlah dengan sopan dan menggunakan bahasa yang semestinya.