The ESP32-S series (specifically the S2 and S3) represents a massive architectural shift from the original ESP32. If you are looking for an ESP32S pinout diagram, you must first verify your exact module variant. The S3 introduces native USB, Octal SPI support, and completely different strapping pin behaviors. Feeding 5V into an S3 GPIO or miswiring a strapping pin will permanently brick the input pad or trap the chip in a boot loop. Below is the definitive hardware reference for the ESP32-S3 DevKitC-1, the most common development board in 2026.
The ESP32-S3 Pinout Reference Table
This table maps the physical pins on a standard 38-pin ESP32-S3 DevKitC-1 to their internal GPIO numbers and primary functions. Always cross-reference this with your specific module's flash configuration (e.g., N8R2 vs. N16R8).
| Physical Pin | GPIO Number | Default / Primary Function | S3 Special Notes & Restrictions | 5V Tolerant? |
|---|---|---|---|---|
| 3V3 | N/A | Power Output (3.3V) | Max draw ~500mA depending on onboard LDO. | N/A |
| GND | N/A | Ground Reference | Connect to all sensor GNDs. Multiple pins available. | N/A |
| 5V / VBUS | N/A | USB 5V Input/Output | Directly tied to USB VBUS. Do not backfeed >5.5V. | N/A |
| TX0 / RX0 | GPIO43 / GPIO44 | Default UART0 (Serial) | Used for Arduino Serial monitor and flashing via UART. |
No |
| D+ / D- | GPIO20 / GPIO19 | Native USB (Serial/JTAG) | Used for Serial over USB and hardware debugging. |
No |
| A0 - A7 | GPIO1 - GPIO8 | General GPIO / ADC1 | Safe for general I2C/SPI/ADC. No strapping conflicts. | No |
| SPI_Pins | GPIO11 - GPIO14 | Default SPI (SPI2) | Standard SPI bus for SD cards, displays, and peripherals. | No |
| Flash_Pins | GPIO35 - GPIO42 | SPI Flash / PSRAM | CRITICAL: Unavailable on N16R8 (Octal) modules. | No |
| BOOT | GPIO0 | Strapping Pin / Boot Button | Must be LOW on reset to enter bootloader. Has internal pull-up. | No |
Rows People Get Wrong (And How They Burn Boards)
- The Octal Flash Trap (GPIO35–GPIO42): If you bought an ESP32-S3-WROOM-1-N16R8 (16MB Flash, 8MB PSRAM), it uses Octal (8-line) SPI. This permanently consumes GPIO35 through GPIO42 internally. If your ESP32-S3 datasheet variant is N16R8, these pins do not exist on the breakout board. If you have an N8R2 (Quad SPI), they are available. Always check the module label.
- The 5V Tolerance Myth: Unlike some STM32 or 5V-tolerant Arduino ports, zero GPIOs on the ESP32-S3 are 5V tolerant. The absolute maximum voltage on any GPIO is 3.6V. Feeding a 5V I2C sensor directly into GPIO8 will destroy the silicon pad. Use a bidirectional level shifter like the TXS0108E or a simple CD4050 buffer.
- Strapping Pin Conflicts (GPIO0, GPIO3, GPIO45, GPIO46): These pins dictate boot mode and log output. If you wire a relay or a sensor that pulls GPIO0 LOW during power-up, the ESP32-S3 will enter the serial bootloader and your application code will never run.
Wiring Color Standards: IEC vs. Maker Conventions
When building harnesses for ESP32 projects, you will encounter conflicting wire color standards. Mains electricians follow IEC or NEC, while embedded makers follow proprietary ecosystem standards. Mixing these up on a bench leads to reversed polarity and dead sensors.
| Standard / Region | Positive / VCC | Negative / GND | Data / Signal (I2C SDA/SCL) | Where It Applies |
|---|---|---|---|---|
| IEC 60446 (EU/Global DC) | Brown | Blue | Black / Grey | Industrial DC panels, robotics, PSU wiring. |
| NEC (US DC Practice) | Red | Black or White | Yellow / Green | US-based custom DC harnesses, automotive. |
| Old UK (Pre-2004 DC) | Red | Black | Yellow | Legacy UK equipment; largely superseded by IEC. |
| Adafruit (STEMMA QT) | Red (VIN/3V) | Black (GND) | Blue (SDA), Yellow (SCL) | Adafruit ecosystem, JST-PH connectors. |
| SparkFun (Qwiic) | Red (3.3V) | Black (GND) | Blue (SDA), Yellow (SCL) | SparkFun ecosystem, 1mm pitch JST connectors. |
| Generic Dupont / Sensors | Red (VCC) | Black (GND) | Green / White / Yellow | Standard hobbyist jumper wires, DHT22, BME280. |
Safe Interpretation When Markings Are Faded or Missing
Cheap clone DevKits often suffer from poor silkscreen quality. After a few weeks on the bench, the GPIO numbers rub off, leaving you with a board full of unmarked headers. Here is the exact diagnostic procedure to safely map an unmarked ESP32-S3 board without risking a short circuit.
- Identify Ground (GND): Set your multimeter to continuity mode (beep). Place the black probe on the metal shield of the USB-C port. Probe the header pins with the red probe. Any pin that beeps (reads < 1 ohm) is GND. The ESP32-S3 DevKit usually has 3 to 4 GND pins.
- Identify 5V (VBUS): With the board powered via USB, switch the multimeter to DC Voltage. Black probe on a known GND pin. Red probe on the remaining power pins. The one reading 4.7V–5.2V is VBUS. Do not use this pin to power 5V sensors unless your total draw is under 500mA.
- Identify 3.3V: Using the same voltage test, find the pin reading exactly 3.25V–3.35V. This is your main logic VCC.
- Verify Flash Configuration via Software: If the silkscreen is gone, you won't know if GPIO35-42 are safe to use. Connect the board via USB and run the Espressif toolchain command in your terminal:
esptool.py --port COM3 flash_id
If the output shows an Octal flash chip (or you identify the module as N16R8 via the FCC ID printed on the metal can), cross GPIO35-42 off your available pin list.
ESP32S Pinout Diagram FAQ
Can I use any GPIO for I2C on the ESP32-S3?
Technically, the ESP32-S3's GPIO matrix allows you to route the I2C peripheral to almost any pin. However, in practice, you should avoid strapping pins (GPIO0, GPIO3, GPIO45, GPIO46) and native USB pins (GPIO19, GPIO20). The most reliable, conflict-free I2C pins for general sensors are GPIO1 through GPIO8, or GPIO17 and GPIO18. Always remember to enable internal pull-ups in your code (Wire.begin(SDA, SCL) in Arduino handles this, but external 4.7kΩ resistors are recommended for bus stability over 10cm).
Why is my ESP32-S3 stuck in a boot loop after wiring a sensor?
This is almost always a strapping pin violation. If your sensor board has external pull-down resistors on its SDA/SCL lines, and you happen to wire those to GPIO0 or GPIO45, the ESP32-S3 will read a LOW state on those pins during the 50ms reset window. This forces the chip into SPI boot mode or alters the SPI clock speed, preventing your application from loading. Move the I2C bus to GPIO1 and GPIO2, and ensure your sensors do not forcefully pull strapping pins low on startup.
Are any ESP32-S3 pins 5V tolerant?
No. The ESP32-S3 is fabricated on a low-power process node with a maximum absolute rating of 3.6V on any I/O pad. Unlike the original ESP32 (which had a few debated 5V-tolerant input-only pins, though still risky), the S3 has zero 5V tolerance. If you must interface with a 5V device (like a WS2812B LED strip or a 5V UART GPS module), you must use a level shifter. For one-way signals (like LED data), a simple 74AHCT125 or a resistor voltage divider works. For bidirectional I2C, use a dedicated MOSFET-based level shifter module.






