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

Defaults the Arduino core assumes, and the ones the examples on this site use:

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, and yours

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

  • GPIO15ADC2, so analogRead stops working the moment Wi-Fi starts. Unaffected as a digital pin.
  • GPIO16ADC2, so analogRead stops working the moment Wi-Fi starts. Unaffected as a digital pin.
  • GPIO17ADC2, so analogRead stops working the moment Wi-Fi starts. Unaffected as a digital pin.
  • GPIO18ADC2, so analogRead stops working the moment Wi-Fi starts. Unaffected as a digital pin.
  • GPIO3Strapping pin. Selects the JTAG source. Floating at reset is the normal state.
  • GPIO46Strapping pin. Controls the ROM boot message. Must be low at reset.
  • GPIO11ADC2, so analogRead stops working the moment Wi-Fi starts. Unaffected as a digital pin.
  • GPIO12ADC2, so analogRead stops working the moment Wi-Fi starts. Unaffected as a digital pin.
  • GPIO13ADC2, so analogRead stops working the moment Wi-Fi starts. Unaffected as a digital pin.
  • GPIO14ADC2, so analogRead stops working the moment Wi-Fi starts. Unaffected as a digital pin.
  • GPIO43UART0 TX, wired to the USB-UART bridge behind the second USB-C port.
  • GPIO44UART0 RX, wired to the USB-UART bridge behind the second USB-C port.
  • GPIO37Octal 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.
  • GPIO36Octal 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.
  • GPIO35Octal 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.
  • GPIO0BOOT button, with a 10 kΩ pull-up. Held low at reset it drops the chip into the ROM bootloader.
  • GPIO45Strapping pin. Sets VDD_SPI to 3.3 V or 1.8 V. Must be low at reset on a 3.3 V module.
  • GPIO48WS2812B RGB LED, single-wire at 800 kHz. The silkscreen says RGB@IO48.
  • GPIO20Native USB-C, D+ . Wired straight to the USB-Serial-JTAG peripheral, no bridge chip in the path.
  • GPIO19Native 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, not an input. Everything on the board runs from it. Budget what the regulator can spare, not what USB can deliver.
3V33.3 V railpowerL2. Output of the on-board regulator, not an input. Everything on the board runs from it. Budget what the regulator can spare, not what USB can deliver.
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

  • Slim JoystickA thumb stick and six buttons on one long TinkerBlock board, on six pins. X and Y are two potentiometers, read on analog pins; KEY is the click under the stick, LOW at rest and HIGH when pushed; and all six buttons share BTNS, one analog pin, through a ladder of 10 kΩ resistors that gives each its own voltage. One button reads at a time.
  • ESP32-S3 PinPulse Shield pinoutEvery hole on the Lonely Binary ESP32-S3 PinPulse Shield: 44 nets on a male pin and a female socket each, the LED on all 36 GPIOs, and what that LED costs the pin.
  • ESP32-S3 PinPulse Shield: an LED on All 36 GPIOsThe base for the Lonely Binary ESP32-S3: every GPIO on a male pin and a female socket with its own LED, six inverter chips so the lights cost your signals nothing, and a fifteen-way display port.
  • Dual Axis JoystickA thumbstick on a square TinkerBlock board, on six pins: GND, VCC, NC, X, Y and SW. X and Y are two potentiometers from VCC to GND, read on analog pins; SW is the click under the stick, LOW at rest and HIGH when pressed, with its own pull-down. Every line reaches VCC, so VCC is your board's logic voltage. A PWR light and an SW light show power and each click.
  • INA219 and INA3221 Current Monitors: shunt, range and wiringTwo I²C current and voltage monitors: the TK119 with one INA219 on a 100 mΩ shunt, and the INA3221 with three channels on 50 mΩ. What the chip measures and what it works out, why the two resistors differ, the range and step each one gives, and the wiring for both.
  • INA219 Current MonitorA 100 milliohm resistor in the positive wire and a chip that reads the millivolts across it. Current, voltage and power over I²C, up to 3.2 A on a rail of up to 26 V.
  • SD and microSD Card Readers for ESP32: SPI, 1-bit and 4-bitTwo 3.3 V card reader boards with the SD bus brought out in full. What the two NC pins really are, which of SPI, 1-bit and 4-bit to use, what each measured, and the wiring for all three.
  • SHT31 Temperature and Humidity SensorA Sensirion SHT31 on a TinkerBlock carrier: two numbers over two shared wires, calibrated at the factory, with the pull-ups already fitted and two jumpers on the back that set the address and take them away again.

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