Adafruit QT Py ESP32-S2

Tiny ESP32-S2 board with STEMMA QT and USB-C - ideal for compact, plug-and-play IoT applications.

USB-C Native USB
Adafruit QT Py ESP32-S2 board
21.8 × 17.9 mm
ESP32-S2
MCU
240MHz
clock
4MB
flash
320KB
SRAM
16· 8 ADC
GPIO
Wi-Fi
radio
On this page

Adafruit QT Py ESP32-S2 Pinout

16 pins · 2.54 mm pitch
Adafruit QT Py ESP32-S2 pinout diagram
PinGPIOLabelsStatusCapabilitiesNotes
15A6TXT5PWMuartadc · touch · uart
26SCLA5T6PWMsafeadc · touch · i2c
37SDAA4T7PWMsafeadc · touch · i2c
48A3T8PWMsafeadc · touch
59A2T9PWMstrappingadc · touch
616A7RXPWMstrappingadc · uart
717A1DAC1PWMsafeadc · dac
818A0DAC2PWMsafeadc · dac
935MOSIPWMsafespi
1036SCKPWMsafespi
1137MISOPWMsafespi
1238NEOPIXEL_POWERPWMsafe-
1339PIN_NEOPIXELPWMstrapping-
1440SCL1PWMstrapping-
1541SDA1PWMstrapping-
1642SSPWMstrappingspi
16 GPIOs broken out 10 free · 6 need care · 0 to avoid

Start with these

10 pins with no boot or system involvement
A6GPIO5SCLGPIO6SDAGPIO7A3GPIO8A1GPIO17A0GPIO18MOSIGPIO35SCKGPIO36MISOGPIO37NEOPIXEL_POWERGPIO38

Freely assignable - no strapping, flash, USB or JTAG duties. Ideal first picks for buttons, sensors and LEDs.

Fine - with a little care

6 pins · 6 things to know
A2GPIO9 General-purpose SPI2 (FSPI) IO MUX pin - hold/data line (FSPIHD) Other

IO MUX pin of the general-purpose SPI2 (FSPI) bus, not of the in-package flash - that sits on GPIO26-32. The datasheet does not restrict it, so it is only taken if your board wires flash, an SD card or a display to FSPI.

A7GPIO16 32.768 kHz RTC crystal negative input (XTAL_32K_N); also GPIO16 (U0CTS, ADC2_CH5). Other

If using an external 32 kHz crystal, this pin is connected to the crystal and should not be used as general I/O.

PIN_NEOPIXELGPIO39 JTAG test clock pin (MTCK); also usable as GPIO39 or as a clock output (CLK_OUT3). JTAG

Used for JTAG debugging interface; using this pin for other purposes will disable JTAG clock input.

SCL1GPIO40 JTAG test data-out pin (MTDO); also GPIO40, supports CLK_OUT2. JTAG

Part of JTAG interface (TDO); should be avoided as GPIO if JTAG debugging is needed.

SDA1GPIO41 JTAG test data-in pin (MTDI); also GPIO41, supports CLK_OUT1. JTAG

Part of JTAG interface (TDI); avoid using as GPIO to retain ability for JTAG debug.

SSGPIO42 JTAG test mode select pin (MTMS); also GPIO42. JTAG

JTAG TMS pin; should not be repurposed if JTAG debugging or programming via JTAG is required.

These are recommendations, not hard rules - with the right pull-ups, timing and boot-state awareness most pins can be made to work. When in doubt, start green.

The Adafruit QT Py ESP32-S2 pinout brings out 16 GPIO pins at a 2.54 mm pitch - every one of them usable in your project.

For peripherals, I²C is mapped to SDA on GPIO7 and SCL on GPIO6; the SPI bus (MOSI, MISO, SCK, SS) is broken out in full; TX/RX on GPIO5 and GPIO16 cover serial logging and flashing.

On the analog side there are 8 ADC-capable pins for sensors and battery monitoring, 5 capacitive-touch inputs and 2 true DAC outputs.

If you want zero surprises, A6, SCL, SDA, A3 and 6 more are free of any such role - the safest first picks. 6 of the exposed pins carry boot-time or system duties on the ESP32-S2 (A2, A7, PIN_NEOPIXEL and 3 more).

Getting started

flash your first firmware in ~2 minutes
Tool:
1
Connect over USB
Native USB - shows up as a port right away, no driver needed. Not detected? Hold BOOT while plugging in.
2
Match & flash
Set the Tools options shown, then click Upload.
3
Verify it runs
GPIO6 toggles - wire an LED and resistor to it, or change the pin to your board's own LED.
Set these in Tools · leave everything else at default
Arduino IDE 2.x - Tools Copy
Board: "ESP32S2 Dev Module"▸
USB CDC On Boot: "Enabled"▸
Flash Size: "4MB (32Mb)"▸
Flash Mode: "DIO"▸
PSRAM: "QSPI PSRAM"▸
Partition Scheme: "Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)" (default)▸
Upload Speed: "921600"▸
▸ every other Tools option - leave at default
Board: ESP32S2 Dev Module
USB CDC On Boot: Enabled
Flash Size: 4MB (32Mb)
Flash Mode: DIO
PSRAM: QSPI PSRAM
Partition Scheme: Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)
Upload Speed: 921600
Find it: Tools ▸ Board ▸ ESP32 Arduino ▸ ESP32S2 Dev Module
blink.ino Copy
// toggle GPIO6 - wire an LED and resistor to it
void setup() {
  pinMode(6, OUTPUT);
}
void loop() {
  digitalWrite(6, HIGH); delay(500);
  digitalWrite(6, LOW);  delay(500);
}
board to selectesp32-s2-saola-1⧉ copy
platformio.ini Copy
[env:adafruit_qtpy_esp32s2]
platform = espressif32
board = esp32-s2-saola-1
framework = arduino
monitor_speed = 115200
upload_speed = 921600
board_build.arduino.memory_type = qio_qspi
build_flags = -DBOARD_HAS_PSRAM
Find it: PlatformIO Home ▸ Boards, search esp32-s2-saola-1 - or type it after board =.
board to selectesp32-s2-saola-1⧉ copy
device.yaml Copy
esp32:
  board: esp32-s2-saola-1
  variant: esp32s2
  framework:
    type: esp-idf
psram:
  mode: quad
  speed: 80MHz

# blink - GPIO6
output:
  - platform: gpio
    pin: 6
    id: led_out
light:
  - platform: binary
    name: "LED"
    output: led_out
Find it: search ESPHome's board list for esp32-s2-saola-1 (same ids as PlatformIO).
esptool doesn't pick board settings - a prebuilt .bin already has them baked in. This is just the raw flash command.
terminal Copy
esptool.py --chip esp32s2 --port /dev/ttyACM0 \
  --baud 921600 write_flash 0x1000 firmware.bin
--port = your /dev/tty* (macOS/Linux) or COMx (Windows).
Build details: sketch space 1310720 B · data 327680 B · DIO

Specifications

ESP32-S2 · 21.8 × 17.9 mm · vs other ESP32 chips →
Compute
MCU
ESP32-S2
Clock
240 MHz
SRAM · Flash
320 KB · 4MB · 2MB (QSPI) PSRAM
Radio
Wi-Fi
802.11 b/g/n 2.4 GHz
Bluetooth
-
Antenna
PCB
I/O
GPIO · ADC
16 · 8
UART · I²C · SPI
2 · 2 · 2
PWM
8 channels
Power
USB
USB-C
Serial
Native (CDC)
Boot address
0x1000
Electrical
Input
5V USB · up to 6V battery pads
Consumption
70µA sleep
Regulator
AP2112
Flashing
Upload · OTA
esptool_py · esp_ota
Flash · Boot mode
DIO · QIO
Sketch · Data
1.25 MB · 320 KB

Dimensions

17.9 mm21.8 mm
21.8 × 17.9 mm · pin pitch 2.54 mm
The Adafruit QT Py ESP32-S2 uses esptool_py for firmware uploads, esp_ota for over-the-air (OTA) updates. Flash mode is DIO with QIO boot mode. The maximum sketch size is 1.25 MB with 320 KB available for data.

About this board

At 21.8 × 17.9 mm it's the smallest ESP32-S2 board we've measured.

At its core is the ESP32-S2 - a single-core Xtensa with native USB-OTG and no Bluetooth.

Expect to pay about $12.50 - less than the ~$20 most ESP32-S2 boards go for.

The small footprint costs pins: 16 GPIO are broken out, versus 26 or so on a full-size board.

Onboard you'll find 2MB (QSPI) PSRAM, a STEMMA QT connector, an addressable RGB LED (GPIO39) and Reset/Boot buttons.

It flashes over native USB - no serial-converter driver needed, which isn't a given among ESP32-S2 boards.

Where to buy

prices are typical street prices
Adafruit QT Py ESP32-S2
Adafruit QT Py ESP32-S2
$12.50per unit, typical

Resources

Similar boards