The QT Py RP2040 packs all kinds of microcontroller goodness into a super tiny package. Time to take a tour of the board!

PrettyPins PDF on GitHub.


On the opposite end of the board from the USB connector is the STEMMA QT connector. This connector, labeled I2C1, allows you to plug in all sorts of breakout boards with no soldering needed! All you need is a STEMMA QT cable.

NOTE: To use this connector with CircuitPython, you need to use board.STEMMA_I2C(), or  busio.I2C(board.SCL1, board.SDA1) in your code! In Arduino, it is Wire1.

The I2C breakout pads are *separate* from the STEMMA QT I2C pads! We give you two I2C ports, so you can connect two identical sensors if needed, one on each I2C bus.

Power and USB

  • USB C connector - This is used for power and data. Connect to your computer via a USB C cable to update firmware and edit code.
  • GND - This is the common ground for all power and logic.
  • 3V - this is the regulated output from the onboard regulator. You can draw 500mA
  • 5V - This is 5v out from the USB port. You can also use this 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

Input/Output Pins

I2C and SPI on RP2040

The RP2040 is capable of handling I2C, SPI and UART on many pins. However, there are really only two peripherals each of I2C, SPI and UART: I2C0 and I2C1, SPI0 and SPI1, and UART0 and UART1. So while many pins are capable of I2C, SPI and UART, you can only do two at a time, and only on separate peripherals, 0 and 1. I2C, SPI and UART peripherals are included and numbered below.

PWM on RP2040

The RP2040 supports PWM on all pins. However, it is not capable of PWM on all pins at the same time. There are 8 PWM "slices", each with two outputs, A and B. Each pin on the QT Py is assigned a PWM slice and output. For example, D6 is PWM2 A, which means it is the first output of the second slice. You can have multiple PWM objects on the QT Py RP2040. The important thing to know is that you cannot use the same slice and output more than once at the same time. So, if you have a PWM object on pin D6, you cannot also put a PWM object on D9, because they are both PWM2 A. The PWM slices and outputs are indicated below.

Analog Pins

The RP2040 has four ADCs. These pins are the only pins capable of handling analog, and they can also do digital.

  • A0/D0 - This pin is ADC3. It is also SPI1 CS, I2C0 SCL and PWM6 B. This pin is available in Arduino as PIN_SERIAL1_RX.
  • A1/D1 - This pin is ADC2. It is also SPI1 MISO, I2C1 SDA and PWM6 A. This pin is available in Arduino as PIN_SERIAL1_TX.
  • A2/D2 - This pin is ADC1. It is also SPI1 MOSI, I2C1 SCL and PWM5 B.
  • A3/D3 - This pin is ADC0. It is also SPI1 SCK, I2C1 SDA and PWM5 A.

Digital Pins

These are the digital I/O pins. They all have multiple capabilities.

  • SDA/D4 - I2C0 SDA, and digital I/O pin 4. It is also UART1 TX and PWM4 A.
  • SCL/D5 - I2C0 SCL, and digital I/O pin 5. It is also UART1 RX and PWM4 B.
  • TX/D6 - The main UART1 TX pin. It is also I2C0 SDA and PWM2 A. This pin is available in Arduino as PIN_SERIAL2_TX.
  • RX/D7 - The main UART1 RX pin. It is also SPI0 CS, I2C0 SCL and PWM2 B. This pin is available in Arduino as PIN_SERIAL2_RX.
  • SCK/D8 - The main SPI0 SCK and digital I/O pin 8. It is also I2C1 SDA and PWM3 A.
  • MI/D9 - The main SPI0 MISO and digital I/O pin 9. It is also UART1 TX, I2C0 SDA and PWM2 A.
  • MO/D10 - The main SPI0 MOSI and digital I/O pin 10. It is also I2C1 SCL and PWM1 B.
  • SDA1 - I2C1 SDA for the STEMMA QT connector. It is also SPI0 SCK and PWM3 A.
  • SCL1 - I2C1 SCL for the STEMMA QT connector. It is also SPI0 MOSI and PWM3 B.

CircuitPython I2C, SPI and UART

Note that in CircuitPython, there is a board object each for I2C, SPI and UART that use the pins labeled on the QT Py. You can use these objects to initialise these peripherals in your code.

  • board.I2C() uses SCL/SDA (not for the STEMMA QT connector!)
  • board.STEMMA_I2C() uses SCL1/SDA1, on the STEMMA/QT connector
  • board.SPI() uses SCK/MO/MI
  • board.UART() uses RX/TX

GPIO Pins by Pin Functionality

Primary pins based on QT Py RP2040 silk are bold.

I2C Pins

  • I2C0 SCL: SCL, A0, RX
  • I2C1 SCL: SCL1, A2, MOSI
  • I2C1 SDA: SDA1, A1, A3, SCK

SPI Pins

  • SPI0 CS: RX
  • SPI1 SCK: A3
  • SPI1 MOSI: A2
  • SPI1 MISO: A1
  • SPI1 CS: A0


  • UART0 TX: (none)
  • UART0 RX: (none)

PWM Pins

  • PWM0 A: (none)
  • PWM0 B: (none)
  • PWM1 A: (none)
  • PWM1 B: MOSI
  • PWM2 A: TX, MISO
  • PWM2 B: RX
  • PWM3 A: SCK, SDA1
  • PWM3 B: SCL1
  • PWM4 A: SDA
  • PWM4 B: SCL
  • PWM5 A: A3
  • PWM5 B: A2
  • PWM6 A: A1
  • PWM6 B: A0

Capacitive Touch Pins

All of this board’s GPIO pins are capacitive touch-capable via CircuitPython’s touchio module. Add a 1M resistor between the pin(s) and ground.


  • The button on the opposite end of the board from the USB connector is the reset (RST) button. This button restarts the board and helps enter the bootloader. You can click it to reset the board without unplugging the USB cable or battery.
  • The button towards the middle of the board is the boot select (BOOT) button. This button is used to enter the bootloader. To enter the bootloader, press and hold BOOT and then power up the board (either by plugging it into USB or pressing RESET). The bootloader is used to install/update CircuitPython. This button is also usable as an input in code, on pin board.BUTTON.

Onboard NeoPixel

The onboard NeoPixel is a built-in addressable RGB LED. It can be accessed in CircuitPython with pin board.NEOPIXEL.

RP2040 and QSPI Flash

  • The square under the "QT Py RP2040" label on the back is the RP2040 microcontroller, the "brains" of the QT Py RP2040 board.

  • The smaller square near USB side of the board is the QSPI Flash. It is connected to 6 pins that are not brought out on the GPIO pads. This way you don't have to worry about the SPI flash colliding with other devices on the main SPI connection.

QSPI is neat because it allows you to have 4 data in/out lines instead of just SPI's single line in and single line out. This means that QSPI is at least 4 times faster. But in reality is at least 10x faster because you can clock the QSPI peripheral much faster than a plain SPI peripheral.

USB Host Jumper

There is a jumper on the back next to the QSPI flash chip. If you bridge this jumper, it will connect the USB 5V pin to the breakout 5V pin. This is necessary if you want to use the QT Py RP2040 in USB host mode.

This guide was first published on Apr 21, 2021. It was last updated on Jun 19, 2024.

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

Text editor powered by tinymce.