Penggunaan Display LCD bertujuan untuk menampilkan sesuatu yang ingin disampaikan kepada user pengguna. Dengan ukuran yang bermacam-macam, kita dapat memilih LCD sesuai yang kita butuhkan. Beberapa hal yang perlu dipertimbangkan adalah ukuran casing yang kita gunakan dalam project board, panjang karakter yang akan ditampilkan, ukuran font, dan lain sebagainya. Dalam posting ini saya akan mencoba mengaplikasikan Graphic LCD 128x64 pada ESP 32. Modul LCD ini memiliki koneksi parallel 4bit / 8bit atau serial SPI (hanya perlu 3 pin).
1. Wiring
Pin I/O yang diperlukan adalah 2 pin SPI (MOSI(23), SCK(18) ), 2 pin digital, dan pastinya pin power baik 3.3V maupun 5V (VIN).
![]() |
Wiring Diagram |
2. Library
Untuk saat ini, baru library U8g2lib yang saya coba untuk ESP32 ini dan hasilnya program dapat bekerja dengan baik. Sebelum memulai silahkan tambahkan library tersebut terlebih dahulu.
3. Program
Just say "hello" untuk program ujicoba pada LCD ST7920 ini,
Just say "hello" untuk program ujicoba pada LCD ST7920 ini,
#include <Arduino.h> #include <U8g2lib.h> #ifdef U8X8_HAVE_HW_SPI #include <SPI.h> #endif #ifdef U8X8_HAVE_HW_I2C #include <Wire.h> #endif U8G2_ST7920_128X64_1_HW_SPI u8g2(U8G2_R0, /* CS=*/ 16, /* reset=*/ 17); //ESP32, E=clock=18, RW=data=23, RS=CS void setup(void) { u8g2.begin(); } void loop(void) { u8g2.setFont(u8g2_font_ncenB14_tr); u8g2.firstPage(); do { u8g2.setCursor(0, 20); u8g2.print(F("Hello World!")); } while ( u8g2.nextPage() ); delay(1000); }
Contoh lainnya adalah program counting. Dapat dicoba dengan code dibawah ini
#include <Arduino.h> #include <U8g2lib.h> #ifdef U8X8_HAVE_HW_SPI #include <SPI.h> #endif #ifdef U8X8_HAVE_HW_I2C #include <Wire.h> #endif U8G2_ST7920_128X64_1_HW_SPI u8g2(U8G2_R0, /* CS=*/ 16, /* reset=*/ 17); //E=clock=18, RW=data=23, RS=CS void setup(void) { u8g2.begin(); } uint8_t m = 24; void loop(void) { char m_str[3]; strcpy(m_str, u8x8_u8toa(m, 2)); /* convert m to a string with two digits */ u8g2.firstPage(); do { u8g2.setFont(u8g2_font_logisoso62_tn); u8g2.drawStr(0,63,"8"); u8g2.drawStr(33,63,":"); u8g2.drawStr(50,63,m_str); } while ( u8g2.nextPage() ); delay(1000); m++; if ( m == 60 ) m = 0; }
Implementasi
Sebagai contoh penggunaan LCD ini, berikut saya tambahkan program DHT 22 untuk pengukuran suhu dan kelembaban. REQUIRES the following Arduino libraries (silahkan install terlebihdahulu library berikut):
- DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
- Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor
#include <Arduino.h> #include <U8g2lib.h> #include "DHT.h" #ifdef U8X8_HAVE_HW_SPI #include <SPI.h> #endif #ifdef U8X8_HAVE_HW_I2C #include <Wire.h> #endif #define DHTPIN 21 //pin digital 21 #define DHTTYPE DHT22 char t_string[5]; char h_string[5]; float t_float; float h_float; U8G2_ST7920_128X64_1_HW_SPI u8g2(U8G2_R0, /* CS=*/ 16, /* reset=*/ 17); //ESP32, E=clock=18, RW=data=23, RS=CS DHT dht(DHTPIN, DHTTYPE); void setup() { u8g2.begin(); dht.begin(); u8g2.setColorIndex(1); } void loop() { u8g2.firstPage(); do { draw_data(); } while ( u8g2.nextPage() ); delay(1000); } void draw_data(){ h_float = dht.readHumidity(); t_float = dht.readTemperature(); u8g2.clearBuffer(); u8g2.setFontMode(1); u8g2.setFont(u8g2_font_logisoso20_tr); u8g2.drawFrame(0,0,128,31); // upper frame u8g2.drawFrame(0,33,128,31); // lower frame // convert floats into char u8g strings u8g2.drawStr( 15, 27, "T: "); dtostrf(t_float, 3, 1, t_string); u8g2.drawStr(40,27, t_string); u8g2.drawStr(100,27, "C"); u8g2.drawStr(15,60, "H: "); dtostrf(h_float, 3, 1, h_string); u8g2.drawStr(40,60, h_string); u8g2.drawStr(100,60, "%"); }
5 Komentar
halo ka, itu untuk hasil 3 digit nya dari mana ya, karena saya keluar nya 4 digit anka
BalasHapusdtostrf(float_value, min_width, num_digits_after_decimal, where_to_store_string)
Hapusdari sini ya gan ==> dtostrf(t_float, 3, 1, t_string); nah 1 maksudnya 1 digit setelah decimal
kok pinnya cuma 2 ya, yg lainnya dimatikan, cs=16, rst=17,
BalasHapussoalnya saya coba gak jalan
o ternyata harus sesuai ya , saya pakai pin lain , maaf , trims nih , sangat membantu arahannya
BalasHapusok gan .. trims udah konfirmasi .. 2 pin SPI (MOSI, SCK) harus disesuaikan dengan pin MOSI, SCK pada hardware mikrokontroller.. untuk esp32 terdapat 2 port spi yaitu VSPI (MOSI = 23, SCK=18) dan HSPI (MOSI = 13, SCK=14).. namun dibalik itu semua kita juga bisa melakukan custom pin spi dengan library
Hapus