Komponen · 5 mnt baca

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.

Layar LCD 16x2 dengan modul I2C
LCD 16x2 dengan modul I2C: berkat board kecil di belakangnya, layar ini cukup dihubungkan dengan 4 kabel.

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.

Modul adaptor LCD I2C PCF8574
Modul I2C berbasis PCF8574: trimpot biru mengatur kontras, dan jumper menyalakan atau mematikan lampu latar.

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

FiturNilai
Tampilan16 kolom × 2 baris karakter
Ukuran karakter5 × 8 piksel
Chip driverHD44780 (atau yang kompatibel)
Adaptor I2CPCF8574 / PCF8574A
Alamat bawaan0x27 (PCF8574) atau 0x3F (PCF8574A)
Catu daya5 V, sekitar 20–30 mA dengan lampu latar menyala
KoneksiGND, 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 LCDArduino Uno / NanoArduino MegaESP32Raspberry Pi Pico
GNDGNDGNDGNDGND
VCC5V5VVIN (5V)VBUS (5V)
SDAA420GPIO 21GP4
SCLA521GPIO 22GP5
Modul I2C menarik jalur SDA dan SCL ke VCC-nya sendiri, yaitu 5 V. Pin ESP32 dan Pico bekerja pada 3,3 V. Meskipun dalam praktiknya biasanya tetap berjalan, cara paling aman adalah memasang level shifter I2C dua arah di antaranya, atau melepas resistor pull-up di modul lalu menarik jalurnya ke 3,3 V.

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.

C++ (Arduino IDE)
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.

C++ (Arduino IDE)
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}
Kalau layar menyala tetapi tidak ada teks, atau baris atas hanya berisi kotak penuh, putar trimpot biru di belakang modul pelan-pelan dengan obeng kecil. Ini adalah pengaturan kontras, dan cara ini menyelesaikan sebagian besar masalah “layarku tidak berfungsi”.

Perintah LCD yang paling berguna

PerintahFungsinya
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.

C++ (Arduino IDE)
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.

C++ (Arduino IDE)
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 heart

LCD 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:

MicroPython
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.

Lihat semua proyek
Menggunakan Layar LCD dengan I2C
#32Pemula
Premium

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

4.8(53)
70
Menampilkan Pesan di Layar LCD 2x16
#29Mahir
Premium

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

4.6(37)
51
Animasi Teks Memantul di LCD
#30Mahir
Premium

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

4.5(29)
40
Layar LCD I2C ESP32 (16x2)
#119Menengah
Premium

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).

4.9(23)
40
Suhu dan Kelembapan dengan DHT11
#55Menengah

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

4.7(47)
73
Voltmeter Digital dengan Layar LCD
#56Menengah
Premium

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

4.5(27)
36
Kunci Sandi dengan Keypad 4x4 dan LCD
#64Mahir
Premium

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

4.8(59)
75
Game Lari LCD Arduino
#98Menengah
Premium

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.

4.6(32)
55