real time tanggal dan jam di lcd 20x4

Melanjutkan tutorial sebelumnya, kali ini saya akan mengimplementasikan NTP Client untuk ditampilkan ke layar LCD 20x4 alias memindahkan output Serial.print dari serial monitor arduino ke layar LCD 20x4. Tapi sebelum saya lanjutkan, bagi teman-teman yang belum membaca tutorial saya sebelumnya yaitu "Real Time Tanggal dan Jam Menggunakan Librari NTPClient Arduino", saya sangat menyarankan untuk membacanya terlebih dahulu, karena di dalamnya terdapat cara men-setting board Wemos D1 R1 dan memodifikasi library NTP Client Arduino yang akan terus kita pakai sampai tutorial-turorial selanjutnya.

Hardware atau komponen-kompenen yang kita perlukan untuk mempraktikan tutorial ini antara lain:

1. Board Wemos D1 R1

board wemos d1 r1

2. Kabel data micro USB

kabel data micro usb

3. LCD 20x4

lcd 20x4

4. I2C LCD

i2c lcd

5. Breadboard

breadboard

6. Kabel Jumper

kabel jumper

Rangkai komponen-komponen di atas seperti wiring diagram berikut:

wiring diagram wemos d1 r1 i2c lcd 20x4

Penjelasan wiring diagram:

  1. Tancapkan 16 pin dari LCD 20x4 dan 16 pin I2C LCD ke dalam breadboard dengan posisi sejajar.
  2. Hubungkan pin VCC I2C ke pin 5V Wemos D1 R1
  3. Hubungkan pin GND I2C ke pin Gnd Wemos D1 R1
  4. Hubungkan pin SDA I2C ke pin D14/SDA Wemos D1 R1
  5. Hubungkan pin SCL I2C ke pin D15/SCL Wemos D1 R1
I2C Wemos
VCC 5V
GND GND
SDA D14/SDA
SCL D15/SCL

Buka Arduino IDE kemudian copy paste kode di bawah ini:

#include <NTPClient.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

#include <Wire.h>  // I2C library already built in Arduino IDE
#include <LiquidCrystal_I2C.h> //library via Include Library > Manage Library > 

LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7); 
//0x27 is i2c address, EN,RW ,RS ,D4,D5,D6,D7 

const char *ssid     = "YOUR_WIFI_NETWORK_NAME";   
const char *password = "YOUR_WIFI_PASSWORD";

const long utcOffsetInSeconds = 3600;

String daysOfTheWeek[7] = {"Ahad  ", "Senin ", "Selasa", "Rabu  ", "Kamis ", "Jumat ", "Sabtu "};
String months[12]={"Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Agu", "Sep", "Okt", "Nov", "Des"};

boolean getCurrentYear_TF = false;
long curYear = 21;

// Define NTP Client to get time
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "id.pool.ntp.org", utcOffsetInSeconds);

void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_OFF);        //Prevents reconnection issue (taking too long to connect)
  delay(1000);
  WiFi.mode(WIFI_STA);        //Only Station No AP, This line hides the viewing of ESP as wifi hotspot

  WiFi.begin(ssid, password);     //Connect to your WiFi router
  Serial.println("");

  Serial.print("Connecting");
  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  //If connection successful show IP address in serial monitor
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());  //IP address assigned to your ESP

  timeClient.begin();
  timeClient.setTimeOffset(25200);

  lcd.begin(20,4);   // initializing the LCD 16 x 2
  lcd.setBacklightPin(3,POSITIVE); // Enable or Turn On the backlight 
  lcd.setBacklight(LOW);

  lcd.home();
  lcd.print("Assalamu'alaikum"); // Start Print text to Line 1
  lcd.setCursor(0, 1);      
  lcd.print("--------------------"); // Start Print Test to Line 2

  delay(1000);
}

void loop() {
  timeClient.update();
  
  if (!getCurrentYear_TF) {
    lcd.clear();
    
    curYear = timeClient.getYear();

    lcd.setCursor(0, 0);
    lcd.print(daysOfTheWeek[timeClient.getDay()]);
  
    if (int(timeClient.getDate()) > 9) {
      lcd.setCursor(7, 0);
      lcd.print(timeClient.getDate());
    } else {
      lcd.setCursor(7, 0);
      lcd.print("0");
      lcd.setCursor(8, 0);
      lcd.print(timeClient.getDate());
    }
  
    lcd.setCursor(10, 0);
    lcd.print(months[int(timeClient.getMonth()) - 1]);
  
    lcd.setCursor(14, 0);
    lcd.print("20");
  
    lcd.setCursor(16, 0);
    lcd.print(curYear);

    getCurrentYear_TF = true;
  } else {

    if (int(timeClient.getHours()) > 9) {
      lcd.setCursor(12, 3);
      lcd.print(timeClient.getHours());
    } else {
      lcd.setCursor(12, 3);
      lcd.print("0");
      lcd.setCursor(13, 3);
      lcd.print(timeClient.getHours());
    }

    lcd.setCursor(14, 3);
    lcd.print(":");

    if (int(timeClient.getMinutes()) > 9) {
      lcd.setCursor(15, 3);
      lcd.print(timeClient.getMinutes());
    } else {
      lcd.setCursor(15, 3);
      lcd.print("0");
      lcd.setCursor(16, 3);
      lcd.print(timeClient.getMinutes());
    }

    lcd.setCursor(17, 3);
    lcd.print(":");

    if (int(timeClient.getSeconds()) > 9) {
      lcd.setCursor(18, 3);
      lcd.print(timeClient.getSeconds());
    } else {
      lcd.setCursor(18, 3);
      lcd.print("0");
      lcd.setCursor(19, 3);
      lcd.print(timeClient.getSeconds());
    }
  }

  delay(1000);
}

            

Klik Upload dan tunggu sampai Done Uploading.

upload sketch

Jika upload berhasil maka layar LCD 20x4 akan menampilkan informasi tanggal dan jam seperti berikut:

upload sketch