PinoutESP32-S344 pins

ESP32-S3 pinout

All 44 holes on the Lonely Binary ESP32-S3, what each one can do, and the twelve that are already spoken for before you wire anything.

ESP32-S3 Gold EditionInteractiveOpen the ESP32-S3 in 3DTurn the real board over and click any of its 44 holes. Every pad is placed from this design’s own net list.Open in 3D →

Reading this board

Two 22-pin headers, 44 holes: 36 GPIO and eight power. The S3's GPIO matrix routes almost any peripheral to almost any pin, which is why people assume every pin is free. On the N16R8 module we ship, twelve are not; the table at the bottom of this page names each one and what has it.

Every row is read from this design's own net list, so the hole in the table is the hole on your desk. Open the board in 3D to turn it over and click one.

What the module takes

GPIO35, 36 and 37 belong to the octal PSRAM, and nothing about the board says so: the pads sit on the header looking like any other pin while the PSRAM is already running on them, before your setup() gets a turn. Drive one and you corrupt PSRAM traffic, which takes the chip down rather than failing quietly.

On a quad-PSRAM (R2) or no-PSRAM module they are ordinary GPIO. Quad PSRAM shares the flash bus inside the module and needs nothing of yours.

When it will not boot

GPIO0, 3, 45 and 46 are sampled once, as the chip leaves reset, to pick boot mode, JTAG source and flash voltage. Afterwards they are yours.

A board that flashes and runs over USB, then will not start on its own supply, is almost always one of those four. Something you wired — a pull-down on GPIO0, an LED on GPIO46 — holds a strapping pin at the wrong level while the rail comes up, and USB was rising slowly enough to hide it. Boot it bare, then add one wire at a time.

GPIO26 to 34 are in none of this because they are not on the board: the flash bus lives inside the module and never comes out.

Power

3V3 is the output of an AMS1117-3.3, and the module, the bridge and both LEDs already draw from it. Budget about 500 mA for your own parts, less once the radio is transmitting — the regulator is the ceiling, not what the USB port is willing to give.

5V is bus voltage, present only when USB is connected. RST is the regulator enable line, pulled up: tie it to ground through a button for a second reset button. All four GND holes are the same net, spread across both rows.

Buses

Pin choices the examples on this site use. The UART rows are the chip's dedicated pins, not what the Arduino core defaults to; pass the pins you want to begin():

BusPinsNote
I²CSDA GPIO8, SCL GPIO9Remappable; 4.7 kΩ pull-ups needed if the module has none
SPI (HSPI)MOSI GPIO11, MISO GPIO13, SCK GPIO12, SS GPIO10
SPI3 (VSPI)MOSI GPIO35, SCK GPIO36, MISO GPIO37The PSRAM pins — unusable on an R8
UART0TX GPIO43, RX GPIO44The USB serial console — leave it alone
UART1TX GPIO17, RX GPIO18Serial1's dedicated pins, and yours; core 3.x defaults Serial1 to RX 15, TX 16, and Serial2 to RX 19, TX 20, which are the USB D− and D+ pins

ADC

ADC1 is GPIO1 to GPIO10 and works whatever Wi-Fi is doing. ADC2 is GPIO11 to GPIO20 and stops the moment Wi-Fi starts, because the driver hands the block to the radio front end; a read returns an error from then on rather than a wrong number. An analog reading that dies at exactly the line where you call WiFi.begin() is this, and the fix is an ADC1 pin.

That leaves nine you can trust on a connected board: GPIO1, 2 and 4 through 10. GPIO3 is ADC1 as well, but it is one of the four above, so whatever you attach has to be quiet at reset.

Capacitive touch is T1 to T14, on GPIO1 to GPIO14.

Pins to leave alone

  • GPIO15 — ADC2, so analogRead stops working the moment Wi-Fi starts. Unaffected as a digital pin.
  • GPIO16 — ADC2, so analogRead stops working the moment Wi-Fi starts. Unaffected as a digital pin.
  • GPIO17 — ADC2, so analogRead stops working the moment Wi-Fi starts. Unaffected as a digital pin.
  • GPIO18 — ADC2, so analogRead stops working the moment Wi-Fi starts. Unaffected as a digital pin.
  • GPIO3 — Strapping pin. Selects the JTAG source. Floating at reset is the normal state.
  • GPIO46 — Strapping pin. Controls the ROM boot message. Must be low at reset.
  • GPIO11 — ADC2, so analogRead stops working the moment Wi-Fi starts. Unaffected as a digital pin.
  • GPIO12 — ADC2, so analogRead stops working the moment Wi-Fi starts. Unaffected as a digital pin.
  • GPIO13 — ADC2, so analogRead stops working the moment Wi-Fi starts. Unaffected as a digital pin.
  • GPIO14 — ADC2, so analogRead stops working the moment Wi-Fi starts. Unaffected as a digital pin.
  • GPIO43 — UART0 TX, wired to the USB-UART bridge behind the second USB-C port.
  • GPIO44 — UART0 RX, wired to the USB-UART bridge behind the second USB-C port.
  • GPIO37 — Octal PSRAM strobe on the N16R8. The pad is still on the header, which is what makes it a trap: drive it and you corrupt the module's own traffic, which usually takes the chip down. Free on a module that does not need the line.
  • GPIO36 — Octal PSRAM data line on the N16R8. The pad is still on the header, which is what makes it a trap: drive it and you corrupt the module's own traffic, which usually takes the chip down. Free on a module that does not need the line.
  • GPIO35 — Octal PSRAM data line on the N16R8. The pad is still on the header, which is what makes it a trap: drive it and you corrupt the module's own traffic, which usually takes the chip down. Free on a module that does not need the line.
  • GPIO0 — BOOT button, with a 10 kΩ pull-up. Held low at reset it drops the chip into the ROM bootloader.
  • GPIO45 — Strapping pin. Sets VDD_SPI to 3.3 V or 1.8 V. Must be low at reset on a 3.3 V module.
  • GPIO48 — WS2812B RGB LED, single-wire at 800 kHz. The silkscreen says RGB@IO48.
  • GPIO20 — Native USB-C, D+ . Wired straight to the USB-Serial-JTAG peripheral, no bridge chip in the path.
  • GPIO19 — Native USB-C, D− . Wired straight to the USB-Serial-JTAG peripheral, no bridge chip in the path.

Every pin

PinNameFunctionsNotes
3V33.3 V railpowerL1. Output of the on-board regulator. Everything on the board runs from it, so budget what the regulator can spare, not what USB can deliver. A steady 3.3 V supply can also power the board through it, but never with USB plugged in at the same time.
3V33.3 V railpowerL2. Output of the on-board regulator. Everything on the board runs from it, so budget what the regulator can spare, not what USB can deliver. A steady 3.3 V supply can also power the board through it, but never with USB plugged in at the same time.
RSTEN / resetpowerL3. The regulator enable line, pulled up. Tie it to ground through a button and you have a reset button.
GPIO4GPIO4gpio, adc1, touchL4
GPIO5GPIO5gpio, adc1, touchL5
GPIO6GPIO6gpio, adc1, touchL6
GPIO7GPIO7gpio, adc1, touchL7
GPIO15GPIO15gpio, adc2ADC2, so analogRead stops working the moment Wi-Fi starts. Unaffected as a digital pin.
GPIO16GPIO16gpio, adc2ADC2, so analogRead stops working the moment Wi-Fi starts. Unaffected as a digital pin.
GPIO17GPIO17gpio, adc2, uartADC2, so analogRead stops working the moment Wi-Fi starts. Unaffected as a digital pin.
GPIO18GPIO18gpio, adc2, uartADC2, so analogRead stops working the moment Wi-Fi starts. Unaffected as a digital pin.
GPIO8GPIO8gpio, adc1, touch, i2cL12. Arduino default: Wire (I²C) SDA.
GPIO3GPIO3gpio, adc1, touchStrapping pin. Selects the JTAG source. Floating at reset is the normal state.
GPIO46GPIO46gpioStrapping pin. Controls the ROM boot message. Must be low at reset.
GPIO9GPIO9gpio, adc1, touch, i2cL15. Arduino default: Wire (I²C) SCL.
GPIO10GPIO10gpio, adc1, touch, spiL16. Arduino default: SPI (HSPI) SS.
GPIO11GPIO11gpio, adc2, touch, spiADC2, so analogRead stops working the moment Wi-Fi starts. Unaffected as a digital pin.
GPIO12GPIO12gpio, adc2, touch, spiADC2, so analogRead stops working the moment Wi-Fi starts. Unaffected as a digital pin.
GPIO13GPIO13gpio, adc2, touch, spiADC2, so analogRead stops working the moment Wi-Fi starts. Unaffected as a digital pin.
GPIO14GPIO14gpio, adc2, touchADC2, so analogRead stops working the moment Wi-Fi starts. Unaffected as a digital pin.
5V5 V railpowerL21. The USB rail, upstream of the regulator. Feed the board here if you are not using USB, or take 5 V out if you are.
GNDGroundpowerL22. Ground. Several holes so a breadboard build has one nearby wherever it needs it.
GNDGroundpowerR1. Ground. Several holes so a breadboard build has one nearby wherever it needs it.
GPIO43TXgpio, uartUART0 TX, wired to the USB-UART bridge behind the second USB-C port.
GPIO44RXgpio, uartUART0 RX, wired to the USB-UART bridge behind the second USB-C port.
GPIO1GPIO1gpio, adc1, touchR4
GPIO2GPIO2gpio, adc1, touchR5
GPIO42GPIO42gpio, jtagR6
GPIO41GPIO41gpio, jtagR7
GPIO40GPIO40gpio, jtagR8
GPIO39GPIO39gpio, jtagR9
GPIO38GPIO38gpioR10
GPIO37GPIO37gpio, spiOctal PSRAM strobe on the N16R8. The pad is still on the header, which is what makes it a trap: drive it and you corrupt the module's own traffic, which usually takes the chip down. Free on a module that does not need the line.
GPIO36GPIO36gpio, spiOctal PSRAM data line on the N16R8. The pad is still on the header, which is what makes it a trap: drive it and you corrupt the module's own traffic, which usually takes the chip down. Free on a module that does not need the line.
GPIO35GPIO35gpio, spiOctal PSRAM data line on the N16R8. The pad is still on the header, which is what makes it a trap: drive it and you corrupt the module's own traffic, which usually takes the chip down. Free on a module that does not need the line.
GPIO0GPIO0gpioBOOT button, with a 10 kΩ pull-up. Held low at reset it drops the chip into the ROM bootloader.
GPIO45GPIO45gpioStrapping pin. Sets VDD_SPI to 3.3 V or 1.8 V. Must be low at reset on a 3.3 V module.
GPIO48GPIO48gpioWS2812B RGB LED, single-wire at 800 kHz. The silkscreen says RGB@IO48.
GPIO47GPIO47gpioR17
GPIO21GPIO21gpioR18
GPIO20GPIO20gpio, adc2, usbNative USB-C, D+ . Wired straight to the USB-Serial-JTAG peripheral, no bridge chip in the path.
GPIO19GPIO19gpio, adc2, usbNative USB-C, D− . Wired straight to the USB-Serial-JTAG peripheral, no bridge chip in the path.
GNDGroundpowerR21. Ground. Several holes so a breadboard build has one nearby wherever it needs it.
GNDGroundpowerR22. Ground. Several holes so a breadboard build has one nearby wherever it needs it.

For this board

  • Electronics Starter Kit: Breadboard, Power Module and Loose Parts — A boxed set of the parts most breadboard circuits start with: an 830-point breadboard, a USB-C power module switchable between 3.3 V and 5 V, jumper wires, resistors, capacitors, LEDs, buttons, potentiometers, diodes, transistors, MOSFETs and two sensors. How to read the parts, set up the bench, and build the first circuits.
  • Door Sensor — A TinkerBlock board that takes the two bare wires of a magnetic door or window sensor on a screw terminal and puts it between VCC and SIGNAL. A closed sensor reads HIGH; open, SIGNAL floats, because the board has no pull-down, so you set one in setup(). The red LED lights while the sensor is closed: it is not a power light.
  • ESP32-S3 Expansion Base pinout — Every hole on the Lonely Binary ESP32-S3 Expansion Base: two 20-way strips a side on the same nets, 28 of the 36 GPIOs at the edge, the eight that stay on the sockets, and the 15-way display connector.
  • ESP32-S3 Pluggable Terminal Base pinout — Every way on the Lonely Binary ESP32-S3 Pluggable Terminal Base: 24 GPIOs on two 12-way push-in blocks, two 4-way power blocks, the display connector, and the twelve pins that stay off the edge.
  • ESP32-S3 Screw Terminal Base pinout — Every way on the Lonely Binary ESP32-S3 Screw Terminal Base: two 15-way screw blocks, 26 GPIOs once each, 3V3 on the left and 5V on the right, and the ten GPIOs that do not come out.
  • 3-Axis Accelerometer — A Silan SC7A20H accelerometer on a TinkerBlock board: tilt, orientation, shakes and drops over two shared I²C wires, at address 0x19, with the pull-ups fitted. 3.3 V only.
  • PCA9685 16-Channel Servo Driver: Sixteen Servos on Two I²C Wires — A PCA9685 board that keeps sixteen servo pulses running by itself while the microcontroller talks to it over I²C. Servo power on V+ from USB-C or a screw terminal, the chip on VCC, six address pads, and a header on each edge so boards plug into each other. Three boards a box, headers soldered.
  • HotSwap Arcade Kit: Buttons, Joystick and Coin Acceptor for ESP32-S3, Nano, Pico and Zero 2 W — One mainboard for ten buttons, a joystick, a 12 V coin acceptor and an SPI screen, and four adapters that plug it into an ESP32-S3, a classic Arduino Nano, a Raspberry Pi Pico or a Zero 2 W. Pin tables for every adapter, the power arrangement, and the code.

Edit this page — content/pinouts/esp32-s3.mdx