Pin GPIO ESP32 mana yang sebaiknya digunakan?

Chip ESP32 dilengkapi dengan 48 pin yang memiliki berbagai fungsi. Namun, tidak semua pin tersedia di semua papan pengembangan ESP32, dan beberapa pin tidak dapat digunakan.
Ada banyak pertanyaan tentang cara menggunakan GPIO ESP32. Pin mana yang sebaiknya digunakan? Pin mana yang sebaiknya dihindari dalam proyek Anda? Artikel ini bertujuan untuk menjadi panduan referensi yang sederhana dan mudah diikuti untuk GPIO ESP32.
Gambar di bawah ini menggambarkan pinout ESP-WROOM-32. Anda dapat menggunakannya sebagai referensi jika Anda menggunakan chip ESP32 polos untuk membangun papan kustom.
No | Materi | Tanggal | Waktu | Harga | Lokasi | View | Action |
---|---|---|---|---|---|---|---|
1 | IOT PLC SCADA Siemens | 7-8 Juni 2025 | 08.00 - 16.00 | 2000000 | Surabaya | Silabus | Daftar Sekarang |
2 | IOT PLC SCADA Omron | 14 - 15 Juni 2025 | 08.00 - 16.00 | 2000000 | Surabaya | Silabus | Daftar Sekarang |
3 | IOT PLC SCADA Schneider | 21-22 Juni 2025 | 08.00 -16.00 | 2000000 | Surabaya | Silabus | Daftar Sekarang |
4 | IOT PLC SCADA Allen Bradley | 28-29 Juni 2025 | 08.00-16.00 | 2000000 | Surabaya | Silabus | Daftar Sekarang |
Periferel ESP32
Periferel ESP32 meliputi:
- 18 saluran Analog-to-Digital Converter (ADC)
- 3 antarmuka SPI
- 3 antarmuka UART
- 2 antarmuka I2C
- 16 saluran output PWM
- 2 Digital-to-Analog Converters (DAC)
- 2 antarmuka I2S
- 10 GPIO untuk capacitive sensing
Fitur ADC (analog ke digital) dan DAC (digital ke analog) ditetapkan pada pin tertentu yang bersifat statis. Namun, Anda dapat menentukan pin mana yang digunakan untuk UART, I2C, SPI, PWM, dll – Anda hanya perlu menetapkannya dalam kode. Hal ini dimungkinkan berkat fitur multiplexing pada chip ESP32.
Meskipun Anda dapat mendefinisikan properti pin di perangkat lunak, ada pin-pins tertentu yang sudah ditetapkan secara default, seperti yang ditunjukkan dalam gambar berikut (ini adalah contoh untuk papan ESP32 DEVKIT V1 DOIT dengan 36 pin – lokasi pin dapat berbeda tergantung pada produsen).
Tabel berikut menunjukkan pin mana yang terbaik untuk digunakan sebagai input, output, dan pin mana yang perlu Anda waspadai.
Pin yang disorot dengan warna hijau aman untuk digunakan. Pin yang disorot dengan warna kuning aman untuk digunakan, namun Anda perlu memperhatikan karena mereka mungkin memiliki perilaku yang tidak terduga, terutama saat booting. Pin yang disorot dengan warna merah tidak disarankan untuk digunakan sebagai input atau output.
Pin Input
GPIO 34 hingga 39 adalah pin input saja (GPI). Pin-pin ini tidak memiliki resistor pull-up atau pull-down internal. Mereka tidak dapat digunakan sebagai output, sehingga sebaiknya hanya digunakan sebagai input:
- GPIO 34
- GPIO 35
- GPIO 36
- GPIO 39
SPI Flash Terintegrasi pada ESP-WROOM-32
GPIO 6 hingga GPIO 11 diekspos pada beberapa papan pengembangan ESP32. Namun, pin-pin ini terhubung ke SPI flash terintegrasi pada chip ESP-WROOM-32 dan tidak disarankan untuk digunakan untuk keperluan lain. Oleh karena itu, hindari menggunakan pin-pin ini dalam proyek Anda:
- GPIO 6 (SCK/CLK)
- GPIO 7 (SDO/SD0)
- GPIO 8 (SDI/SD1)
- GPIO 9 (SHD/SD2)
- GPIO 10 (SWP/SD3)
- GPIO 11 (CSC/CMD)
GPIO Sentuh Kapasitif
ESP32 memiliki 10 sensor sentuh kapasitif internal. Sensor-sensor ini dapat mendeteksi variasi pada objek yang menyimpan muatan listrik, seperti kulit manusia. Oleh karena itu, sensor ini dapat mendeteksi variasi yang terjadi saat menyentuh GPIO dengan jari. Pin sentuh kapasitif ini dapat dengan mudah diintegrasikan ke dalam pad kapasitif dan menggantikan tombol mekanis. Pin sentuh kapasitif juga dapat digunakan untuk membangunkan ESP32 dari mode tidur dalam.
Sensor sentuh internal ini terhubung ke GPIO berikut:
- T0 (GPIO 4)
- T1 (GPIO 0)
- T2 (GPIO 2)
- T3 (GPIO 15)
- T4 (GPIO 13)
- T5 (GPIO 12)
- T6 (GPIO 14)
- T7 (GPIO 27)
- T8 (GPIO 33)
- T9 (GPIO 32)
Analog to Digital Converter (ADC)
ESP32 memiliki 18 saluran ADC 12-bit (sementara ESP8266 hanya memiliki 1 saluran ADC 10-bit). Berikut adalah GPIO yang dapat digunakan sebagai ADC beserta salurannya:
- ADC1_CH0 (GPIO 36)
- ADC1_CH1 (GPIO 37)
- ADC1_CH2 (GPIO 38)
- ADC1_CH3 (GPIO 39)
- ADC1_CH4 (GPIO 32)
- ADC1_CH5 (GPIO 33)
- ADC1_CH6 (GPIO 34)
- ADC1_CH7 (GPIO 35)
- ADC2_CH0 (GPIO 4)
- ADC2_CH1 (GPIO 0)
- ADC2_CH2 (GPIO 2)
- ADC2_CH3 (GPIO 15)
- ADC2_CH4 (GPIO 13)
- ADC2_CH5 (GPIO 12)
- ADC2_CH6 (GPIO 14)
- ADC2_CH7 (GPIO 27)
- ADC2_CH8 (GPIO 25)
- ADC2_CH9 (GPIO 26)
Saluran input ADC memiliki resolusi 12-bit. Artinya, Anda dapat mendapatkan pembacaan analog yang berkisar dari 0 hingga 4095, di mana 0 berhubungan dengan 0V dan 4095 berhubungan dengan 3.3V. Anda juga dapat mengatur resolusi saluran dan rentang ADC melalui kode.
Pin ADC ESP32 tidak memiliki perilaku linier. Anda mungkin tidak dapat membedakan antara 0 dan 0.1V, atau antara 3.2 dan 3.3V. Hal ini perlu diperhatikan saat menggunakan pin ADC. Anda akan mendapatkan perilaku yang mirip dengan yang ditunjukkan dalam gambar berikut.
Digital to Analog Converter (DAC)
ESP32 memiliki 2 saluran DAC 8-bit untuk mengonversi sinyal digital menjadi keluaran sinyal tegangan analog. Berikut adalah saluran DAC yang tersedia:
- DAC1 (GPIO25)
- DAC2 (GPIO26)
RTC GPIOs
ESP32 mendukung GPIO RTC. GPIO yang terhubung ke subsistem daya rendah RTC dapat digunakan saat ESP32 dalam kondisi deep sleep. GPIO RTC ini dapat digunakan untuk membangunkan ESP32 dari deep sleep ketika ko-prosesor Ultra Low Power (ULP) aktif. Berikut adalah GPIO yang dapat digunakan sebagai sumber eksternal untuk membangunkan ESP32:
- RTC_GPIO0 (GPIO36)
- RTC_GPIO3 (GPIO39)
- RTC_GPIO4 (GPIO34)
- RTC_GPIO5 (GPIO35)
- RTC_GPIO6 (GPIO25)
- RTC_GPIO7 (GPIO26)
- RTC_GPIO8 (GPIO33)
- RTC_GPIO9 (GPIO32)
- RTC_GPIO10 (GPIO4)
- RTC_GPIO11 (GPIO0)
- RTC_GPIO12 (GPIO2)
- RTC_GPIO13 (GPIO15)
- RTC_GPIO14 (GPIO13)
- RTC_GPIO15 (GPIO12)
- RTC_GPIO16 (GPIO14)
- RTC_GPIO17 (GPIO27)
PWM (Pulse Width Modulation)
ESP32 memiliki 16 saluran PWM independen yang dapat dikonfigurasi untuk menghasilkan sinyal PWM dengan berbagai properti. Semua pin yang dapat berfungsi sebagai output dapat digunakan sebagai pin PWM (kecuali GPIO 34 hingga 39 yang tidak dapat menghasilkan PWM).
Untuk mengatur sinyal PWM, Anda perlu mendefinisikan parameter-parameter berikut dalam kode:
- Frekuensi sinyal
- Dut cycle (rasio waktu sinyal tinggi terhadap periode total)
- Saluran PWM
- GPIO tempat Anda ingin mengeluarkan sinyal
I2C
ESP32 memiliki dua saluran I2C dan setiap pin dapat diatur sebagai SDA (Data) atau SCL (Clock). Saat menggunakan ESP32 dengan Arduino IDE, pin I2C default yang digunakan adalah:
- GPIO 21 (SDA)
- GPIO 22 (SCL)
Jika Anda ingin menggunakan pin lain saat menggunakan library Wire, Anda cukup memanggil fungsi berikut dalam kode:
Wire.begin(SDA, SCL);
SPI
Secara default, pemetaan pin untuk SPI pada ESP32 adalah sebagai berikut:
SPI | MOSI | MISO | CLK | CS |
---|---|---|---|---|
VSPI | GPIO 23 | GPIO 19 | GPIO 18 | GPIO 5 |
HSPI | GPIO 13 | GPIO 12 | GPIO 14 | GPIO 15 |
- MOSI (Master Out Slave In) digunakan untuk mengirim data dari master ke slave.
- MISO (Master In Slave Out) digunakan untuk mengirim data dari slave ke master.
- CLK (Clock) adalah sinyal clock untuk sinkronisasi data.
- CS (Chip Select) digunakan untuk memilih perangkat yang terhubung pada bus SPI.
UART
ESP32 mendukung hingga tiga antarmuka UART: UART0, UART1, dan UART2, tergantung pada model papan ESP32 yang Anda gunakan.
- UART0 biasanya digunakan untuk komunikasi dengan serial monitor saat meng-upload dan debug. Namun, Anda juga dapat menggunakannya untuk komunikasi dengan perangkat lain setelah meng-upload kode, jika Serial Monitor tidak diperlukan.
- UART1 dan UART2 tersedia untuk komunikasi dengan perangkat eksternal.
Seperti I2C dan SPI, pin UART ini dapat dipetakan ke pin GPIO mana saja pada ESP32. Namun, mereka memiliki penugasan pin default pada sebagian besar model papan.
Untuk sebagian besar papan ESP32, penugasan pin UART adalah sebagai berikut:
UART Port | TX | RX | Keterangan |
---|---|---|---|
UART0 | GPIO 1 | GPIO 3 | Digunakan untuk Serial Monitor dan upload kode; Bisa dipetakan ke GPIO lain; |
UART1 | GPIO 10 | GPIO 9 | Harus dipetakan ke GPIO lain |
UART2 | GPIO 17 | GPIO 16 | Bisa dipetakan ke GPIO lain |
Tentang UART1 (GPIO 9 dan GPIO 10) – GPIO ini terhubung ke memori SPI flash ESP32, jadi Anda tidak dapat menggunakannya secara langsung. Untuk menggunakan UART1 untuk berkomunikasi dengan perangkat lain, Anda harus mendefinisikan pin yang berbeda menggunakan pustaka HardwareSerial.
Interrupts
Semua GPIO pada ESP32 dapat dikonfigurasi sebagai interrupt.
Untuk mempelajari cara menggunakan interrupt dengan ESP32, Anda dapat merujuk ke panduan berikut:
- Interrupts pada ESP32 dengan Arduino IDE
- Interrupts pada ESP32 dengan MicroPython
Strapping Pins
Chip ESP32 memiliki pin strapping berikut:
- GPIO 0 (harus dalam keadaan LOW untuk masuk ke mode boot)
- GPIO 2 (harus mengapung atau dalam keadaan LOW saat boot)
- GPIO 4
- GPIO 5 (harus dalam keadaan HIGH saat boot)
- GPIO 12 (harus dalam keadaan LOW saat boot)
- GPIO 15 (harus dalam keadaan HIGH saat boot)
Pin-pin ini digunakan untuk menempatkan ESP32 dalam mode bootloader atau mode flashing. Pada sebagian besar papan pengembangan dengan USB/Serial bawaan, Anda tidak perlu khawatir tentang status pin-pins ini. Papan pengembangan secara otomatis menempatkan pin-pins tersebut dalam keadaan yang benar untuk mode flashing atau boot.
Namun, jika Anda memiliki perangkat periferal yang terhubung ke pin-pin ini, Anda mungkin akan mengalami kesulitan dalam meng-upload kode baru, melakukan flashing firmware pada ESP32, atau mereset papan. Jika perangkat periferal terhubung ke pin strapping dan Anda mengalami kesulitan dalam meng-upload kode atau flashing ESP32, kemungkinan besar perangkat tersebut mencegah ESP32 masuk ke mode yang benar. Anda dapat membaca dokumentasi tentang Pemilihan Mode Boot untuk panduan lebih lanjut. Setelah reset, flashing, atau booting, pin-pin ini akan berfungsi seperti yang diharapkan.
Pins HIGH at Boot
Beberapa GPIO pada ESP32 mengubah statusnya menjadi HIGH atau mengeluarkan sinyal PWM pada saat boot atau reset. Ini berarti bahwa jika Anda memiliki output yang terhubung ke GPIO ini, Anda mungkin akan mendapatkan hasil yang tidak terduga ketika ESP32 mereset atau booting.
GPIO yang berubah statusnya menjadi HIGH atau mengeluarkan sinyal PWM saat boot atau reset adalah:
- GPIO 1
- GPIO 3
- GPIO 5
- GPIO 6 hingga GPIO 11 (terhubung ke memori SPI flash terintegrasi pada ESP32 – tidak disarankan untuk digunakan).
- GPIO 14
- GPIO 15
Enable (EN)
Pin Enable (EN) adalah pin pengendali regulator 3.3V. Pin ini di-pull up, sehingga dapat dihubungkan ke ground untuk menonaktifkan regulator 3.3V. Artinya, pin ini dapat digunakan untuk menghubungkan tombol tekan guna merestart ESP32, misalnya.
Arus GPIO
Arus maksimum yang dapat ditarik dari setiap GPIO adalah 40mA, sesuai dengan bagian Recommended Operating Conditions pada datasheet ESP32.