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
| Komponen | Jumlah | Catatan |
|---|---|---|
| Arduino Uno / Nano / Mega | 1 | Board apa pun bisa, pin I2C-nya saja yang berbeda |
| LCD 16x2 + modul I2C | 1 | Pastikan sudah ada modul hitam di belakangnya |
| Kabel jumper male-to-female | 4 | Untuk VCC, GND, SDA, SCL |
| Kabel USB | 1 | Sekaligus 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:
Yang perlu diingat: pin SDA dan SCL berbeda di tiap board. Ini sumber kebingungan nomor satu. Berikut acuannya:
| Board | SDA | SCL |
|---|---|---|
| Arduino Uno / Nano | A4 | A5 |
| Arduino Mega 2560 | Pin 20 | Pin 21 |
| Arduino Leonardo | Pin 2 | Pin 3 |
| NodeMCU ESP8266 | D2 (GPIO4) | D1 (GPIO5) |
| ESP32 | GPIO21 | GPIO22 |
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:
- Buka menu Sketch → Include Library → Manage Libraries (atau tekan Ctrl + Shift + I).
- Ketik
LiquidCrystal I2Cdi kolom pencarian. - 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
| Gejala | Penyebab 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.
0 Komentar
Berkomentarlah dengan sopan dan menggunakan bahasa yang semestinya.