Breaking

Cara Menghubungkan LCD I2C 20x4 ke ESP8266 untuk Sistem Absensi



Pada artikel sebelumnya kita sudah membuat RTC DS3231 dengan ESP8266 untuk mendapatkan tanggal dan waktu.

Sekarang kita akan menambahkan LCD I2C 20x4 sebagai layar informasi pada mesin absensi.

LCD akan digunakan untuk memberikan informasi kepada pengguna, misalnya:

Ketika fingerprint berhasil:

Dengan adanya LCD, pengguna tidak perlu melihat Serial Monitor untuk mengetahui status absensinya.


Daftar Isi

1. Apa Itu LCD I2C?
2. Kenapa Menggunakan LCD 20x4?
3. Pin LCD I2C
4. Wiring LCD ke ESP8266
5. Alamat I2C LCD
6. Library LCD
7. Program Test LCD
8. Menampilkan Jam RTC
9. Menampilkan Status Fingerprint
10. Konsep Tampilan Mesin Absensi
11. Masalah yang Sering Terjadi
12. Kesimpulan
13. Artikel Selanjutnya

1. Apa Itu LCD I2C?

LCD 20x4 adalah layar yang mempunyai:

  • 20 karakter setiap baris;
  • 4 baris;
  • dapat digunakan untuk menampilkan teks dan angka.

Tanpa modul I2C, LCD membutuhkan cukup banyak pin mikrokontroler.

Dengan menggunakan I2C backpack, komunikasi LCD cukup menggunakan:

SDA

SCL

Sehingga pin ESP8266 menjadi lebih hemat.


2. Kenapa Menggunakan LCD 20x4?

Untuk mesin absensi, LCD 20x4 cukup nyaman karena dapat menampilkan informasi yang lebih banyak dibanding LCD 16x2.

Contohnya:

Setelah fingerprint ditemukan:


3. Pin LCD I2C

Modul LCD I2C biasanya mempunyai empat pin utama:

PinFungsi
GNDGround
VCCCatu daya
SDAData I2C
SCLClock I2C

Pada ESP8266 NodeMCU yang kita gunakan:

SDA → D2

SCL → D1

4. Wiring LCD I2C ke ESP8266

Gunakan koneksi berikut:

LCD I2C        ESP8266 NodeMCU
GND        GND
VCC        Sesuai spesifikasi modul
SDA        D2
SCL        D1

Diagram:

Karena DS3231 juga menggunakan I2C, LCD dan RTC sebenarnya dapat berbagi jalur SDA dan SCL.

Jadi nantinya:

Ini merupakan salah satu keuntungan menggunakan komunikasi I2C.


5. LCD dan RTC Bisa Berbagi I2C

Pada project kita nantinya terdapat:

Kedua perangkat dapat berada pada bus I2C yang sama selama alamat I2C-nya berbeda.

Umumnya:

LCD  → 0x27 atau 0x3F

RTC  → 0x68

Alamat tersebut perlu diverifikasi pada modul yang digunakan.


6. Library LCD

Untuk menggunakan LCD I2C kita dapat menggunakan library:

LiquidCrystal_I2C

Buka Arduino IDE:

Sketch → Include Library → Manage Libraries

Kemudian cari:

LiquidCrystal I2C

Buka Arduino IDE:

Sketch → Include Library → Manage Libraries

Kemudian cari:

LiquidCrystal I2C

Install library yang kompatibel dengan board dan contoh program yang digunakan.


7. Program Test LCD

Sebelum menggabungkan LCD dengan fingerprint dan RTC, kita lakukan pengujian LCD terlebih dahulu.

Gunakan program:

#include <Wire.h>

#include <LiquidCrystal_I2C.h>


// Alamat LCD dapat berbeda.

// 0x27 adalah salah satu alamat yang umum.

LiquidCrystal_I2C lcd(0x27, 20, 4);


void setup()

{

  Wire.begin(D2, D1);


  lcd.init();

  lcd.backlight();


  lcd.clear();


  lcd.setCursor(0, 0);

  lcd.print("SISTEM ABSENSI");


  lcd.setCursor(0, 1);

  lcd.print("AS608 + ESP8266");


  lcd.setCursor(0, 2);

  lcd.print("LCD I2C 20x4");


  lcd.setCursor(0, 3);

  lcd.print("TEST BERHASIL");

}


void loop()

{

}

Upload program ke ESP8266.

Jika LCD berhasil bekerja, tampilannya kira-kira:



8. Jika LCD Tidak Menampilkan Tulisan

Jangan langsung menyimpulkan LCD rusak.

Periksa terlebih dahulu alamat I2C.

Alamat yang umum digunakan misalnya:

0x27

atau:

0x3F

Jika program menggunakan:

LiquidCrystal_I2C lcd(0x27, 20, 4);

tetapi modul menggunakan alamat berbeda, LCD tidak akan berkomunikasi dengan benar.


9. I2C Scanner

Kita bisa menggunakan program I2C Scanner untuk mengetahui perangkat yang terhubung.

#include <Wire.h>


void setup()

{

  Serial.begin(115200);


  Wire.begin(D2, D1);


  Serial.println();

  Serial.println("I2C Scanner");

}


void loop()

{

  byte error;

  byte address;


  int jumlah = 0;


  for (address = 1; address < 127; address++)

  {

    Wire.beginTransmission(address);


    error = Wire.endTransmission();


    if (error == 0)

    {

      Serial.print("Perangkat ditemukan pada alamat 0x");


      if (address < 16)

        Serial.print("0");


      Serial.println(address, HEX);


      jumlah++;

    }

  }


  if (jumlah == 0)

  {

    Serial.println("Tidak ada perangkat I2C.");

  }


  Serial.println();


  delay(3000);

}

Buka Serial Monitor dengan:

115200

Misalnya hasilnya:

I2C Scanner

Perangkat ditemukan pada alamat 0x27

Perangkat ditemukan pada alamat 0x68

Berarti:

0x27 → LCD

0x68 → DS3231


10. Menampilkan Waktu RTC pada LCD

Sekarang kita gabungkan:

LCD + DS3231 + ESP8266

Program:

#include <Wire.h>

#include <RTClib.h>

#include <LiquidCrystal_I2C.h>


RTC_DS3231 rtc;


LiquidCrystal_I2C lcd(0x27, 20, 4);


void setup()

{

  Wire.begin(D2, D1);


  lcd.init();

  lcd.backlight();


  if (!rtc.begin())

  {

    lcd.clear();

    lcd.setCursor(0, 0);

    lcd.print("RTC ERROR");


    while (1)

    {

      delay(100);

    }

  }


  lcd.clear();


  lcd.setCursor(0, 0);

  lcd.print("SISTEM ABSENSI");


  delay(1000);

}


void loop()

{

  DateTime now = rtc.now();


  char tanggal[11];

  char jam[9];


  snprintf(

    tanggal,

    sizeof(tanggal),

    "%02d/%02d/%04d",

    now.day(),

    now.month(),

    now.year()

  );


  snprintf(

    jam,

    sizeof(jam),

    "%02d:%02d:%02d",

    now.hour(),

    now.minute(),

    now.second()

  );


  lcd.setCursor(0, 1);

  lcd.print("Tanggal: ");

  lcd.print(tanggal);

  lcd.print(" ");


  lcd.setCursor(0, 2);

  lcd.print("Jam    : ");

  lcd.print(jam);

  lcd.print(" ");


  lcd.setCursor(0, 3);

  lcd.print("Tempelkan jari...");


  delay(500);

}

Tampilannya:



11. Menampilkan Status Fingerprint

Sekarang kita sudah mempunyai tiga bagian:

AS608

 ↓

Fingerprint ID

DS3231

 ↓

Tanggal + Jam

LCD

 ↓

Tampilan informasi

Ketiganya akan digabungkan pada ESP8266.

Contoh ketika tidak ada fingerprint:

Ketika fingerprint ditemukan:

Jika fingerprint tidak dikenal:



12. Rancangan Tampilan LCD

Untuk mesin absensi kita, saya sarankan membuat beberapa mode tampilan.

Mode Standby


Mode Membaca


Mode Berhasil


Mode Gagal

Mode Offline

Nanti ketika sistem sudah menggunakan WiFi:

Ini akan sangat berguna ketika koneksi internet terputus.


13. LCD Tidak Perlu Menampilkan Semua Data

Kesalahan yang sering dilakukan saat membuat project adalah memasukkan terlalu banyak informasi ke LCD.

LCD sebaiknya digunakan untuk informasi yang benar-benar dibutuhkan pengguna.

Data lengkap tetap disimpan di server.

LCD cukup:

Nama

Status

Jam

Pesan

Sedangkan server menyimpan:

device_code

fingerprint_id

pegawai_id

tanggal

jam

status

IP address

timestamp

Dengan begitu tampilan mesin tetap sederhana.


14. Konsep Sistem Sekarang

Setelah Artikel #6, arsitektur hardware kita mulai terlihat seperti ini:


Gambar diagram blok ini nanti sangat bagus dijadikan gambar utama artikel.


15. Masalah yang Sering Terjadi

LCD menyala tetapi tulisan tidak terlihat

Coba putar trimpot kecil pada modul I2C LCD.

Trimpot tersebut digunakan untuk mengatur kontras.


LCD hanya kotak-kotak

Biasanya periksa:

  • alamat I2C;
  • wiring SDA/SCL;
  • inisialisasi library;
  • power supply.

Coba jalankan I2C Scanner.


LCD tidak terdeteksi

Periksa:

SDA → D2

SCL → D1

GND → GND

VCC → power sesuai modul


LCD dan RTC salah satu tidak bekerja

Karena keduanya menggunakan bus I2C, cek apakah alamat keduanya berbeda.

Contoh:

LCD   = 0x27

RTC   = 0x68

Jika alamat bertabrakan, konfigurasi perangkat perlu diperiksa.


16. Kesimpulan

Pada artikel ini kita sudah menambahkan LCD I2C 20x4 ke sistem absensi.

Sekarang sistem mempunyai:

AS608

 ↓

Membaca fingerprint


DS3231

 ↓

Membaca waktu


LCD

 ↓

Menampilkan informasi


ESP8266

 ↓

Mengatur semuanya

Tahap hardware kita semakin lengkap.




Tidak ada komentar:

Posting Komentar