#5 ESP32 Tutorial: LCD Display [Sistem Embedded]

Erensi Ratu Chelsia
5 min readMar 12, 2023

--

Kembali lagi ke project selanjutnya yaitu project ke-5 dari mata kuliah Sistem Embedded ini!!

Pada project 5 kali ini, akan menggunakan LCD untuk menampilkan sesuatu. Nah, penasaran kann.. sesuatu yang bisa ditampilin itu apa ajaaa

Oke, sebelum mulai ke percobaan, kita liat dulu nih komponen yang kita butuhkan itu apa saja.

~Komponen

komponen yang dibutuhkan
  1. ESP32
  2. Bread board
  3. Kabel USB
  4. LCD
  5. Kabel female to female dan male to female

~Rangkaian

ilustrasi rangkaian dari randomnerd
Tampak depan dan Tampak belakang dari rangkaianku

Sebelumnya aku tidak menyambungkan LED 5V dengan LED 5 ground. Sehingga tulisan yang muncul itu kurang terlihat. Lalu, ketika LED 5V dan LED 5 ground disambungkan (seperti tampak belakang pada rangkaianku, yang aku sambungkan dengan kabel berwarna merah) tulisan akan terlihat jelas.

~Langkah pengerjaan

Melakukan install library ‘LiquidCrystal_I2C’

Disini menggunakan library by Marco Schwartz. Cara menginstallnya yaitu sebagai berikut :

  1. Install LiquidCrystal_I2C library klik disini.
  2. Unzip folder tersebut dan rename menjadi LiquidCrystal_I2C.
  3. Pindahkan folder tersebut ke libraries pada Arduino IDE installation.
  4. Lalu buka kembali Arduino IDE.

Dapatkan LCD Address

Untuk bisa menampilkan teks pada LCD, kita perlu mencari address LCD terlebih dahulu. Berikut kode program yang digunakan :

/*********
Rui Santos
Complete project details at https://randomnerdtutorials.com
*********/

#include <Wire.h>

void setup() {
Wire.begin();
Serial.begin(115200);
Serial.println("\nI2C Scanner");
}

void loop() {
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ ) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("I2C device found at address 0x");
if (address<16) {
Serial.print("0");
}
Serial.println(address,HEX);
nDevices++;
}
else if (error==4) {
Serial.print("Unknow error at address 0x");
if (address<16) {
Serial.print("0");
}
Serial.println(address,HEX);
}
}
if (nDevices == 0) {
Serial.println("No I2C devices found\n");
}
else {
Serial.println("done\n");
}
delay(5000);
}

Lalu lihat pada serial monitor addressnya. Address yang muncul pada serial monitorku yaitu 0x27.

Menampilkan scrolling text di LCD

Disini aku akan coba untuk menampilkan teks berjalan pada LCD. Berikut kode program yang aku gunakan :

#include <LiquidCrystal_I2C.h>

// set the LCD number of columns and rows
int lcdColumns = 16;
int lcdRows = 2;

// set LCD address, number of columns and rows
// if you don't know your display address, run an I2C scanner sketch
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);

String messageStatic = "Hello Guys!";
String messageToScroll = "It's My #5 project with this LCD <3";

// Function to scroll text
// The function acepts the following arguments:
// row: row number where the text will be displayed
// message: message to scroll
// delayTime: delay between each character shifting
// lcdColumns: number of columns of your LCD
void scrollText(int row, String message, int delayTime, int lcdColumns) {
for (int i=0; i < lcdColumns; i++) {
message = " " + message;
}
message = message + " ";
for (int pos = 0; pos < message.length(); pos++) {
lcd.setCursor(0, row);
lcd.print(message.substring(pos, pos + lcdColumns));
delay(delayTime);
}
}

void setup(){
// initialize LCD
lcd.init();
// turn on LCD backlight
lcd.backlight();
}

void loop(){
// set cursor to first column, first row
lcd.setCursor(0, 0);
// print static message
lcd.print(messageStatic);
// print scrolling message
scrollText(1, messageToScroll, 250, lcdColumns);
}

Menampilkan current datetime di LCD

Disini aku akan coba untuk menampilkan waktu berupa tanggal, jam, menit, dan detik di LCD. Berikut kode program yang digunakan :

#include <WiFi.h>
#include "time.h"
#include <LiquidCrystal_I2C.h>

// set the LCD number of columns and rows
int lcdColumns = 16;
int lcdRows = 2;
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);

const char* ssid = "<uname_wifimu>";
const char* password = "<password_wifimu>";

const char* ntpServer = "asia.pool.ntp.org";
const long gmtOffset_sec = 25200;
const int daylightOffset_sec = 60000;

void printLocalTime()
{
struct tm timeinfo;
if(!getLocalTime(&timeinfo)){
Serial.println("Failed to obtain time");
return;
}
Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");

lcd.setCursor(0,0);
lcd.print(&timeinfo,"%b %d %Y");
lcd.setCursor(0,1);
lcd.print(&timeinfo,"%H:%M:%S");
}

void setup()
{
Serial.begin(115200);

//connect to WiFi
Serial.printf("Connecting to %s ", ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" CONNECTED");

//init and get the time
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
lcd.init();
lcd.backlight();
printLocalTime();

//disconnect WiFi as it's no longer needed
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
}

void loop()
{
delay(1000);
printLocalTime();
}

~Hasil

menampilkan scrolling text

Disini baris yang kedua yang aku buat jadi scrolling text. Sehingga teks yang baris pertama merupakan teks statik dan teks baris kedua yang merupakan teks yang berjalan.

menampilkan current datetime

Disini karena ditampilkan curent datetime, maka pada bagian jamnya akan selalu berganti pada detiknya.

ESP32 PWM with Arduino IDE

Disini akan dibuat rangkaian sederhana yang meredupkan LED menggunakan pengontrol PWM LED dari ESP32.

~Rangkaian

rangkaian yang saya gunakan

Disini saya hanya memakai GPIO 5 dan GPIO 16.

~Kode Program

// the number of the LED pin
const int ledPin = 16; // 16 corresponds to GPIO16
const int ledPin2 = 5; // 5 corresponds to GPIO5

// setting PWM properties
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;

void setup(){
// configure LED PWM functionalitites
ledcSetup(ledChannel, freq, resolution);

// attach the channel to the GPIO to be controlled
ledcAttachPin(ledPin, ledChannel);
ledcAttachPin(ledPin2, ledChannel);
}

void loop(){
// increase the LED brightness
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// changing the LED brightness with PWM
ledcWrite(ledChannel, dutyCycle);
delay(15);
}

// decrease the LED brightness
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
// changing the LED brightness with PWM
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
}

~Hasil

Hasil percobaan PWM

Karena kita sudah melakukan percobaan berupa display pada LCD lalu PWM, maka berakhir pula project 5 kali ini :3

~Sekian dan Terimakasih

--

--