ESP32 S3 menggunakan LCD 2x16 dan RTC
- Dapatkan link
- X
- Aplikasi Lainnya
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.
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.
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:
-
Tahap 1
- LCD
- RTC
- Menu sederhana
-
Tahap 2
- Komunikasi dengan timbangan (MAX3232)
-
Tahap 3
- Komunikasi dengan printer
-
Tahap 4
-
Sistem template (
<DATE>,<TIME>,D0,D1, dst.)
-
Sistem template (
-
Tahap 5
- Konfigurasi melalui Web Server menggunakan WiFi
-
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.
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.
- Dapatkan link
- X
- Aplikasi Lainnya