Perencanaan awal ESP32 S3 testing
RTC DS1302 bukan perangkat I2C. DS1302 menggunakan antarmuka 3-wire serial, sehingga
tidak bisa dipasang pada jalur SDA/SCL seperti LCD I2C.
Jadi wiring-nya menjadi seperti ini.
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.
Wah, berarti saya
mulai bisa membayangkan keseluruhan proyeknya. Ini hampir sama seperti proyek
yang pernah kita bahas sebelumnya: ESP32 membaca data dari timbangan (RS232),
memprosesnya, lalu mengirim ke printer thermal (RS232), sekaligus
menampilkan informasi di LCD dan memberi timestamp dari RTC.
Saya sarankan
pembagian pin seperti ini supaya rapi dan tidak bentrok.
|
Perangkat |
ESP32-S3 GPIO |
|
LCD
I2C SDA |
GPIO
8 |
|
LCD
I2C SCL |
GPIO
9 |
|
RTC
DS1302 CLK |
GPIO
4 |
|
RTC
DS1302 DAT |
GPIO
5 |
|
RTC
DS1302 RST |
GPIO
6 |
|
Scale
RX (MAX3232 TX → ESP) |
GPIO
16 |
|
Scale
TX (ESP → MAX3232 RX) |
GPIO
17 |
|
Printer
TX (ESP → MAX3232 RX) |
GPIO
18 |
|
Printer
RX (MAX3232 TX → ESP) |
GPIO
19 |
Wiring
MAX3232
MAX3232
untuk Timbangan
Scale RS232
│
│
+--------------+
|
MAX3232 |
| |
| R1OUT ------ GPIO16 (RX)
| T1IN <----- GPIO17 (TX)
| R1IN <----- DB9 TX Scale
| T1OUT -----> DB9 RX Scale
| VCC ------ 3.3V
| GND ------ GND
+--------------+
MAX3232
untuk Printer
ESP32-S3
GPIO18 (TX)
│
▼
+--------------+
|
MAX3232 |
| |
| T1IN |
| T1OUT ------ DB9 RX Printer
| R1IN <----- DB9 TX Printer
| R1OUT ------ GPIO19 (RX)
| VCC ------ 3.3V
| GND ------ GND
+--------------+
Pemakaian
UART
ESP32-S3 memiliki 3 UART hardware,
jadi tidak perlu SoftwareSerial.
Contohnya:
HardwareSerial ScaleSerial(1);
HardwareSerial PrinterSerial(2);
void setup() {
// Scale
ScaleSerial.begin(
9600,
SERIAL_8N1,
16, //
RX
17 //
TX
);
// Printer
PrinterSerial.begin(
9600,
SERIAL_8N1,
19, //
RX
18 //
TX
);
}
Kebutuhan
tegangan
Saya juga
menyarankan:
- ESP32-S3 → 3.3V
- DS1302 → 3.3V
- MAX3232 → 3.3V (sebagian besar modul
mendukung 3.0–5.5V)
§ LCD I2C → 5V (backlight lebih terang, tetapi pastikan modul
I2C memiliki pull-up yang aman untuk ESP32; banyak modul bekerja tanpa masalah.
Jika ragu, jalankan LCD di 3.3V.)
Gambaran
sistem
+--------------------+
| ESP32-S3 |
| |
Scale RS232 ------->| UART1 RX/TX |
| |
Printer RS232 <-----| UART2 TX/RX |
| |
LCD 16x2 I2C <----->| SDA/SCL |
| |
RTC DS1302 <------->| CLK DAT RST |
+--------------------+
Menurut saya,
kalau proyek ini memang untuk penggunaan jangka panjang di industri (timbangan
+ printer + LCD), saya akan mengganti DS1302 menjadi DS3231. Alasannya:
- akurasi jauh
lebih baik,
- menggunakan
I2C yang sama dengan LCD (cukup dua jalur SDA/SCL),
- lebih
sedikit kabel,
- lebih mudah
diprogram dan lebih tahan terhadap drift waktu.
Kalau saya tidak
salah ingat, proyek Anda ini nantinya juga akan mengambil data dari
timbangan, memformat sesuai template (D0–D4), menambahkan tanggal/jam, lalu
mencetak ke printer thermal Epson TM-T82X. Dengan konfigurasi pin di atas,
semua itu masih bisa dijalankan dengan nyaman tanpa ada konflik GPIO.
Itu keputusan
yang masuk akal. 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.)
- 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.
Terima kasih, ini
sangat membantu. Saya bisa melihat board yang Anda miliki adalah ESP32-S3
DevKit dengan modul ESP32-S3-WROOM-1. Dari pinout yang Anda kirim,
saya bisa menyusun wiring yang lebih tepat.
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 seperti milik Anda.
Saya juga melihat spesifikasi board Anda
Board ini
memiliki:
- ✅ Dual Core
240 MHz
- ✅ WiFi
- ✅ Bluetooth
BLE
- ✅ USB OTG
- ✅ 3 UART
Hardware
- ✅ 2 I2C
Hardware
- ✅ SPI
- ✅ PWM
Artinya semua
kebutuhan proyek Anda 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.