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:

  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.

 

 


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.

 

Postingan populer dari blog ini

LCD 2x16 via ESP32

winsocket vb.net