ESP32-S3 adalah salah satu chip paling populer dari Espressif untuk proyek IoT, berkat kombinasi Wi-Fi 2.4 GHz, Bluetooth LE 5, prosesor dual-core Xtensa LX7 hingga 240 MHz, dan 45 GPIO yang bisa dikonfigurasi secara fleksibel. Namun, “45 GPIO” ini bukan berarti semuanya bebas dipakai sesuka hati. Beberapa pin punya peran khusus saat boot, terhubung ke memori internal, atau punya karakteristik listrik yang berbeda dari GPIO biasa.
Tulisan ini membahas fungsi-fungsi pin ESP32-S3 secara praktis: pin mana yang paling aman digunakan untuk proyek Anda, dan pin mana yang sebaiknya dihindari atau digunakan dengan hati-hati.

Sekilas Tentang Pin ESP32-S3
Chip ESP32-S3 varian dasar (QFN56, 7×7 mm) memiliki 45 GPIO yang dapat dikonfigurasi melalui dua mekanisme:
- IO MUX — jalur langsung berkecepatan tinggi ke peripheral tertentu (SPI, UART, JTAG), cocok untuk sinyal yang butuh latensi rendah.
- GPIO Matrix — jalur fleksibel yang bisa menghubungkan hampir semua sinyal peripheral ke GPIO mana pun, tapi dengan sedikit tambahan latensi.
Selain itu, sebagian pin juga punya fungsi RTC (aktif saat Deep-sleep) dan fungsi analog (ADC, touch sensor, oscillator 32 kHz).
Pin yang Aman dan Nyaman Digunakan (Prioritas 2)
Espressif sendiri mengelompokkan pin berdasarkan prioritas penggunaan. Kelompok yang paling direkomendasikan untuk keperluan umum adalah Priority 2 (P2) — GPIO yang bisa dipakai bebas tanpa risiko bentrok dengan fungsi penting lain. Beberapa contohnya:
- GPIO1–GPIO14 — cocok untuk I2C, UART, SPI umum, PWM, atau input/output digital biasa. Sebagian besar juga mendukung ADC1 dan touch sensor, jadi fleksibel untuk sensor analog.
- GPIO4–GPIO7 — pilihan solid untuk I2C (SDA/SCL) atau sensor lain karena tidak overlap dengan fungsi boot/strapping.
- GPIO15–GPIO18, GPIO21 — juga tergolong P2, aman untuk peripheral tambahan seperti UART1 atau GPIO umum.
- GPIO47, GPIO48 — meski awalnya terhubung ke SPICLK diferensial, keduanya tetap tersedia sebagai GPIO umum (P2) jika chip tidak menggunakan flash/PSRAM 8-line.
Rule of thumb: kalau sebuah pin tidak disorot merah/kuning di datasheet (highlight untuk strapping pin, interface flash, atau JTAG/UART0), biasanya aman dipakai.
Pin yang Perlu Kehati-hatian Ekstra (Strapping Pins)
Beberapa GPIO berfungsi sebagai strapping pin — nilai logikanya dibaca saat chip boot untuk menentukan mode operasi. Setelah boot, pin ini bisa dipakai sebagai GPIO biasa, tapi Anda harus memastikan rangkaian eksternal tidak mengganggu level logika saat power-up.
| Pin | Fungsi Strapping | Kondisi Default |
|---|---|---|
| GPIO0 | Pemilih mode boot (SPI Boot vs Download Boot) | Weak pull-up (1) |
| GPIO3 | Sumber sinyal JTAG | Floating |
| GPIO45 | Kontrol tegangan VDD_SPI (1.8 V/3.3 V) | Weak pull-down (0) |
| GPIO46 | Kontrol boot mode & cetak pesan ROM | Weak pull-down (0) |
Tips praktis: jangan memasang pull-up/pull-down kuat atau menyambungkan LED/relay langsung ke pin ini tanpa mempertimbangkan efeknya saat power-up — bisa membuat board gagal boot atau masuk mode download secara tidak sengaja.
Pin yang Sebaiknya Dihindari untuk Penggunaan Umum
1. Pin yang terhubung ke Flash/PSRAM in-package
Untuk varian chip dengan flash atau PSRAM terintegrasi dalam package (seperti ESP32-S3R8, ESP32-S3FN8, dsb), pin berikut sudah dialokasikan secara permanen dan tidak boleh dipakai untuk fungsi lain:
- SPICLK, SPID, SPIQ, SPICS0, SPIHD, SPIWP (pin 30–35)
- GPIO26–GPIO32 — ini adalah alias GPIO dari pin SPI0/1 di atas
- SPICLK_N, SPICLK_P (GPIO47/48) — dipakai bila memory memakai mode Octal SPI (8-line)
- GPIO33–GPIO37 — dipakai untuk jalur data tambahan (DQ4–DQ7, DQS) pada mode Octal SPI
Menggunakan pin ini untuk keperluan lain bisa menyebabkan korupsi data flash/PSRAM atau board tidak bisa boot sama sekali.
2. Pin UART0 (GPIO43, GPIO44)
Dipakai untuk komunikasi serial debug/flashing default. Bisa dipakai sebagai GPIO, tapi hati-hati karena biasanya terhubung ke USB-to-serial converter di dev board — sinyal dari luar bisa mengganggu proses upload firmware.
3. Pin JTAG (GPIO39–GPIO42 / MTCK, MTDO, MTDI, MTMS)
Dipakai untuk debugging via JTAG. Jika Anda tidak memakai debugger eksternal, pin ini relatif aman dipakai, tapi tetap masuk kategori Priority 3 — gunakan dengan kesadaran bahwa fungsi debug akan hilang.
4. Pin USB Serial/JTAG (GPIO19, GPIO20)
Terhubung ke USB_D-/USB_D+ secara default. Jika board Anda memakai port USB bawaan chip (bukan converter eksternal), sebaiknya hindari memakai pin ini untuk fungsi lain kecuali Anda menonaktifkan fungsi USB secara eksplisit lewat register.
5. GPIO0 sebagai output berkecepatan tinggi
Meski secara teknis boleh dipakai sebagai GPIO reguler setelah boot, GPIO0 sering dipakai untuk tombol “BOOT” di banyak dev board. Menyambungkan aktuator (motor, relay) langsung ke pin ini berisiko memicu mode download secara tidak sengaja saat reset.
Pertimbangan Tambahan Saat Memilih Pin
1. Cek varian chip yang dipakai. ESP32-S3 polos (tanpa flash/PSRAM in-package) punya lebih banyak pin bebas dibanding varian seperti ESP32-S3R8 atau ESP32-S3R16V yang sudah “memakan” beberapa GPIO untuk memori internal.
2. Perhatikan glitch saat power-up. Beberapa pin (GPIO1–GPIO14, GPIO17–GPIO20, XTAL_32K_P/N) mengalami glitch low-level atau high-level singkat (~60 µs) saat chip baru dinyalakan. Untuk aplikasi sensitif seperti driver motor atau relay, tambahkan delay software sebelum menginisialisasi pin tersebut.
3. Untuk fitur Deep-sleep, gunakan RTC GPIO. Jika proyek Anda memakai ULP coprocessor atau ingin bangun dari Deep-sleep via GPIO, pastikan memilih pin yang masuk kategori RTC GPIO (GPIO0–GPIO21), karena hanya pin ini yang tetap aktif dan bisa diakses saat mode tidur dalam.
4. ADC2 tidak bisa dipakai bersamaan dengan Wi-Fi. Jika proyek memakai Wi-Fi aktif dan butuh pembacaan analog, gunakan channel ADC1 (GPIO1–GPIO10), bukan ADC2 (GPIO11–GPIO20), karena ADC2 berbagi resource dengan radio Wi-Fi.
5. Drive strength berbeda-beda. GPIO17 dan GPIO18 punya drive strength default lebih rendah (10 mA) dibanding GPIO lain (20 mA), sementara GPIO19 dan GPIO20 justru lebih tinggi (40 mA) karena terkait fungsi USB. Pertimbangkan ini jika mengendalikan beban yang butuh arus lebih besar.
Ringkasan Cepat
| Kategori | Pin | Catatan |
|---|---|---|
| ✅ Aman dipakai bebas | GPIO1–GPIO18, GPIO21, GPIO47, GPIO48 | Prioritas 2, minim risiko |
| ⚠️ Strapping pin (hati-hati saat boot) | GPIO0, GPIO3, GPIO45, GPIO46 | Bisa dipakai setelah boot, tapi jangan diganggu external circuit saat reset |
| ⚠️ Fungsi debug/USB (opsional dilepas) | GPIO19, GPIO20 (USB), GPIO39–GPIO42 (JTAG), GPIO43–GPIO44 (UART0) | Aman jika fitur terkait tidak dipakai |
| ❌ Hindari (kecuali paham risikonya) | GPIO26–GPIO37, SPICLK/SPID/SPIQ/SPICS0/SPIHD/SPIWP | Dipakai untuk komunikasi ke flash/PSRAM in-package |
Penutup
ESP32-S3 menawarkan jumlah GPIO yang cukup besar, tapi memahami peta fungsi pin adalah kunci menghindari masalah di kemudian hari — mulai dari board yang gagal boot, korupsi data flash, hingga kegagalan upload firmware. Sebagai aturan umum: mulai dari pin-pin di rentang GPIO1–GPIO18 untuk kebutuhan umum, hindari total pin yang terhubung ke SPI0/1 pada varian dengan memori in-package, dan selalu cek datasheet resmi (ESP32-S3 Series Datasheet, versi 2.2) untuk varian chip spesifik yang Anda gunakan, karena alokasi pin bisa berbeda tergantung apakah chip punya flash/PSRAM terintegrasi atau tidak.
Sumber: ESP32-S3 Series Datasheet, Version 2.2, Espressif Systems.

