ESP32 S3 menggunakan LCD 2x16 dan RTC

Kita akan membangun satu board esp32 ditambah lcd dan rtc

kita siapkan terlebih dahulu untuk wiringnya dahulu

.

1. LCD 16x2 I2C

Misalkan kita memakai pin I2C yang umum pada ESP32-S3:

LCD I2C        ESP32-S3
VCC        5V (atau 3.3V jika modul mendukung)
GND        GND
SDA        GPIO 8
SCL        GPIO 9

GPIO 8 dan GPIO 9 merupakan konfigurasi I2C yang umum digunakan pada banyak board ESP32-S3, meskipun sebenarnya ESP32-S3 dapat memetakan I2C ke hampir semua GPIO yang bebas.


2. RTC DS1302

DS1302 mempunyai pin:

  • VCC
  • GND
  • CLK
  • DAT (IO)
  • RST/CE

Contoh wiring:

DS1302    ESP32-S3
VCC    3.3V
GND    GND
CLK    GPIO 4
DAT    GPIO 5
RST/CE    GPIO 6

Pin ini bebas dipilih karena bukan I2C.


Diagram sederhana

                ESP32-S3

           +-----------------+
           |                 |
3V3 -------+-----------------+------ DS1302 VCC
GND -------+-----------------+------ DS1302 GND
GPIO4 -----+------------------------ CLK
GPIO5 -----+------------------------ DAT
GPIO6 -----+------------------------ RST

5V --------+------------------------ LCD VCC
GND -------+------------------------ LCD GND
GPIO8 -----+------------------------ SDA
GPIO9 -----+------------------------ SCL
           +-----------------+

Contoh inisialisasi

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ThreeWire.h>
#include <RtcDS1302.h>

#define SDA_PIN 8
#define SCL_PIN 9

ThreeWire myWire(5,4,6);   // DAT, CLK, RST
RtcDS1302<ThreeWire> Rtc(myWire);

LiquidCrystal_I2C lcd(0x27,16,2);

void setup()
{
    Wire.begin(SDA_PIN, SCL_PIN);

    lcd.init();
    lcd.backlight();

    Rtc.Begin();
}

Kalau ingin semua menggunakan I2C

Kalau memang tujuannya agar LCD dan RTC sama-sama menggunakan I2C, sebaiknya gunakan salah satu RTC berikut:

  • DS3231 ⭐ (paling saya rekomendasikan)
  • DS1307

Wiring-nya menjadi sangat sederhana karena keduanya berbagi bus I2C:

ESP32-S3 GPIO8 (SDA)
        │
        ├── LCD I2C SDA
        └── DS3231 SDA

ESP32-S3 GPIO9 (SCL)
        │
        ├── LCD I2C SCL
        └── DS3231 SCL

Jadi hanya perlu 4 kabel (VCC, GND, SDA, SCL) untuk masing-masing modul yang dipasang paralel pada bus I2C.

Kalau Anda menggunakan ESP32-S3 DevKitC, saya juga bisa buatkan wiring lengkap beserta contoh program yang menampilkan jam DS1302/DS3231 di LCD 16x2 dan tetap menyisakan banyak GPIO untuk proyek berikutnya.

oh iya sekalian saya jg menggunakan 2 buah serial converter max2323 

Untuk tahap prototipe, DS1302 sudah cukup. Nanti ketika sistem sudah stabil, tinggal ganti ke DS3231 tanpa perlu mengubah logika program terlalu banyak.

Kalau saya merancang proyek Anda, saya akan membuatnya seperti ini:

Perangkat    Interface                    GPIO ESP32-S3
LCD 16x2 I2C    I2C                    SDA = GPIO8, SCL = GPIO9
RTC DS1302    3-Wire                    CLK = GPIO4, DAT = GPIO5, RST = GPIO6
Scale    UART1                    RX = GPIO16, TX = GPIO17
Printer        UART2                    RX = GPIO19, TX = GPIO18

Masih banyak GPIO yang tersisa untuk pengembangan, misalnya:

  • Tombol Menu
  • Tombol Enter
  • Tombol Up
  • Tombol Down
  • LED Status
  • Buzzer
  • Ethernet/WiFi
  • Web Server untuk konfigurasi

Saat nanti pindah ke DS3231

Perubahannya sangat sederhana.

Hardware:

Lepas DS1302.

Pasang DS3231:

DS3231 SDA -> GPIO8
DS3231 SCL -> GPIO9
DS3231 VCC -> 3.3V
DS3231 GND -> GND

LCD tetap di pin yang sama karena berbagi bus I2C.

Software:

Yang berubah hanya library RTC.

Dari:

#include <ThreeWire.h>
#include <RtcDS1302.h>

menjadi:

#include <Wire.h>
#include <RTClib.h>

RTC_DS3231 rtc;

Bagian lain seperti:

  • format tanggal
  • format jam
  • template <DATE>
  • template <TIME>

bisa tetap sama. Jadi migrasinya relatif mudah.


Saran untuk struktur program

Karena proyek ini mulai cukup besar, saya sarankan sejak awal dipisah menjadi beberapa file agar mudah dikembangkan:

src/
│
├── main.cpp
├── lcd.cpp
├── lcd.h
├── rtc.cpp
├── rtc.h
├── scale.cpp
├── scale.h
├── printer.cpp
├── printer.h
├── config.cpp
├── config.h
├── menu.cpp
└── menu.h

Dengan struktur seperti ini, nanti saat mengganti DS1302 ke DS3231 Anda kemungkinan hanya perlu mengubah isi rtc.cpp dan rtc.h, sementara file lain tetap tidak berubah. Ini membuat pengembangan dan pemeliharaan proyek jauh lebih mudah.

apakah ini masih menggunakan Arduino IDE?

Ya, tetap menggunakan Arduino IDE. Bahkan menurut saya untuk proyek Anda, Arduino IDE masih merupakan pilihan yang sangat baik.

Dari percakapan-percakapan kita sebelumnya, saya tahu Anda sudah cukup terbiasa dengan Arduino IDE dan sudah pernah membuat proyek ESP32-C3 dengan menu konfigurasi, template D0–D4, RTC, dan komunikasi serial. Jadi tidak ada alasan kuat untuk pindah IDE sekarang.

Struktur project di Arduino IDE

Walaupun menggunakan Arduino IDE, Anda tetap bisa membuat program yang rapi.

Misalnya:

ScalePrinter/
│
├── ScalePrinter.ino      <-- setup() dan loop()
├── config.h
├── config.cpp
├── lcd.h
├── lcd.cpp
├── rtc.h
├── rtc.cpp
├── scale.h
├── scale.cpp
├── printer.h
├── printer.cpp
├── menu.h
└── menu.cpp

Arduino IDE akan mengompilasi semua file .cpp dan .h yang berada di folder sketch secara otomatis.


Library yang dibutuhkan

Untuk konfigurasi yang kita rencanakan, kira-kira library-nya:

Wire
LiquidCrystal_I2C
ThreeWire
Rtc by Makuna
Preferences

Kalau nanti pindah ke DS3231:

Wire
LiquidCrystal_I2C
RTClib
Preferences

Kemampuan ESP32-S3

ESP32-S3 cukup kuat untuk menjalankan semuanya sekaligus:

✅ UART1 → Timbangan

✅ UART2 → Printer

✅ LCD I2C

✅ RTC

✅ WiFi

✅ Web Server

✅ Preferences (menyimpan konfigurasi)

✅ OTA Update (jika nanti ingin)

Bahkan penggunaan memorinya masih relatif ringan.


Saran pengembangan bertahap

Saya menyarankan kita membangunnya secara bertahap:

  1. Tahap 1
    • LCD
    • RTC
    • Menu sederhana
  2. Tahap 2
    • Komunikasi dengan timbangan (MAX3232)
  3. Tahap 3
    • Komunikasi dengan printer
  4. Tahap 4
    • Sistem template (<DATE>, <TIME>, D0, D1, dst.)
  5. Tahap 5
    • Konfigurasi melalui Web Server menggunakan WiFi
  6. Tahap 6
    • Upgrade RTC dari DS1302 ke DS3231

Menurut saya, ini akan menjadi proyek ESP32-S3 yang cukup lengkap. Nantinya alat ini bisa berfungsi sebagai controller mandiri yang:

  • membaca data dari timbangan RS232,
  • memproses dan memformat data sesuai template,
  • menambahkan tanggal dan waktu,
  • menampilkan status di LCD,
  • mencetak ke printer RS232,
  • serta menyediakan konfigurasi melalui menu LCD atau web browser, semuanya tetap dikembangkan menggunakan Arduino IDE.

ESP32-S3 DevKit dengan modul ESP32-S3-WROOM-1.

Saya menyarankan menggunakan pembagian pin seperti berikut:

Fungsi        GPIO
LCD I2C SDA        GPIO8
LCD I2C SCL        GPIO9
RTC DS1302 CLK        GPIO4
RTC DS1302 DAT        GPIO5
RTC DS1302 RST        GPIO6
Scale RX        GPIO16
Scale TX        GPIO17
Printer RX        GPIO18
Printer TX        GPIO21

Sehingga diagram sederhananya menjadi:

                    ESP32-S3

               +----------------+
LCD SDA -------| GPIO8          |
LCD SCL -------| GPIO9          |
               |                |
DS1302 CLK ----| GPIO4          |
DS1302 DAT ----| GPIO5          |
DS1302 RST ----| GPIO6          |
               |                |
Scale RX ------| GPIO16 UART1   |
Scale TX ------| GPIO17 UART1   |
               |                |
Printer RX ----| GPIO18 UART2   |
Printer TX ----| GPIO21 UART2   |
               +----------------+

Kenapa saya memilih pin tersebut?

Karena saya berusaha menghindari pin yang memiliki fungsi khusus:

  • GPIO0 → Boot mode
  • GPIO43 & GPIO44 → USB Serial bawaan
  • GPIO46 → Log/strapping
  • GPIO47 & GPIO48 → SPI Flash/RGB LED (tergantung board)

Sedangkan GPIO4–9 dan GPIO16–21 relatif aman untuk aplikasi


Spesifikasi board ESP32 S3

Board ini memiliki:

  • ✅ Dual Core 240 MHz
  • ✅ WiFi
  • ✅ Bluetooth BLE
  • ✅ USB OTG
  • ✅ 3 UART Hardware
  • ✅ 2 I2C Hardware
  • ✅ SPI
  • ✅ PWM

Artinya semua kebutuhan proyek masih jauh dari batas kemampuan board.


Yang saya inginkan nanti

Kalau kita mulai coding, saya ingin membuat proyek ini benar-benar seperti produk jadi, bukan sekadar contoh.

Misalnya menu LCD:

================
 Scale Printer
================

1. Connect WiFi
2. Scale Setting
3. Printer Setting
4. Template
5. Date Time
6. Network
7. About

Lalu halaman utama:

12:35:22
Weight: 25.680 kg

Saat data diterima:

Receiving...
Weight:25.680
Printing...
Done

Rencana fitur

Kalau melihat kebutuhan Anda selama beberapa bulan terakhir, saya membayangkan alat ini nantinya memiliki:

  • Membaca data timbangan RS232
  • Parsing data (D0–D4)
  • Template output
  • RTC (DS1302 → nanti DS3231)
  • LCD 16×2 I2C
  • Menu pengaturan
  • Menyimpan setting di Preferences (NVS)
  • Web Server untuk konfigurasi
  • OTA Update
  • Printer Epson TM-T82X
  • Auto reconnect WiFi
  • Sinkronisasi waktu melalui NTP saat WiFi tersedia (RTC tetap menjadi cadangan ketika offline)

Menurut saya, proyek ini sudah layak dibuat dengan struktur yang modular sejak awal. Dengan begitu, ketika nanti Anda mengganti DS1302 ke DS3231 atau menambah fitur seperti web server, perubahan hanya terjadi pada modul tertentu tanpa mengganggu bagian lain dari program.

Postingan populer dari blog ini

LCD 2x16 via ESP32

Perencanaan awal ESP32 S3 testing

winsocket vb.net