By | 10/03/2021
Tutorial-ESP32-LCD-TFT-1.8

Tutorial panduan mengakses LCD TFT 1.8 dengan modul ESP32 yang sudah dilengkapi wifi dan bluetooth. LCD TFT 1.8 belum memliki fitur layar sentuh atau touchscreen, tapi lcd TFT ini sudah sangat modern yang dapat menampilkan warna RGB. Artikel ini akan menjelaskan secara lengkap bagaimana cara mengakses antarmuka esp32 dengan LCD TFT 1.8 ST7735.

Tutorial ESP32 Mengakses LCD TFT 1.8 ST7735
Tutorial ESP32 Mengakses LCD TFT 1.8 ST7735

LCD TFT 1.8 harganya sangat terjangkau sekitar 70 ribu rupiah an yang bisa anda beli di marketplace terpercaya, biasanya saya membeli di tokopedia.com

ESP32 yang saya gunakan adalah tipe Wemos D1 Mini ESP32 karena bentuk fisiknya lebih kecil dibanding yang tipe NodeMCU atau TTGO. Jika kalian ingin menggunakan ESP32 jenis lain untuk mengakses LCD TFT 1.8 juga sangat bisa karena memang pinout ESP32 sama saja.

Gambar LCD TFT 1.8 dan ESP32
Gambar LCD TFT 1.8 dan ESP32

Langkah Mengakses LCD TFT 1.8 dengan ESP32

Untuk memulai menyalakan LCD TFT 1.8 kita perlu memiliki modulnya terlebih dahulu karena jika tidak punya akan sulit mengaplikasikanya

Untuk software simulasi juga saya belum menemukan software simulasi arduino yang sudah dilengkapi dengan library LCD TFT 1.8 dan ESP32

Setelah memiliki modul yang dibutuhkan kemudian anda bisa merangkainya dan membuat koding dengan arduino IDE untuk ESP32

Keterangan Pin LCD TFT 1.8 dan juga ESP32

PIN ESP32PIN LCD TFT 1.8Keterangan
18SCKBisa diganti ke pin lain tapi nanti lebih lambat prosesnya
23SDA / MOSIBisa diganti ke pin lain tapi nanti lebih lambat prosesnya
3.3VLEDUntuk menyalakan lampu dilatar belakang
VCC5VPower
GNDGNDPower
14ResetBisa diganti pin GPIO lain
33CSBisa diganti pin GPIO lain
26DC/A0Bisa diganti pin GPIO lain
Tabel Keterngan Pin LCD TFT dan GPIO ESP32
Rangkaian Pinout LCD TFT 1.8 dan ESP32
Rangkaian Pinout LCD TFT 1.8 dan ESP32

Tutorial ESP32 dan LCD TFT 1.8

  1. Rangkai ESP32 Wemos atau NodeMCU dengan LCD TFT 1.8 seperti pada gambar diatas
  2. Download library Adafruit_GFX.h
  3. Download library Adafruit_ST7735.h
  4. Perhatikan pinout yang ada di tabel pin LCD TFT dan fungsinya
  5. Buka program Example dan sesuaikan konfigurasi pin
  6. Atau Copy Paste Program dibawah ini
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#include <SPI.h>


// For the breakout, you can use any 2 or 3 pins
// These pins will also work for the 1.8" TFT shield
#define TFT_CS     33
#define TFT_RST    14  // you can also connect this to the Arduino reset
                       // in which case, set this #define pin to -1!
#define TFT_DC     26

// Option 1 (recommended): must use the hardware SPI pins
// (for UNO thats sclk = 13 and sid = 11) and pin 10 must be
// an output. This is much faster - also required if you want
// to use the microSD card (see the image drawing example)

// For 1.44" and 1.8" TFT with ST7735 use
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS,  TFT_DC, TFT_RST);

// For 1.54" TFT with ST7789
//Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS,  TFT_DC, TFT_RST);

// Option 2: use any pins but a little slower!
//#define TFT_SCLK 13   // set these to be whatever pins you like!
//#define TFT_MOSI 11   // set these to be whatever pins you like!
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);


float p = 3.1415926;

void setup(void) {
  Serial.begin(9600);
  Serial.print("Hello! ST77xx TFT Test");

  // Use this initializer if you're using a 1.8" TFT
  tft.initR(INITR_BLACKTAB);   // initialize a ST7735S chip, black tab

  // Use this initializer (uncomment) if you're using a 1.44" TFT
  //tft.initR(INITR_144GREENTAB);   // initialize a ST7735S chip, black tab

  // Use this initializer (uncomment) if you're using a 0.96" 180x60 TFT
  //tft.initR(INITR_MINI160x80);   // initialize a ST7735S chip, mini display

  // Use this initializer (uncomment) if you're using a 1.54" 240x240 TFT
  //tft.init(240, 240);   // initialize a ST7789 chip, 240x240 pixels

  Serial.println("Initialized");

  uint16_t time = millis();
  tft.fillScreen(ST77XX_BLACK);
  time = millis() - time;

  Serial.println(time, DEC);
  delay(500);

  // large block of text
  tft.fillScreen(ST77XX_BLACK);
  testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST77XX_WHITE);
  delay(1000);

  // tft print function!
  tftPrintTest();
  delay(4000);

  // a single pixel
  tft.drawPixel(tft.width()/2, tft.height()/2, ST77XX_GREEN);
  delay(500);

  // line draw test
  testlines(ST77XX_YELLOW);
  delay(500);

  // optimized lines
  testfastlines(ST77XX_RED, ST77XX_BLUE);
  delay(500);

  testdrawrects(ST77XX_GREEN);
  delay(500);

  testfillrects(ST77XX_YELLOW, ST77XX_MAGENTA);
  delay(500);

  tft.fillScreen(ST77XX_BLACK);
  testfillcircles(10, ST77XX_BLUE);
  testdrawcircles(10, ST77XX_WHITE);
  delay(500);

  testroundrects();
  delay(500);

  testtriangles();
  delay(500);

  mediabuttons();
  delay(500);

  Serial.println("done");
  delay(1000);
}

void loop() {
  tft.invertDisplay(true);
  delay(500);
  tft.invertDisplay(false);
  delay(500);
}
void testlines(uint16_t color) {
  tft.fillScreen(ST77XX_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawLine(0, 0, x, tft.height()-1, color);
    delay(0);
  }
  for (int16_t y=0; y < tft.height(); y+=6) {
    tft.drawLine(0, 0, tft.width()-1, y, color);
    delay(0);
  }

  tft.fillScreen(ST77XX_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color);
    delay(0);
  }
  for (int16_t y=0; y < tft.height(); y+=6) {
    tft.drawLine(tft.width()-1, 0, 0, y, color);
    delay(0);
  }

  tft.fillScreen(ST77XX_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawLine(0, tft.height()-1, x, 0, color);
    delay(0);
  }
  for (int16_t y=0; y < tft.height(); y+=6) {
    tft.drawLine(0, tft.height()-1, tft.width()-1, y, color);
    delay(0);
  }

  tft.fillScreen(ST77XX_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color);
    delay(0);
  }
  for (int16_t y=0; y < tft.height(); y+=6) {
    tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color);
    delay(0);
  }
}

void testdrawtext(char *text, uint16_t color) {
  tft.setCursor(0, 0);
  tft.setTextColor(color);
  tft.setTextWrap(true);
  tft.print(text);
}

void testfastlines(uint16_t color1, uint16_t color2) {
  tft.fillScreen(ST77XX_BLACK);
  for (int16_t y=0; y < tft.height(); y+=5) {
    tft.drawFastHLine(0, y, tft.width(), color1);
  }
  for (int16_t x=0; x < tft.width(); x+=5) {
    tft.drawFastVLine(x, 0, tft.height(), color2);
  }
}

void testdrawrects(uint16_t color) {
  tft.fillScreen(ST77XX_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color);
  }
}

void testfillrects(uint16_t color1, uint16_t color2) {
  tft.fillScreen(ST77XX_BLACK);
  for (int16_t x=tft.width()-1; x > 6; x-=6) {
    tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1);
    tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2);
  }
}

void testfillcircles(uint8_t radius, uint16_t color) {
  for (int16_t x=radius; x < tft.width(); x+=radius*2) {
    for (int16_t y=radius; y < tft.height(); y+=radius*2) {
      tft.fillCircle(x, y, radius, color);
    }
  }
}

void testdrawcircles(uint8_t radius, uint16_t color) {
  for (int16_t x=0; x < tft.width()+radius; x+=radius*2) {
    for (int16_t y=0; y < tft.height()+radius; y+=radius*2) {
      tft.drawCircle(x, y, radius, color);
    }
  }
}

void testtriangles() {
  tft.fillScreen(ST77XX_BLACK);
  int color = 0xF800;
  int t;
  int w = tft.width()/2;
  int x = tft.height()-1;
  int y = 0;
  int z = tft.width();
  for(t = 0 ; t <= 15; t++) {
    tft.drawTriangle(w, y, y, x, z, x, color);
    x-=4;
    y+=4;
    z-=4;
    color+=100;
  }
}

void testroundrects() {
  tft.fillScreen(ST77XX_BLACK);
  int color = 100;
  int i;
  int t;
  for(t = 0 ; t <= 4; t+=1) {
    int x = 0;
    int y = 0;
    int w = tft.width()-2;
    int h = tft.height()-2;
    for(i = 0 ; i <= 16; i+=1) {
      tft.drawRoundRect(x, y, w, h, 5, color);
      x+=2;
      y+=3;
      w-=4;
      h-=6;
      color+=1100;
    }
    color+=100;
  }
}

void tftPrintTest() {
  tft.setTextWrap(false);
  tft.fillScreen(ST77XX_BLACK);
  tft.setCursor(0, 30);
  tft.setTextColor(ST77XX_RED);
  tft.setTextSize(1);
  tft.println("Hello World!");
  tft.setTextColor(ST77XX_YELLOW);
  tft.setTextSize(2);
  tft.println("Hello World!");
  tft.setTextColor(ST77XX_GREEN);
  tft.setTextSize(3);
  tft.println("Hello World!");
  tft.setTextColor(ST77XX_BLUE);
  tft.setTextSize(4);
  tft.print(1234.567);
  delay(1500);
  tft.setCursor(0, 0);
  tft.fillScreen(ST77XX_BLACK);
  tft.setTextColor(ST77XX_WHITE);
  tft.setTextSize(0);
  tft.println("Hello World!");
  tft.setTextSize(1);
  tft.setTextColor(ST77XX_GREEN);
  tft.print(p, 6);
  tft.println(" Want pi?");
  tft.println(" ");
  tft.print(8675309, HEX); // print 8,675,309 out in HEX!
  tft.println(" Print HEX!");
  tft.println(" ");
  tft.setTextColor(ST77XX_WHITE);
  tft.println("Sketch has been");
  tft.println("running for: ");
  tft.setTextColor(ST77XX_MAGENTA);
  tft.print(millis() / 1000);
  tft.setTextColor(ST77XX_WHITE);
  tft.print(" seconds.");
}

void mediabuttons() {
  // play
  tft.fillScreen(ST77XX_BLACK);
  tft.fillRoundRect(25, 10, 78, 60, 8, ST77XX_WHITE);
  tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_RED);
  delay(500);
  // pause
  tft.fillRoundRect(25, 90, 78, 60, 8, ST77XX_WHITE);
  tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_GREEN);
  tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_GREEN);
  delay(500);
  // play color
  tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_BLUE);
  delay(50);
  // pause color
  tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_RED);
  tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_RED);
  // play color
  tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_GREEN);
}

Penjelasan Beberapa Fungsi Program LCD TFT 1.8 dari Adafruit

tft.fillScreen(ST77XX_BLACK);

Program diatas untuk mengatur warna background layar atau screen lcd TFT 1.8 menjadi warna hitam, anda bisa merubah menjadi warna kesukaan anda, dengan kode warna 16 bit atau RGB56, contohnya bisa lihat daftar code dibawah ini

#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF

Untuk mencari code warna lain, bisa menggunakan color picker untuk LCD TFT 1.8 di website ini http://www.barth-dev.de/online/rgb565-color-picker/

tft.setCursor(0, 0);

Fungsi dari kode diatas adalah untuk menentukan posisi kursor, yang sebelah kiri adalah X dan yang kanan adalah Y

 tft.setTextColor(color);

Kode diatas untuk mengatur warna teks yang akan ditampilkan, untuk colornya bisa disamakan sesuai code warna yang anda mau.

tft.print(text);

dan kode diatas untuk menampilkan teks atau karakter dalam bentuk char array, atau char *variable. jika variable yang anda buat adalah string maka bisa di konvert dengan fungsi sprintf atau toCharArray().

Keyword

  1. ESP32 LCD TFT 1.8
  2. LCD TFT dengan ESP32
  3. Tutorial ESP32 LCD TFT 1.8
  4. Program ESP32 LCD TFT 1.8
  5. Library LCD TFT 1.8 ESP32
  6. ST7735 LCD ESP32

Leave a Reply

Your email address will not be published. Required fields are marked *