ESP32-S3 DevKitC Pinout Reference

The ESP32-S3 DevKitC is a powerful development board designed specifically to handle the heavy processing demands of today’s Artificial Intelligence of Things (AIoT) applications. At its heart lies a powerful dual-core Xtensa 32-bit LX7 microprocessor that can run up to 240 MHz. It also introduces specialized vector instructions to accelerate machine learning tasks and advanced signal processing, making it a powerhouse for creative engineering.

However, to truly harness the capabilities of the ESP32-S3 DevKitC, you must first understand its pinout. Each pin has a specific role, and knowing what each one does will help you build circuits more confidently, avoid costly mistakes, and get the most out of this incredible piece of technology.

ESP32-S3 DevKitC Pinout

The ESP32-S3 DevKitC is designed to be incredibly easy to use for prototyping. It features two rows of 22 pins along its sides, giving you 44 main connection points in total. These pins are spaced at the standard 2.54 mm distance, which means the board will snap perfectly into a standard breadboard or fit seamlessly onto a custom circuit board using regular headers.

The pinout is shown below:

esp32 s3 devkitc pinout

Let’s take a closer look at these pins and their functions, starting with the GPIO pins.

ESP32-S3 DevKitC GPIO Pins

The ESP32-S3 DevKitC exposes 36 GPIO pins on its headers: GPIO 0 through GPIO 21, as well as GPIO 35 through GPIO 48.

esp32 s3 devkitc gpio pins

The most important rule to remember when using this board is that the ESP32-S3 operates strictly on 3.3V logic. This means you must never expose the GPIO pins to a 5V source. Doing so can permanently damage the board.

The GPIO Matrix and the IO MUX

One of the most powerful features of the ESP32-S3 is its GPIO Matrix. You can think of it as an internal routing system inside the chip. It allows you to assign almost any digital functions, such as PWM, I2C, SPI, UART, I2S or TWAI, to almost any physical pin simply by changing your code.

However, this flexibility does have a minor limitation. Because signals have to travel through the GPIO Matrix, a tiny delay is introduced. For the vast majority of projects, this delay is completely unnoticeable. But when you are dealing with extremely fast signals or highly sensitive analog readings, that tiny delay becomes a problem.

To handle those demanding tasks, the ESP32-S3 bypasses the GPIO Matrix and uses something called the IO MUX.

The IO MUX connects specific physical pins directly to the dedicated hardware inside the chip. Some of these connections are fixed and cannot be moved in software, while others have default pin assignments but they can still be moved by using the GPIO Matrix. Functions that strictly depend on the IO MUX include ADC channels, the internal JTAG debugging interface, the USB Serial/JTAG controller, and the high-speed SPI connections used for the built-in flash memory.

So, while you have the freedom to route signals like I2C or PWM to almost any pin on the DevKitC, you cannot freely move every function. Some features, especially analog or high-speed ones, must stay on their assigned pins because they rely on the IO MUX.

In simple terms, the ESP32-S3’s peripheral signals can be grouped like this:

Routing typePeripheral examplesWhat it means
Fixed to specific pins through the IO MUXADC1, ADC2, TouchThese functions must use their assigned pins and cannot be moved in software.
Connected to default IO MUX pins, but can also be rerouted through the GPIO MatrixUART0, UART1, SPI2These functions have standard pin locations, but they can be moved to other GPIO pins if needed.
Not assigned to fixed pins by default and routed through the GPIO MatrixUART2, SPI3, I2C, I2S, TWAI, LED PWM, LCD and Camera, SD/MMC, MCPWMThese functions are flexible and can be assigned to different GPIO pins in software.

Which ESP32-S3 DevKitC GPIOs are safe to use?

Although the ESP32-S3 DevKitC has a lot of pins with various functions, some of them may not be suitable for your projects. The table below shows which pins are safe to use and which pins should be used with caution.

  • – Your top priority pins. They are perfectly safe to use.
  • – Pay close attention because their behavior, particularly during boot, can be unpredictable. Use them with caution.
  GPIO    Safe to use?    Type  Notes
GPIO0Strapping PinDetermines the primary boot mode (HIGH for normal flash boot, LOW enters serial download mode); Default state: HIGH (Pull-up)
GPIO1
GPIO2
GPIO3Strapping PinSelects the JTAG signal source configuration; Default state: Floating
GPIO4
GPIO5
GPIO6
GPIO7
GPIO8
GPIO9
GPIO10
GPIO11
GPIO12
GPIO13
GPIO14
GPIO15
GPIO16
GPIO17
GPIO18
GPIO19USBPermanently hardwired to high-speed differential USB signal D-
GPIO20USBPermanently hardwired to high-speed differential USB signal D+
GPIO21
GPIO35PSRAMReserved for Octal Flash or Octal PSRAM on octal-equipped development boards
GPIO36PSRAMReserved for Octal Flash or Octal PSRAM on octal-equipped development boards
GPIO37PSRAMReserved for Octal Flash or Octal PSRAM on octal-equipped development boards
GPIO38
GPIO39JTAGJTAG TCK for debugging
GPIO40JTAGJTAG TDO for debugging
GPIO41JTAGJTAG TDI for debugging
GPIO42JTAGJTAG TMS for debugging
GPIO43UART-TXUsed as UART0 transmit (console/bootloader); repurposing may disable serial console output and printing
GPIO44UART-RXUsed as UART0 receive (console/bootloader); repurposing may disable serial programming and debug logs
GPIO45Strapping PinDetermines the VDD_SPI voltage for external memory interfacing. A LOW state sets the bus voltage to 3.3V. A HIGH state forces the bus to 1.8V. Default state: LOW (Pull-down)
GPIO46Strapping PinControls ROM debug message printing. If pulled HIGH, diagnostic debug messages are printed to the primary serial console during the boot sequence. Default state: LOW (Pull-down)
GPIO47
GPIO48

The image below shows which GPIO pins can be used safely.

esp32 s3 devkitc safe gpio pins

ESP32-S3 DevKitC Interrupt Pins

Unlike microcontrollers with dedicated, singular interrupt pins, the ESP32-S3 uses an advanced Interrupt Matrix. This matrix allows absolutely any functional GPIO pin to be configured as an external interrupt source.

The ESP32-S3 supports four different trigger modes that determine exactly when this interruption happens:

ModeTrigger ConditionTypical Use Cases
RISINGPin transitions from LOW to HIGHButton press detection (pull-down)
FALLINGPin transitions from HIGH to LOWButton press detection (pull-up)
CHANGEPin changes state (either direction)Encoder reading, pulse counting
LOWPin remains at LOW levelLevel-triggered events

ESP32-S3 DevKitC RTC GPIO Pins

Some GPIO pins on the ESP32-S3 are connected to the RTC, or real-time clock, low-power system. These pins are called RTC GPIOs. On the ESP32-S3 DevKitC, these are GPIO0 through GPIO21.

esp32 s3 devkitc rtc pins

These pins are especially important when the ESP32 is in deep sleep mode. They can wake the chip up when an external event happens, such as a person pressing a button, a PIR motion sensor detecting movement, or an accelerometer sending an alert signal.

ESP32-S3 DevKitC Strapping Pins

Strapping pins are a special set of highly sensitive GPIOs that determine how the microcontroller behaves when it first wakes up. At the exact millisecond the ESP32-S3 boots or resets, the chip physically checks the voltage levels on these specific pins. The voltages detected during this tiny window tell the chip how to boot, how to handle debugging, and what voltage to send to the flash memory.

The ESP32-S3 has four critical strapping pins: GPIO0, GPIO3, GPIO45, and GPIO46.

esp32 s3 devkitc strapping pins
Pin NumberInternal Default StateCore Function During Boot Sequence
GPIO0Pull-up (HIGH)Determines the primary boot mode. If allowed to remain HIGH, the chip boots normally from its memory. If pulled LOW during reset, it enters Download Mode, allowing you to flash new firmware via USB or UART.
GPIO3FloatingSelects the configuration for the JTAG signal source, which is used for advanced debugging.
GPIO45Pull-down (LOW)Sets the voltage for external memory. A LOW state sets the memory bus voltage to 3.3V, while a HIGH state forces it to 1.8V.
GPIO46Pull-down (LOW)Controls diagnostic messages. If pulled HIGH, the chip prints helpful debug messages to your computer screen during the boot sequence.

Each of these pins has a weak internal pull-up or pull-down resistor. These resistors set a default state for the pin if nothing else is connected to it. So, you do not need to worry about these pins, as the board has already correctly configured them for normal use.

Warning:

Strapping pins should always be used with extra care. Before connecting sensors, or modules to them, you should make sure they will not force the wrong logic level during startup.

For instance, if you attach a sensor or switch that accidentally holds GPIO 0 LOW when you turn the power on, the ESP32-S3 will silently enter Download Mode and completely refuse to run your code.

GPIO45 can cause an even more serious problem. If an external module forces GPIO 45 HIGH during boot, the chip will configure its memory regulator to supply only 1.8V. If the actual flash memory on the board is designed to work at 3.3V, the system will immediately experience a brownout and fail to boot.

ESP32-S3 DevKitC SPI Flash and PSRAM Pins

To achieve extreme processing performance, the ESP32-S3 relies heavily on its built-in memory chips: SPI Flash (for storing your firmware and program data), and PSRAM (for providing extra memory for applications while they are running). Because the main processor needs to communicate with these memory chips at incredibly high speeds, the specific pins connecting them are specially reserved and should not be changed or used for other purposes.

Standard Quad-SPI Pins (GPIO26 through GPIO32)

On standard ESP32-S3 modules, GPIO26 through GPIO32 are permanently connected to the built-in SPI Flash and PSRAM chips in Quad-SPI mode. Therefore, these pins should not be used for normal user applications.

Fortunately, you do not have to worry about accidentally using these on the ESP32-S3 DevKitC, as these pins are not exposed on the board’s headers. However, it is still important to know about them, especially if you use a different ESP32-S3 board or work with a bare chip in a custom design.

Octal-SPI Expansion Pins (GPIO33 through GPIO37)

One feature that makes the ESP32-S3 different from some earlier chips is its support for ultra-fast Octal-SPI (OPI) memory. This type of memory is essential for heavy tasks like buffering Artificial Intelligence models or rendering large graphics.

If your specific board utilizes this Octal memory (which can be identified in chip versions such as ESP32-S3R8 or ESP32-S3R8V), the memory bus expands to take up five extra pins: GPIO33 through GPIO37. On these upgraded development boards, these specific pins become strictly reserved.

esp32 s3 devkitc octal spi expansion pins

ESP32-S3 DevKitC ADC Pins

The ESP32-S3 integrates two separate, high-performance SAR ADCs: ADC1 and ADC2. These let the board read analog voltages from sensors such as potentiometers, light sensors, or temperature sensors. On the ESP32-S3 DevKitC board, there are 20 pins that can be used for analog input.

GPIO1 through GPIO10 belong to ADC1, while GPIO11 through GPIO20 belong to ADC2.

esp32 s3 devkitc adc pins

These ADCs have a 12-bit resolution. This means they can divide the input voltage range into 4096 separate levels (from 0 to 4095). Because of this, the board can measure analog signals with fairly good detail.

Note:

Since the ADC2 module is also used by the Wi-Fi, it cannot be used when Wi-Fi is enabled. So, if your project needs Wi-Fi and analog input at the same time, it is better to use the ADC1 pins instead.

ADC Attenuation

Inside the chip, the ADC uses a baseline internal reference voltage, known as Vref, to measure incoming analog signals. While this exact voltage varies slightly from chip to chip, the median Vref is roughly 1.1V.

To measure voltages higher than Vref safely, the ESP32-S3 uses a software-controlled feature called attenuation. Attenuation essentially scales down the incoming voltage before the ADC processes it. By increasing the attenuation level in your code, you expand the maximum measurable range of your analog pins.

There are 4 available attenuation options:

Attenuation ConfigurationMeasurable Input Voltage Range
ADC_ATTEN_DB_0 (0 dB)0 mV ~ 950 mV
ADC_ATTEN_DB_2_5 (2.5 dB)0 mV ~ 1250 mV
ADC_ATTEN_DB_6 (6 dB)0 mV ~ 1750 mV
ADC_ATTEN_DB_11 (11 dB)0 mV ~ 3100 mV

ESP32-S3 DevKitC Capacitive-Touch Pins

The ESP32-S3 has 14 capacitive touch-sensing GPIOs: GPIO 1 to GPIO 14.

esp32 s3 devkitc touch pins

These pins can detect when something conductive, like your finger, comes close to them. They work by measuring a change in capacitance. When your finger gets near the pin, it slightly changes the electrical properties of the circuit, and the board recognizes this change as a touch.

You do not have to touch the pins directly. If you attach a conductive material such as aluminum foil, conductive fabric, or conductive paint to one of these pins, you can turn that material into a touch pad. This makes it easy to build creative projects, such as custom buttons, touch lamps, or interactive art.

ESP32-S3 DevKitC I2C Pins

The ESP32-S3 features two completely independent hardware I2C controllers. These controllers can operate in standard mode (100 kbit/s), fast mode (400 kbit/s), and higher speeds depending on bus capacitance.

Unlike some other functions on the ESP32-S3, the I2C controllers are not assigned to fixed pins by default. Instead, it can be mapped to any GPIO pin through the GPIO Matrix.

Warning:

There is one crucial hardware detail you must remember when wiring your I2C devices. You must add external pull-up resistors—typically between 4.7 kΩ and 10 kΩ—to both the SDA and SCL lines. If you rely solely on the chip’s weak internal pull-up resistors, which are about 45 kΩ, your electrical signals may rise too slowly, especially on longer wires or buses with higher capacitance. This can lead to communication errors or cause the I2C bus to stop working properly.

ESP32-S3 DevKitC UART Pins

The ESP32-S3 has three hardware UART controllers: UART0, UART1, and UART2.

esp32 s3 devkitc uart pins

UART0 is mainly used for the console and debugging. By default, UART0 is assigned to GPIO43 for TX and GPIO44 for RX on ESP32-S3 modules. These pins are important because they output the ROM bootloader messages and allow you to debug your code through a serial monitor. Reassigning these pins in your software is highly discouraged because doing so will completely disable your main debugging console.

UART1 is assigned by default to GPIO17 for TX and GPIO18 for RX on ESP32-S3 modules. However, it can be moved to other GPIO pins via the GPIO Matrix.

UART2 is completely unassigned by default, which means you can map it to almost any GPIO pin through the GPIO Matrix.

The table below shows the default TX and RX pins for each UART controller on the ESP32-S3 DevKitC.

UART controllerTXRXRemarks
UART0GPIO43GPIO44Primary debug console. Reassigning is highly discouraged.
UART1GPIO17GPIO18Default pins shown, but can be freely mapped to any GPIO.
UART2UnassignedUnassignedCompletely free to be mapped to any GPIO.

ESP32-S3 DevKitC SPI Pins

The ESP32-S3 contains four SPI controllers: SPI0, SPI1, SPI2, and SPI3.

esp32 s3 devkitc spi pins

SPI0 and SPI1 are strictly reserved for the chip’s internal Flash memory and PSRAM, which we discussed earlier. Therefore, you cannot use them. That leaves SPI2 and SPI3 fully available for your applications.

By default, SPI2 is connected directly through the IO MUX to these native pins:

SPI SignalSPI2 Pin Mapping
SCK / CLKGPIO12
MOSIGPIO11
MISOGPIO13
CS (Chip Select)GPIO10

Although SPI2 can still be assigned to other GPIO pins through the GPIO Matrix, it is highly recommended to stick to these default hardware pins. Using the direct IO MUX connection bypasses the internal routing delays, allowing you to achieve blazing-fast clock speeds of up to 80 MHz.

Finally, SPI3 is completely unassigned by default. You can freely map it to any available GPIO pin using the GPIO Matrix.

ESP32-S3 DevKitC I2S Pins

The ESP32-S3 contains two I2S peripherals (I2S0 and I2S1) designed specifically for transferring high-fidelity, synchronized digital audio.

An I2S connection usually needs at least three signal lines–the Bit Clock (BCLK), the Word Select (WS), and the Serial Data line (DIN/DOUT). In some cases, a Master Clock (MCLK) is also used to keep external audio devices synchronized.

Fortunately, standard audio sample rates, such as 44.1 kHz and 48 kHz, are well within the speed that the GPIO Matrix can handle. So, I2S signals can be safely routed to almost any available GPIO pin.

ESP32-S3 DevKitC PWM Pins

Every exposed GPIO pin on the ESP32-S3 DevKitC, including GPIO0 through GPIO21 and GPIO35 through GPIO48, can output a high-resolution PWM signal.

esp32 s3 devkitc pwm pins

The microcontroller offers two distinct ways to handle these signals depending on the complexity of your project.

LED PWM Controller (LEDC)

For standard, everyday tasks like fading LEDs, sweeping small servos, or controlling a simple heating element, you will use the LED PWM Controller (LEDC). This controller provides eight completely independent PWM output channels, giving you incredibly fine-tuned control over the frequency and duty cycle of your signals. Because the signals can be routed through the GPIO Matrix, they can be assigned to almost any physical pin.

Motor Control PWM (MCPWM)

For complex robotics and industrial motor control, the ESP32-S3 features a highly sophisticated dedicated MCPWM (Motor Control Pulse Width Modulator) controller. This dedicated hardware is engineered specifically to drive complex H-bridges, Brushed DC motors, and Brushless DC (BLDC) motors. It supports advanced features such as hardware dead-time insertion (to prevent H-bridge short circuits), fault handling, and carrier modulation.

ESP32-S3 DevKitC Two-Wire Automotive Interface (TWAI/CAN) Pins

The TWAI controller is the ESP32-S3’s native hardware implementation of the CAN (Controller Area Network) bus protocol. It is strictly compliant with the ISO 11898-1 specification (CAN 2.0B), supporting both standard 11-bit and extended 29-bit message identifiers.

Because standard CAN bus speeds go up to 1 Mbps, the TWAI signals (TX, RX, BUS-OFF, and CLKOUT) can be routed through the GPIO Matrix to any available pin on the board without any problem.

However, the ESP32-S3 operates strictly on 3.3V logic, meaning it cannot directly produce the differential voltage signals needed by a real CAN bus. To safely connect your DevKitC board to a CAN bus, you must use an external 3.3V CAN transceiver chip (such as the SN65HVD230 or the TJA1051T/3).

ESP32-S3 DevKitC USB-OTG Interface

One of the greatest advantages of the ESP32-S3 is its native full-speed USB 1.1 OTG (On-The-Go) controller.

However, It’s important to remember that this USB interface is permanently hardwired to GPIO19 for D- and GPIO20 for D+. These pins provide simultaneous Serial console emulation (CDC) and advanced hardware JTAG debugging through a single Type-C cable connection.

esp32 s3 devkitc usb otg pins

Warning:

Since GPIO19 and GPIO20 are tied directly to the built-in USB system, you should avoid using these pins for other purposes. If you accidentally reconfigure GPIO 19 or GPIO 20 to act as standard digital inputs or outputs, you will instantly sever the internal USB connection and completely lock yourself out of USB communication!

ESP32-S3 DevKitC Traditional Hardware JTAG Pins

While the built-in USB-JTAG interface is incredibly convenient, sometimes you might desperately need GPIO 19 and 20 for some other purpose. In that case, the ESP32-S3 retains support for traditional hardware JTAG debugging.

By default, this interface is connected directly through the IO MUX to these native pins:

JTAG SignalDefault GPIO Pin
MTCKGPIO39
MTDOGPIO40
MTDIGPIO41
MTMSGPIO42
esp32 s3 devkitc jtag pins

If hardware JTAG debugging is not needed in the final project, these four pins can be used again as normal GPIO pins without restriction.

ESP32-S3 DevKitC Onboard RGB LED Pin

The DevKitC board features a built-in, addressable WS2812 RGB LED, which is fantastic for adding visual feedback to your projects.

However, the specific pin this LED connects to depends entirely on your board’s hardware version. On the DevKitC-1 v1.0, the LED is wired to GPIO 48, while the newer DevKitC-1 v1.1 routes it to GPIO 38 instead.

esp32 s3 devkitc rgb led pins

Because of this hardware change, you must always verify your specific board version before writing your code to ensure your LED lights up as expected.

ESP32-S3 DevKitC Power Pins

The ESP32-S3 DevKitC has several power pins. These pins are used to power the board itself and can also provide power to sensors, modules, and other external components connected to it.

esp32 s3 devkitc power pins

Type-C USB ports (the USB-to-UART Port and the ESP32-S3 USB Port) are the primary method for powering the ESP32-S3 DevKitC development board. When you connect the board to a computer or a USB wall adapter, the USB connection supplies 5V power to an onboard Low-Dropout (LDO) voltage regulator. This regulator steps the 5V down to a stable 3.3V, which is required by the ESP32-S3 chip and the other parts on the board.

5V pin gives you another way to power the ESP32-S3 DevKitC. If you want to run your project away from a computer, you can use this pin. By connecting a battery pack or an external power adapter that supplies between 4.3V and 6.0V, you can power the board directly. Just like with USB power, the onboard regulator will step this voltage down to 3.3V for the rest of the circuit.

3V3 pin serves a dual purpose depending on your setup. In most cases, when the board is powered through USB or through the 5V pin, the 3V3 pin acts as an output. It provides a stable 3.3V supply that can be used to power small 3.3V sensors or modules connected to the board. You just need to monitor your overall current draw, as the ESP32-S3 itself can pull up to 500mA during heavy Wi-Fi transmission bursts.

Alternatively, the 3V3 pin can also be used as an input. If you already have a very stable 3.3V external battery or power supply, you can feed that power directly into the 3V3 pin. This method completely bypasses the onboard regulator and feeds power directly to the microcontroller’s logic circuits.

ESP32-S3 DevKitC Control Pins

esp32 s3 devkitc control pins

BOOT Button (GPIO 0) is physically connected to GPIO 0. Holding this button forces the strapping logic to a physical LOW state, causing the ESP32-S3 to enter the bootloader mode.

RESET Button (CHIP_PU) is tied to the chip’s enable line (CHIP_PU). Pressing it briefly cuts power to the main digital logic, immediately halting the microcontroller and forcing it to restart.

Shreepad Prabhu

Shreepad Prabhu

Shreepad is a passionate Electronics & Telecommunication Engineer with a deep love for embedded systems. He has over 15 years of experience, including his time as a Senior Embedded Engineer at Micromax contributing to solutions for Thermo Fisher Scientific, Tata Motors, Liebherr, and John Deere. Since co-founding Last Minute Engineers in 2018, he has written hundreds of articles and guides for Last Minute Engineers to help makers build with confidence. You can find him on LinkedIn