ESP32 DevKit V1 Hardware Platform
Core Specifications
- •MCU: ESP32-WROOM-32 (Dual-core Xtensa LX6)
- •Operating Voltage: 3.3V (⚠️ NOT 5V tolerant)
- •Clock Speed: 240 MHz (dual-core, adjustable)
- •Flash Memory: 4 MB
- •SRAM: 520 KB
- •ROM: 448 KB
- •Built-in Peripherals: WiFi 802.11 b/g/n, Bluetooth v4.2 BR/EDR and BLE
GPIO Pin Capabilities
Digital GPIO Pins
Available: GPIO 0-39 (40 pins total)
Usable for general I/O: 0-5, 12-19, 21-23, 25-27, 32-39
PWM-Capable Pins
All GPIO pins support PWM via LEDC peripheral (16 independent channels, 0-15)
- •Frequency range: 1 Hz to 40 MHz
- •Resolution: 1-16 bits (configurable)
- •Recommended for PWM: 16, 17, 18, 19, 21, 22, 23, 25, 26, 27
Analog Input (ADC)
ADC1 (usable with WiFi): GPIO 32, 33, 34, 35, 36, 39
- •12-bit resolution (0-4095)
- •0-3.3V input range
- •Attenuation configurable (0dB, 2.5dB, 6dB, 11dB)
ADC2 (CANNOT use when WiFi active): GPIO 0, 2, 4, 12, 13, 14, 15, 25, 26, 27
- •Same specs as ADC1
- •⚠️ Critical: ADC2 is disabled when WiFi is running
Analog Output (DAC)
DAC Pins: GPIO 25, GPIO 26
- •8-bit resolution (0-255)
- •0-3.3V output range
- •Use
dacWrite(pin, value)
Interrupt-Capable Pins
All GPIO pins support interrupts
- •Rising edge, falling edge, both edges, low level, high level
- •Use
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode)
Communication Interfaces
UART (Serial)
UART0: RX=GPIO3, TX=GPIO1 (connected to USB)
- •Default for Serial.println()
- •Used by bootloader
UART1: RX=GPIO9, TX=GPIO10
- •⚠️ Connected to flash memory, not recommended for general use
UART2: RX=GPIO16, TX=GPIO17
- •Recommended for external serial devices
- •Can be remapped to other pins
I2C (Wire)
Default pins: SDA=GPIO21, SCL=GPIO22
- •Can be remapped to any GPIO pair
- •Master or slave mode
- •Standard (100 kHz) and Fast (400 kHz) modes
SPI
VSPI (default):
- •MOSI=GPIO23
- •MISO=GPIO19
- •SCK=GPIO18
- •SS=GPIO5
HSPI:
- •MOSI=GPIO13
- •MISO=GPIO12
- •SCK=GPIO14
- •SS=GPIO15
Both can be remapped to other pins.
Pin Constraints and Special Functions
⚠️ Input-Only Pins
GPIO 34, 35, 36, 39 are INPUT ONLY
- •No internal pull-up/pull-down resistors
- •Cannot be used with
pinMode(pin, OUTPUT) - •Cannot be used with
pinMode(pin, INPUT_PULLUP)
⚠️ Strapping Pins (Boot Mode)
These pins affect boot mode and should be avoided for critical functions:
GPIO 0:
- •Must be HIGH during boot
- •Has internal pull-up
- •Boot button usually connected here
- •Safe to use after boot
GPIO 2:
- •Must be LOW or floating during boot
- •Has internal pull-down
- •Some boards have built-in LED here
GPIO 5:
- •Controls SDIO slave timing
- •Has internal pull-up
GPIO 12:
- •Controls flash voltage (VDD_SDIO)
- •Must be LOW during boot for 3.3V flash
- •Has internal pull-down
GPIO 15:
- •Must be HIGH during boot
- •Controls boot message output
- •Has internal pull-up
Touch Sensing
Touch-capable pins: GPIO 0, 2, 4, 12, 13, 14, 15, 27, 32, 33
- •Use
touchRead(pin)to get capacitance value - •Threshold-based touch detection
RTC GPIO (Deep Sleep Wake)
RTC_GPIO pins: 0, 2, 4, 12-15, 25-27, 32-39
- •Can wake ESP32 from deep sleep
- •Retain state during deep sleep
Pin Selection Best Practices
For Digital Output (LED, Relay, etc.)
Best choices: 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33 Avoid: Strapping pins (0, 2, 5, 12, 15), input-only pins (34-39)
For Digital Input (Button, Sensor)
Best choices: 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33, 34, 35, 36, 39 Avoid: Strapping pins if possible
For PWM (Servo, Motor, LED dimming)
Best choices: 16, 17, 18, 19, 21, 22, 23, 25, 26, 27 Avoid: Strapping pins, input-only pins
For Analog Input (Sensors)
Best choices: 32, 33, 34, 35, 36, 39 (ADC1 - works with WiFi) Avoid: ADC2 pins if using WiFi (0, 2, 4, 12-15, 25-27)
For I2C
Default: SDA=21, SCL=22 (recommended to keep default) Alternative: Any GPIO pair except input-only pins
For SPI
Recommended: Use default VSPI pins (23, 19, 18, 5) Alternative: HSPI or custom pins
Power and Current
- •Max current per GPIO: 40 mA (recommended 20 mA)
- •Max total current: 200 mA across all pins
- •Operating voltage: 3.3V logic level
- •⚠️ Never connect 5V signals directly - use level shifters
Pin Conflict Checker
Before assigning a pin, verify:
- •✅ Pin supports required function (INPUT/OUTPUT/PWM/ADC/etc.)
- •✅ Not an input-only pin if output needed (avoid 34, 35, 36, 39)
- •✅ Not a strapping pin if possible (avoid 0, 2, 5, 12, 15)
- •✅ Not already used by another peripheral in your project
- •✅ If using WiFi, avoid ADC2 pins for analog input
Common Pin Assignments
Safe General Purpose Pins
These are the safest pins for most projects:
- •GPIO 16, 17: Often free, good for general I/O
- •GPIO 21, 22: I2C default but can be repurposed
- •GPIO 23: VSPI MOSI but can be repurposed
- •GPIO 25, 26: Have DAC if needed
- •GPIO 32, 33: Good for analog or digital
Pins to Avoid
- •GPIO 6-11: Connected to flash memory (SPI flash)
- •GPIO 34-39: Input only
- •GPIO 1, 3: UART0 (USB serial)
Hardware Errata
- •ADC readings can be affected by WiFi activity (use ADC1)
- •Some boards have LED on GPIO 2 that can interfere
- •Touch sensor values vary with board design
- •Deep sleep current depends on which pins are used