ESP32-S3-DevKitC-1 pinout
Espressif's own ESP32-S3 board: Wi-Fi, Bluetooth LE, two USB ports and an RGB LED. Breadboard friendly, 3.3 V logic.
The real app with a simulated ESP32-S3-DevKitC-1, running in your browser. No install, nothing to plug in.
At a glance
- Chip
- ESP32-S3 (ESP32-S3-WROOM-1-N8R8)
- Processor
- Dual-core Xtensa LX7 at 240 MHz, 512 KB SRAM, 8 MB flash, 8 MB octal PSRAM, Wi-Fi and Bluetooth LE
- Logic level
- 3.3 V. Not 5 V tolerant unless marked below.
- Flashing tool
- esptool
- Arduino board (FQBN)
- esp32:esp32:esp32s3
- Live pin view in BoardPilot
- Yes (diagnostic agent available)
Pins to avoid or use with care
Flash memory: 37, 36, 35
Wired to the flash memory. Never use them.
Boot-critical strapping pins: 45
A wrong level at reset stops the board from booting.
Strapping pins: 3, 46, 0
Their level at reset changes how the board boots. Usually fine after boot.
USB serial: TX (GPIO43), RX (GPIO44)
Used for uploading and the serial monitor. Anything connected here can break uploads.
Native USB: 20, 19
The USB data lines. Using them breaks USB uploads and the serial monitor.
Good pins for LEDs, buttons and signals
4, 5, 6, 7, 15, 16, 17, 18, 21, 47, 1, 2, 14
Default pins in Arduino
- I2C
- SDA = 8, SCL = 9. Any output-capable pins work with Wire.begin(sda, scl). Any GPIO can be I2C on the ESP32-S3. Arduino's Wire uses GPIO 8 (SDA) and GPIO 9 (SCL) by default.
- SPI
- MOSI = 11, MISO = 13, SCK = 12, CS = 10.
- Analog inputs
- 1, 2, 4, 5, 6, 7, 10, 3, 8, 9 (0–3.3 V)
How to flash it
Use the port labelled UART. If uploading does not start, hold BOOT, press and release RESET, then release BOOT.
All 44 pins
| Pin | GPIO | Chip pin | Functions | Notes |
|---|---|---|---|---|
| 3V3 | — | 3V3 | 3.3 V from the on-board regulator. You can feed 3.3 V in here instead of USB, but never both at once. | |
| 3V3 | — | 3V3 | Same 3.3 V rail as the other 3V3 pin. | |
| RST | — | CHIP_PU | Reset. Pulling it LOW restarts the chip (same as the RESET button). | |
| 4 | 4 | GPIO, RTC_GPIO4, TOUCH4, ADC1_CH3 | ||
| 5 | 5 | GPIO, RTC_GPIO5, TOUCH5, ADC1_CH4 | ||
| 6 | 6 | GPIO, RTC_GPIO6, TOUCH6, ADC1_CH5 | ||
| 7 | 7 | GPIO, RTC_GPIO7, TOUCH7, ADC1_CH6 | ||
| 15 | 15 | GPIO, RTC_GPIO15, U0RTS, ADC2_CH4, XTAL_32K_P | ||
| 16 | 16 | GPIO, RTC_GPIO16, U0CTS, ADC2_CH5, XTAL_32K_N | ||
| 17 | 17 | GPIO, RTC_GPIO17, U1TXD, ADC2_CH6 | ||
| 18 | 18 | GPIO, RTC_GPIO18, U1RXD, ADC2_CH7, CLK_OUT3 | ||
| 8 | 8 | GPIO, RTC_GPIO8, TOUCH8, ADC1_CH7, SUBSPICS1, I2C_SDA (default) | Arduino's default I2C SDA pin on the ESP32-S3. | |
| 3 | 3 | GPIO, RTC_GPIO3, TOUCH3, ADC1_CH2 | Strapping pin for the JTAG source. It is ignored unless special eFuses are burned, so it is normally fine to use. | |
| 46 | 46 | GPIO | Strapping pin: keep it LOW (its default) at reset, or uploading may fail. | |
| 9 | 9 | GPIO, RTC_GPIO9, TOUCH9, ADC1_CH8, FSPIHD, SUBSPIHD, I2C_SCL (default) | Arduino's default I2C SCL pin on the ESP32-S3. | |
| 10 | 10 | GPIO, RTC_GPIO10, TOUCH10, ADC1_CH9, FSPICS0, FSPIIO4, SUBSPICS0, SPI_CS (default) | ||
| 11 | 11 | GPIO, RTC_GPIO11, TOUCH11, ADC2_CH0, FSPID, FSPIIO5, SUBSPID, SPI_MOSI (default) | ||
| 12 | 12 | GPIO, RTC_GPIO12, TOUCH12, ADC2_CH1, FSPICLK, FSPIIO6, SUBSPICLK, SPI_SCK (default) | ||
| 13 | 13 | GPIO, RTC_GPIO13, TOUCH13, ADC2_CH2, FSPIQ, FSPIIO7, SUBSPIQ, SPI_MISO (default) | ||
| 14 | 14 | GPIO, RTC_GPIO14, TOUCH14, ADC2_CH3, FSPIWP, FSPIDQS, SUBSPIWP | ||
| 5V | — | 5V | 5 V from the USB ports. You can power the board here with 5 V instead of USB, but never both at once. | |
| G | — | GND | ||
| G | — | GND | ||
| TX | 43 | GPIO43 | GPIO, U0TXD, CLK_OUT1 | USB serial TX through the CP2102N (port labelled UART). Used for uploading and the serial monitor. |
| RX | 44 | GPIO44 | GPIO, U0RXD, CLK_OUT2 | USB serial RX through the CP2102N (port labelled UART). Used for uploading and the serial monitor. |
| 1 | 1 | GPIO, RTC_GPIO1, TOUCH1, ADC1_CH0 | ||
| 2 | 2 | GPIO, RTC_GPIO2, TOUCH2, ADC1_CH1 | ||
| 42 | 42 | GPIO, MTMS | ||
| 41 | 41 | GPIO, MTDI, CLK_OUT1 | ||
| 40 | 40 | GPIO, MTDO, CLK_OUT2 | ||
| 39 | 39 | GPIO, MTCK, CLK_OUT3, SUBSPICS1 | ||
| 38 | 38 | GPIO, FSPIWP, SUBSPIWP, RGB_LED | Drives the RGB LED on v1.1 boards. Arduino's RGB_BUILTIN points to GPIO 48 (the v1.0 LED pin), so use 38 for this LED. | |
| 37 | 37 | GPIO, SPIDQS, FSPIQ, SUBSPIQ | Used inside the module by the octal PSRAM (N8R8 and other R8 / R16V boards). Not available: do not use. | |
| 36 | 36 | GPIO, SPIIO7, FSPICLK, SUBSPICLK | Used inside the module by the octal PSRAM (N8R8 and other R8 / R16V boards). Not available: do not use. | |
| 35 | 35 | GPIO, SPIIO6, FSPID, SUBSPID | Used inside the module by the octal PSRAM (N8R8 and other R8 / R16V boards). Not available: do not use. | |
| 0 | 0 | GPIO, RTC_GPIO0 | Strapping pin wired to the BOOT button: LOW at reset starts upload mode instead of your program. | |
| 45 | 45 | GPIO | Strapping pin: HIGH at reset selects 1.8 V flash voltage, so the board may not boot. Keep it LOW or floating at reset. | |
| 48 | 48 | GPIO, SPICLK_N, SUBSPICLK_N_DIFF | Free on v1.1 boards. On the older v1.0 board this pin drives the RGB LED. | |
| 47 | 47 | GPIO, SPICLK_P, SUBSPICLK_P_DIFF | ||
| 21 | 21 | GPIO, RTC_GPIO21 | ||
| 20 | 20 | GPIO, RTC_GPIO20, U1CTS, ADC2_CH9, CLK_OUT1, USB_D+ | Native USB D+ (the port labelled USB). Using it breaks that USB port. | |
| 19 | 19 | GPIO, RTC_GPIO19, U1RTS, ADC2_CH8, CLK_OUT2, USB_D- | Native USB D- (the port labelled USB). Using it breaks that USB port. | |
| G | — | GND | ||
| G | — | GND |
Questions
Which pins are I2C on the ESP32-S3-DevKitC-1?
SDA is 8 and SCL is 9 (the defaults of the Arduino Wire library). You can move I2C to other pins with Wire.begin(sda, scl).
Which ESP32-S3-DevKitC-1 pins should I avoid?
37, 36, 35 (flash memory); 45 (stops booting if held at the wrong level); 20, 19 (native USB); TX, RX (USB serial link).
Is the ESP32-S3-DevKitC-1 5 V tolerant?
No. The pins take at most 3.3 V. Use a level shifter or a voltage divider for 5 V signals.
Which pins can read analog voltage on the ESP32-S3-DevKitC-1?
1, 2, 4, 5, 6, 7, 10, 3, 8, 9, from 0 to 3.3 V.
How do I upload code to the ESP32-S3-DevKitC-1?
In the Arduino IDE pick the board esp32:esp32:esp32s3 (core esp32:esp32). Use the port labelled UART. If uploading does not start, hold BOOT, press and release RESET, then release BOOT.
Wiring guides for the ESP32-S3-DevKitC-1
Step-by-step wiring, voltage checks and test code for the most used parts:
BME280 BMP280 DHT22 DHT11 HC-SR04 SSD1306 OLED MPU6050 DS18B20 WS2812B LED strip SG90 servo Relay module HC-SR501 PIR LCD 1602 I2C INA219 VL53L0X BH1750 MAX30102 RC522 RFID NEO-6M GPS Capacitive soil moisture sensor ADS1115 TM1637 28BYJ-48 stepper L298N Potentiometer Push button LED Joystick module SD card module AHT20
Compare
ESP32 DevKit vs ESP32-S3-DevKitC-1
Learn the basics
Lesson: What is a microcontroller? Lesson: Hardware basics for software developers Lesson: GPIO: pins in and out Pinout GPIO Logic level (HIGH and LOW) esptool
Check your wiring with BoardPilot
BoardPilot shows this board in 3D, flags risky pins as you wire, and flashes it safely with a backup first.
Download BoardPilotSources
- ESP32-S3-DevKitC-1 v1.1 user guide, Header Block (J1, J3), Description of Components, Hardware Revision Details
- ESP32-S3-DevKitC-1 v1.1 schematic (2022-11-30), Sheet 2: CP2102N-A02, two micro-USB connectors, RGB LED on GPIO38, BOOT on GPIO0
- ESP32-S3-DevKitC-1 v1.1 dimensions (DXF 2022-04-29), Board outline, header pad centres, component outlines
- ESP32-S3 Series Datasheet v2.2, 3 Boot Configurations (strapping pins GPIO0, 3, 45, 46; Tables 3-1, 3-3, 3-4, 3-5)
- ESP32-S3-WROOM-1 / 1U Datasheet v1.8, Pin Definitions note b: IO35-37 used by octal PSRAM; Table 1-1 ordering codes
- ESP-IDF Programming Guide (ESP32-S3), ADC Oneshot: Hardware Limitations (ADC2 is also used by Wi-Fi)
- arduino-esp32 variants/esp32s3/pins_arduino.h, SDA 8, SCL 9, SS 10, MOSI 11, MISO 13, SCK 12, PIN_RGB_LED 48, USB 303a:1001
- Board data file and source notes on GitHub