The QT Py ESP32-S3 is tiny but packed with features. Here's a detailed look.

PrettyPins PDF on GitHub.


  • USB-C port - This is used for both powering and programming the board. You can power it with any USB C cable.
  • 3.3V - These pins are the output from the 3.3V regulator, they can supply 600mA peak.
  • GND - This is the common ground for all power and logic.
  • 5V - This is 5V out from the USB port. 

You can also use the 5V pin as a voltage input but you must have some sort of diode (schottky, signal, power, really anything) between your external power source and this pin with anode to battery, cathode to 5V pin. Note that you cannot power the USB port by supplying 5V to this pin: there is a protection diode that prevents the 5V from reaching the USB connector (unless you bridge the jumper on the back!). This is to protect host computer USB ports, etc. You can draw 1A peak through the diode, but we recommend keeping it lower than that, about 500mA.

BAT/GND pads - On the back of the board are two pads labeled BAT and GND. These are the battery input pads with diode protection for external battery packs from 3V to 6V input.

ESP32-S3 Chip

The ESP32-S3 is a highly-integrated, low-power, 2.4 GHz Wi-Fi System-on-Chip (SoC) solution that now has WiFi and BLE support, built-in native USB as well as some other interesting new technologies like Time of Flight distance measurements. With its state-of-the-art power and RF performance, this SoC is an ideal choice for a wide variety of application scenarios relating to the Internet of Things (IoT)wearable electronics, and smart homes.

The ESP32-S3 has a dual-core 240 MHz chip, so it is comparable to ESP32's dual-core. However, there is no Bluetooth Classic support, only Bluetooth LE. There are two versions of this board with different versions of the ESP32-S3 chip. One version comes with 8 MB flash and no PSRAM, but it does have 512KB of SRAM.

The 8MB of flash is inside the chip and is used for both program firmware and filesystem storage. For example, in CircuitPython, we have 3 MB set aside for program firmware (this includes two OTA option spots as well) and a 1 MB section for CircuitPython scripts and files.

The other version has 4MB Flash, 512KB of SRAM and 2MB PSRAM. This version is perfect for use with CircuitPython support even when massive buffers are needed.

There are two versions of this board: 4MB Flash/2MB PSRAM and 8MB Flash/No PSRAM.
image created by community member DJDevon3

It can be tricky to tell which variant of the board you have. On the chip there is some text that denotes flash and ram size. If you see the text FN8C0, then it is the 8MB Flash/No PSRAM version. If you see the text FH4R2, then it is the 4MB Flash/2MB PSRAM version.

Logic Pins

There are eleven GPIO pins broken out to pads. There is hardware I2C, UART, and SPI.

Eight pads are 12-bit analog inputs (SPI high speed pads do not have analog inputs).

You can do PWM output or hardware I2S on any pin.

There are five pins (A2, A3, SCL, SDA, TX) that can do capacitive touch without any external components needed.

That's the general concept. Now for the details!

There are four analog pins.

  • A0 thru A3 can also be analog inputs. A0 and A1 are on ADC2, A2 and A3 are on ADC1.

The I2C pins. These are NOT shared by the STEMMA QT connector!

  • SCL - This is the I2C clock pin. There is no pull-up on this pin, so for I2C please add an external pull-up if the breakout doesn't have one already. This pin can do capacitive touch and can also be an analog input.
  • SDA - This is the I2C data pin. There is no pull-up on this pin, so for I2C please add an external pull-up if the breakout doesn't have one already. This pin can do capacitive touch and can also be an analog input.

The UART interface.

  • RX - This is the UART receive pin. Connect to TX (transmit) pin on your sensor or breakout.
  • TX - This is the UART transmit pin. Connect to RX (receive) pin on your sensor or breakout. This pin can do capacitive touch.

The SPI pins are on the ESP32-S3 high-speed peripheral. You can set any pins to be the low-speed peripheral but you won't get the speedy interface!

  • SCK - This is the SPI clock pin.
  • MI - This is the SPI Microcontroller In / Sensor Out pin.
  • MO - This is the SPI Microcontroller Out / Sensor In pin.

STEMMA QT Connector

This JST SH 4-pin STEMMA QT connector breaks out a second I2C interface (SCL1, SDA1, 3.3V, GND). It allows you to connect to various breakouts and sensors with STEMMA QT connectors or to other things using assorted associated accessories. It works great with any STEMMA QT or Qwiic sensor/device. You can also use it with Grove I2C devices thanks to this handy cable.

In CircuitPython, you can use the STEMMA connector with board.SCL1 and board.SDA1, or board.STEMMA_I2C().

The STEMMA QT connector IO pins in Arduino are 40 (SCL1) and 41 (SDA1) and are available on Wire1

NeoPixel LED

  • Above the SCK and MI on the silk, is the RGB NeoPixel LED. This addressable LED works both as a status LED (in CircuitPython and the bootloader), and can be controlled with code. It is available in CircuitPython as board.NEOPIXEL, and in Arduino as PIN_NEOPIXEL.
  • There is a NeoPixel power pin that needs to be pulled high for the NeoPixel to work. This is done automatically by CircuitPython and Arduino. It is available in CircuitPython and Arduino as NEOPIXEL_POWER.
If you run into NeoPixel power issues on Arduino, ensure you are using the latest Espressif board support package. If you are still having issues, you may need to manually pull the pin high in your code.


There are two buttons.

  • Reset button - This button restarts the board and helps enter the bootloader. You can click it once to reset the board without unplugging the USB cable or battery. Tap once, and then tap again while the NeoPixel status LED is purple to enter the UF2 bootloader (needed to load CircuitPython).
  • Boot button - This button can be used to put the board into ROM bootloader mode. To enter ROM bootloader mode, hold down DFU button while clicking reset button mentioned above. When in the ROM bootloader, you can upload code and query the chip using esptool.
    This button can also be read as GPIO 0 (set it to be an input-with-pullup).

This guide was first published on Jun 15, 2022. It was last updated on Apr 23, 2024.

This page (Pinouts) was last updated on Mar 08, 2024.

Text editor powered by tinymce.