Cara Memakai Layar LCD I2C (16x2) dengan Arduino, ESP32, dan Pico
Bagaimana cara menghubungkan LCD I2C 16x2 ke Arduino? Pengkabelan 4 kabel, mencari alamat I2C (0x27, 0x3F), library LiquidCrystal_I2C, pengaturan kontras, karakter kustom, dan teks berjalan.
LCD 16x2, yang menampilkan 2 baris berisi 16 karakter, adalah layar paling umum di dunia Arduino. Layar ini dipakai untuk menampilkan hasil pengukuran seperti suhu dan jarak, menu, jam, dan skor permainan. Layarnya sendiri punya 16 pin dan butuh minimal 6 pin digital; modul I2C kecil yang disolder di belakangnya mengurangi kebutuhan itu menjadi hanya 2 kabel data. Di tulisan ini kamu akan melihat langkah demi langkah cara menghubungkan LCD I2C, mencari alamatnya, dan menampilkan apa pun yang kamu mau di layarnya.

Bagaimana cara kerja layar LCD?
Layar ini bekerja dengan chip driver bernama HD44780. Setiap karakter digambar dalam kotak kecil berukuran 5x8 piksel, dan di dalam chip ada tabel karakter bawaan berisi huruf, angka, dan beberapa simbol. Arduino hanya mengirim perintah seperti “tulis huruf ini di posisi ini”; mengubah huruf itu menjadi piksel adalah tugas layar. Lampu latar LED membuat teks tetap terbaca di tempat gelap, sedangkan lapisan kristal cair membentuk teks dengan menggelapkan piksel.
Apa itu I2C dan kenapa membuatnya lebih mudah?
I2C adalah cara beberapa perangkat berkomunikasi lewat dua kabel: SDA membawa data dan SCL membawa sinyal clock. Setiap perangkat punya alamat sendiri, dan Arduino memanggil perangkat yang diinginkan lewat alamat itu. Modul LCD biasanya memakai alamat 0x27 atau 0x3F. Modul jam (RTC), layar OLED, dan sensor seperti BME280 bisa berbagi dua kabel yang sama; selama alamatnya berbeda, semuanya bisa bekerja bersama.

Chip PCF8574 pada modul mengubah perintah yang datang lewat I2C menjadi 8 sinyal paralel yang dibutuhkan layar. Kamu bisa memakai layar tanpa modul I2C, tetapi kamu butuh 6 pin, sebuah potensiometer, dan banyak kabel. Modul ini menghemat pin dan membuat rangkaianmu tetap rapi.
Spesifikasi
| Fitur | Nilai |
|---|---|
| Tampilan | 16 kolom × 2 baris karakter |
| Ukuran karakter | 5 × 8 piksel |
| Chip driver | HD44780 (atau yang kompatibel) |
| Adaptor I2C | PCF8574 / PCF8574A |
| Alamat bawaan | 0x27 (PCF8574) atau 0x3F (PCF8574A) |
| Catu daya | 5 V, sekitar 20–30 mA dengan lampu latar menyala |
| Koneksi | GND, VCC, SDA, SCL |
Pengkabelan LCD I2C: Arduino, ESP32, dan Pico
Pengkabelannya sama, empat kabel di setiap board; yang berbeda hanya pin tempat SDA dan SCL berada. Untuk melihat pin I2C board-mu, cek alat Pinout.
| Pin LCD | Arduino Uno / Nano | Arduino Mega | ESP32 | Raspberry Pi Pico |
|---|---|---|---|---|
| GND | GND | GND | GND | GND |
| VCC | 5V | 5V | VIN (5V) | VBUS (5V) |
| SDA | A4 | 20 | GPIO 21 | GP4 |
| SCL | A5 | 21 | GPIO 22 | GP5 |
Mencari alamat I2C: sketch scanner
Kalau kamu tidak yakin alamat layarmu, upload kode di bawah ini. Kode ini mencoba setiap alamat dari 1 sampai 126 dan menampilkan alamat setiap perangkat yang menjawab di Serial Monitor. Alamat ini akan kamu pakai ketika mengatur layar.
1#include <Wire.h>
2
3void setup() {
4 Wire.begin();
5 Serial.begin(9600);
6 Serial.println("I2C taranıyor / scanning...");
7 for (byte addr = 1; addr < 127; addr++) {
8 Wire.beginTransmission(addr);
9 if (Wire.endTransmission() == 0) { // cihaz cevap verdi / device answered
10 Serial.print("Bulundu / found: 0x");
11 Serial.println(addr, HEX);
12 }
13 }
14}
15
16void loop() {
17}Menginstal library dan menampilkan teks
Di Library Manager, cari LiquidCrystal I2C lalu instal library buatan Frank de Brabander. Kode di bawah menulis sapaan di baris pertama dan, di baris kedua, jumlah detik sejak Arduino mulai berjalan.
1#include <Wire.h>
2#include <LiquidCrystal_I2C.h>
3
4LiquidCrystal_I2C lcd(0x27, 16, 2); // adres, sütun, satır / address, columns, rows
5
6void setup() {
7 lcd.init();
8 lcd.backlight(); // arka ışığı aç / backlight on
9 lcd.setCursor(0, 0); // sütun 0, satır 0 / column 0, row 0
10 lcd.print("Merhaba Dunya!");
11}
12
13void loop() {
14 lcd.setCursor(0, 1); // ikinci satır / second row
15 lcd.print("Sure: ");
16 lcd.print(millis() / 1000); // saniye / seconds
17 lcd.print(" sn "); // eski rakamları sil / clear old digits
18 delay(200);
19}Perintah LCD yang paling berguna
| Perintah | Fungsinya |
|---|---|
| lcd.init() | Memulai layar; panggil sekali di setup(). |
| lcd.backlight() atau lcd.noBacklight() | Menyalakan atau mematikan lampu latar. |
| lcd.setCursor(kolom, baris) | Memilih posisi awal teks; hitungan dimulai dari 0. |
| lcd.print(nilai) | Menampilkan teks atau angka. |
| lcd.clear() | Menghapus seluruh layar dan mengembalikan kursor ke awal. |
| lcd.scrollDisplayLeft() | Menggeser seluruh tampilan satu karakter ke kiri. |
| lcd.blink() atau lcd.cursor() | Menampilkan kursor berkedip atau kursor garis bawah. |
| lcd.createChar(nomor, larik) | Menyimpan karakter kustom di slot 0–7. |
Teks berjalan
Untuk menampilkan teks yang lebih panjang dari 16 karakter, kamu bisa menggeser tampilan. Kode di bawah menulis teks lalu menggesernya ke kiri setiap 300 milidetik, sehingga pesan panjang mengalir di layar seperti papan reklame.
1#include <Wire.h>
2#include <LiquidCrystal_I2C.h>
3
4LiquidCrystal_I2C lcd(0x27, 16, 2);
5
6void setup() {
7 lcd.init();
8 lcd.backlight();
9 lcd.print("BlueGrays ile elektronik ogren"); // 16 karakterden uzun / longer than 16 chars
10}
11
12void loop() {
13 lcd.scrollDisplayLeft(); // bir adım sola / one step left
14 delay(300);
15}Karakter kustom dan huruf khusus
Tabel karakter HD44780 tidak punya huruf beraksen seperti ş, ğ, ı, ö, ü, ç (atau é dan ñ); kalau kamu mencoba menampilkannya, yang muncul adalah simbol yang tidak bermakna. Solusinya adalah membuat sampai 8 karakter kustom berukuran 5x8 piksel. Setiap baris ditulis sebagai satu byte, dan bit yang bernilai 1 adalah piksel yang menyala. Contoh di bawah menggambar hati; dengan cara yang sama kamu bisa menggambar huruf beraksen apa pun.
1byte heart[8] = {
2 0b00000,
3 0b01010,
4 0b11111,
5 0b11111,
6 0b01110,
7 0b00100,
8 0b00000,
9 0b00000
10};
11
12// setup() içinde / inside setup()
13lcd.createChar(0, heart); // 0. yuvaya kaydet / store in slot 0
14lcd.setCursor(15, 0);
15lcd.write(byte(0)); // kalbi göster / show the heartLCD I2C dengan ESP32 dan Raspberry Pi Pico
Di ESP32, kode Arduino dan library yang sama tetap berfungsi; Wire.begin() secara bawaan memakai GPIO 21 (SDA) dan GPIO 22 (SCL). Kalau kamu ingin pin lain, tulis Wire.begin(SDA, SCL). Di Raspberry Pi Pico dengan MicroPython, salin dua file kecil bernama lcd_api.py dan pico_i2c_lcd.py ke Pico, lalu pakai seperti ini:
1from machine import I2C, Pin
2from pico_i2c_lcd import I2cLcd # Pico'ya kopyalanan dosya / file copied to the Pico
3
4i2c = I2C(0, sda=Pin(4), scl=Pin(5), freq=400000)
5addr = i2c.scan()[0] # ilk bulunan adres / first found address
6lcd = I2cLcd(i2c, addr, 2, 16) # 2 satır, 16 sütun / 2 rows, 16 columns
7
8lcd.putstr("Merhaba Pico!")
9lcd.move_to(0, 1) # sütun 0, satır 1 / column 0, row 1
10lcd.putstr("BlueGrays")Ide proyek dengan LCD I2C
- Termometer digital: tampilkan suhu dan kelembapan di layar; untuk bagian sensornya, lihat Sensor Suhu dan Kelembapan DHT11.
- Penampil jarak: tampilkan jarak yang diukur dengan HC-SR04 dalam sentimeter; detailnya ada di Sensor Jarak HC-SR04.
- Voltmeter digital: tampilkan tegangan yang kamu baca dari pin analog.
- Kunci berkode: tampilkan kode yang diketik di keypad sebagai tanda bintang.
- Sistem menu: berpindah antarpilihan di layar dengan potensiometer atau dua tombol.
- Game mini: buat karakter pelari yang digambar dengan karakter kustom menghindari rintangan.
Kesalahan umum dan cara mengatasinya
- Layar menyala tapi tidak ada teks: kontras belum diatur; putar trimpot.
- Kotak penuh di baris atas: layar mendapat daya tetapi belum dimulai; mungkin alamatnya salah, SDA dan SCL tertukar, atau lcd.init() tidak dipanggil.
- Alamat salah: kode menulis 0x27 padahal layarnya 0x3F; cari alamat sebenarnya dengan sketch scanner.
- Angka lama tertinggal: angka yang turun dari 100 ke 99 akan tampil sebagai 990; tulis beberapa spasi setelah angka. lcd.clear() juga bisa, tetapi lambat, dan layar akan berkedip kalau sering dipanggil di loop.
- Huruf beraksen rusak: huruf itu tidak ada di tabel layar; buat karakter kustom atau hindari huruf tersebut.
- Teks rusak secara acak: kabel yang panjang dan longgar atau komponen berisik seperti motor bisa mengganggu bus I2C; buat kabel tetap pendek dan beri daya motor dari catu daya terpisah.
Memasangkan layar dengan sensor adalah cara tercepat membuat proyek nyata pertamamu. Di aplikasi BlueGrays kamu akan menemukan puluhan proyek LCD I2C lengkap dengan skema rangkaian dan kode siap pakai, dan untuk mengubah nilai dengan kenop, Apa Itu Potensiometer? akan sangat membantu.
Pertanyaan umum
Kenapa LCD-ku hanya menampilkan kotak?
Kotak penuh di baris atas berarti layar mendapat daya tetapi belum dimulai. Mungkin alamatnya salah, SDA dan SCL tertukar, atau kontrasnya terlalu tinggi. Pastikan dulu alamatnya dengan sketch scanner I2C, lalu atur trimpot.
Alamat LCD I2C-ku 0x27 atau 0x3F?
Modul dengan chip PCF8574 biasanya memakai 0x27, dan yang memakai PCF8574A memakai 0x3F. Cara termudah untuk mengetahuinya adalah sketch scanner I2C; setelah itu cukup ubah kodenya menjadi LiquidCrystal_I2C lcd(0x3F, 16, 2).
Bisakah aku menghubungkan dua LCD ke satu Arduino?
Bisa. Menyambungkan pad solder A0, A1, dan A2 di modul akan mengubah alamatnya, sehingga sampai 8 LCD bisa berbagi dua kabel yang sama. Di kode, kamu membuat objek terpisah untuk setiap layar dengan alamatnya masing-masing.
Apakah kode yang sama berfungsi untuk LCD 20x4?
Ya. Cukup ubah deklarasinya menjadi LiquidCrystal_I2C lcd(0x27, 20, 4); baris lalu bernomor 0 sampai 3 dan kolom 0 sampai 19.
Bagaimana cara menampilkan huruf beraksen atau karakter khusus di LCD?
Tabel bawaan layar tidak berisi huruf seperti é, ñ, ş, atau ğ. Gambar setiap huruf sebagai karakter kustom 5x8 piksel dengan lcd.createChar() lalu tampilkan dengan lcd.write(). Ingat, kamu hanya bisa membuat maksimal 8 karakter kustom sekaligus.
Sebaiknya aku pakai LCD atau layar OLED?
LCD murah, tetap terbaca di bawah sinar matahari, dan ideal untuk teks dan angka. OLED lebih kecil, kontrasnya tinggi, dan bisa menggambar grafik serta ikon, tetapi bisa mengalami burn-in kalau menampilkan gambar yang sama terlalu lama. Pilih LCD untuk teks dan OLED untuk grafik.
Proyek untuk dibuat setelah membaca ini
Lihat semua proyek
Menggunakan Layar LCD dengan I2C
Beri Arduino-mu layar sendiri dan buat ia menulis pesan pertamanya. Layar LCD dua baris tersambung hanya dengan beberapa kabel; sapaan muncul di baris atas, lalu pesan kedua di baris bawah, layar dibe

Menampilkan Pesan di Layar LCD 2x16
Langkah pertamamu menulis teks di layar. Layar LCD dua baris pertama-tama menampilkan pesan tunggu, lalu menulis sapaan di baris atas dan mengetik sebuah kata huruf demi huruf di baris bawah seperti m

Animasi Teks Memantul di LCD
Di baris atas layar LCD, kata BLUEGRAYS meluncur dari satu tepi ke tepi lainnya lalu memantul kembali seperti bola yang mengenai dinding, terus tanpa henti. Yang kamu butuhkan hanya Arduino, layar LCD

Layar LCD I2C ESP32 (16x2)
Di proyek ini, kita menampilkan teks dengan menyambungkan layar LCD karakter 16x2 ke ESP32 lewat protokol I2C. Berkat I2C, kita bisa mengendalikan layar hanya dengan dua pin data (SDA dan SCL), sehingga tidak perlu memboroskan 6+ pin seperti pada sambungan paralel klasik. Kode mencetak pesan tetap di baris pertama dan penghitung yang naik setiap detik di baris kedua. Selain itu, kita menjalankan pemindai I2C di awal untuk mencetak alamat layar ke Serial Monitor (biasanya 0x27).

Suhu dan Kelembapan dengan DHT11
Seberapa hangat kamarmu, dan apakah udaranya lembap atau kering? Sensor DHT11 mengukur suhu dan kelembapan, dan Arduino menulis nilainya di layar LCD dua baris, diperbarui setiap beberapa detik. Jika

Voltmeter Digital dengan Layar LCD
Cari tahu berapa tegangan yang diberikan baterai atau adaptor daya dengan alat ukur buatanmu sendiri. Pembagi dari dua resistor menurunkan tegangan tinggi ke tingkat yang bisa dibaca board, dan Arduin

Kunci Sandi dengan Keypad 4x4 dan LCD
Kunci pintu elektronik kecil yang menahan siapa pun yang tidak tahu kodenya. Kamu menekan tombol pagar lalu mengetik kodenya di keypad; jika benar, layar menulis akses diberikan, LED hijau menyala, da

Game Lari LCD Arduino
Game lari tanpa akhir yang bergulir ke samping di layar LCD karakter 16x2. Sang jagoan berlari otomatis, dan pemain melompati rintangan dengan menekan tombol. Rintangan acak muncul di baris atas dan bawah. Buzzer pasif memainkan melodi pembuka, suara lompat, suara perayaan 50 poin, dan melodi akhir game. Layar pembuka "BlueGrays - Arduino Projects" tampil ketika mulai. Skor langsung diperbarui di pojok kanan atas layar.
Artikel lainnya
Aplikasi BlueGrays
Rakit rangkaian ini langkah demi langkah di ponselmu
Skema pengkabelan, kode, dan daftar komponen dalam satu layar. 200+ proyek Arduino, ESP32, dan Pico siap dibuat.
Pindai dengan ponselmu
Arahkan kamera ke kode ini dan toko aplikasi di ponselmu akan terbuka.
atau buka toko aplikasi

