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.

Ads Jadwal Training bisaioti Offline
NoMateriTanggalWaktuHargaLokasiViewAction
1IOT PLC SCADA Siemens7-8 Juni 202508.00 - 16.002000000SurabayaSilabusDaftar Sekarang
2IOT PLC SCADA Omron14 - 15 Juni 202508.00 - 16.002000000SurabayaSilabusDaftar Sekarang
3IOT PLC SCADA Schneider21-22 Juni 202508.00 -16.002000000SurabayaSilabusDaftar Sekarang
4IOT PLC SCADA Allen Bradley28-29 Juni 202508.00-16.002000000SurabayaSilabusDaftar 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).

pinout esp32

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.

GPIO Input Output Catatan
0 pulled up OK mengeluarkan sinyal PWM saat boot, harus dalam keadaan LOW untuk memasuki mode flashing
1 TX pin OK output debug saat boot
2 OK OK terhubung ke LED onboard, harus dibiarkan mengambang atau LOW untuk memasuki mode flashing
3 OK RX pin HIGH saat boot
4 OK OK
5 OK OK mengeluarkan sinyal PWM saat boot, pin strapping
6 x x terhubung ke SPI flash terintegrasi
7 x x terhubung ke SPI flash terintegrasi
8 x x terhubung ke SPI flash terintegrasi
9 x x terhubung ke SPI flash terintegrasi
10 x x terhubung ke SPI flash terintegrasi
11 x x terhubung ke SPI flash terintegrasi
12 OK OK boot gagal jika ditarik tinggi, pin strapping
13 OK OK
14 OK OK mengeluarkan sinyal PWM saat boot
15 OK OK mengeluarkan sinyal PWM saat boot, pin strapping
16 OK OK
17 OK OK
18 OK OK
19 OK OK
21 OK OK
22 OK OK
23 OK OK
25 OK OK
26 OK OK
27 OK OK
32 OK OK
33 OK OK
34 OK x hanya input
35 OK x hanya input
36 OK x hanya input
39 OK x hanya input

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.

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Daftar Sekarang