Chris Collins

Tools · embedded

Board pinouts

Interactive pinouts for 36 boards — ESP32, -S2, -S3, -C3, -C5, -C6, -H2 and -P4 (Espressif DevKits, XIAO, Adafruit QT Py and Feather V2, ESP32-CAM, Nano ESP32), ESP8266, Raspberry Pi Pico and Pico 2, Arduino Uno R3/R4, Nano, Mega and Leonardo, Pro Micro, Teensy 4.0, STM32 Blue and Black Pill, and the Raspberry Pi header — with a pin planner, board comparison, and ESPHome/Arduino/MicroPython export.

Added · updated 28 October 2026

Works with

How to use it

Choose a board. The diagram shows each header in its physical order, with the label printed on the board and a short note of the pin’s main function. Click a pin (or tab to it and press Enter) to see everything it can do: GPIO number, ADC and touch channels, DAC, default UART, I²C, SPI and CAN roles, JTAG, deep-sleep wake, 5 V tolerance, onboard LEDs and buttons, and warnings. The code line gives the number to use in Arduino, ESP-IDF, the Pico SDK, MicroPython, ESPHome, STM32Cube, or gpiozero, depending on the board.

Pin numbers and orientation

Every pin shows its physical header number inside it, and pin 1 of each header is drawn square, like the square pad on a real board. Espressif dev kits use the header names and numbers from Espressif’s user guides — J1 pin 1 … J1 pin 16 and J3 pin 1 … on the ESP32-C6-DevKitC-1, for example, where J1 pin 1 (3V3) is at the antenna end and J1 pin 14 (5V) near the USB sockets. The Raspberry Pi Pico, Pico 2, the Raspberry Pi 40-pin header, the P4 Function EV board and the Arduino Nano ESP32 also use their makers' numbering. Boards whose makers don’t number the pins get a plain DIP-style count (pin 1 top-left, down the left and back up the right), and Board notes says which kind a board uses.

The drawing labels both ends — the USB socket and the antenna area — so you can match it to the board in your hand. Rotate 180° turns it round (USB at the top instead of the bottom) and View from underside mirrors it for wiring from the solder side; the header numbers stay with their pins, and the choice is remembered per board and in share links. The pin panel, the planner, the pin table, and every export (Markdown, CSV, Arduino, MicroPython, ESPHome) include the header pin as well as the GPIO number.

Boards

  • ESP32: DevKitC (WROOM-32), DevKitC-VE (WROVER, where GPIO16/17 belong to the PSRAM), the AI-Thinker ESP32-CAM (camera, microSD and PSRAM pins marked), and the Adafruit Feather ESP32 V2 (ESP32-PICO-MINI-02, with GPIO20, 37 and 38).

  • ESP32-S2: Saola-1 and Adafruit QT Py ESP32-S2. ESP32-S3: DevKitC-1, DevKitM-1 (MINI-1, where GPIO26 and 33–37 are free), Seeed XIAO ESP32S3, Adafruit QT Py ESP32-S3, and the Arduino Nano ESP32 (Nano pin labels with the GPIO underneath).

  • ESP32-C3: DevKitM-1, SuperMini, XIAO ESP32C3, and Adafruit QT Py ESP32-C3. ESP32-C5: DevKitC-1 (dual-band Wi-Fi 6). ESP32-C6: DevKitC-1, DevKitM-1, and XIAO ESP32C6. ESP32-H2: DevKitM-1. ESP32-P4: the Function EV Board’s 40-pin J1 header.

  • ESP8266: NodeMCU v2 and Wemos/LOLIN D1 mini.

  • RP2040 / RP2350: Raspberry Pi Pico / Pico W, Pico 2 / Pico 2 W, and XIAO RP2040.

  • Arduino: Uno R3, Uno R4 Minima/WiFi, Nano, Mega 2560, Leonardo, and the SparkFun Pro Micro.

  • Teensy 4.0, STM32 Blue Pill (F103C8) and WeAct Black Pill (F401/F411).

  • Raspberry Pi 40-pin header (Pi 2/3/4/5 and Zero), with BCM numbers and physical pin numbers.

Finding the right pin

Filter buttons highlight the matching pins and dim the rest. Safe GPIO finds pins that are not boot (strapping) pins, flash or PSRAM pins, input-only, USB, or the console UART — the pins to reach for first. The other filters cover analog input, PWM, I²C, SPI, UART, CAN, touch, DAC, deep-sleep wake, 5 V tolerant, boot/strapping, input-only, avoid, interrupts, and power. Combining filters shows pins that match any of them. The search box finds a GPIO number (21), a function (ADC1, SDA, TOUCH, CAN), or a label.

A red ! marks pins that need care: strapping pins that change how the chip boots, pins wired to the SPI flash, and input-only pins. Board notes lists the logic level, current limits, LEDs, buttons, and quirks — for example, ESP32 ADC2 cannot be read while Wi-Fi is on, so use ADC1 for analog sensors; the Uno R4 manages only 8 mA per pin.

Pin planner

Say what the project needs — I²C and SPI buses, extra chip-selects, UARTs, CAN, analog inputs, PWM outputs, plain inputs and outputs, touch pads, DAC outputs, deep-sleep wake pins — and the planner proposes a set of non-conflicting pins on the chosen board, with the reason for each pick and any warning. It uses the default bus pins first and then the safest free pins: never flash, PSRAM, or native-USB pins, never an output on an input-only pin, ADC1 rather than ADC2 while Wi-Fi is on, and strapping or console pins only if you allow them. On ESP32- family chips any output pin can carry I²C, SPI, UART, or CAN through the GPIO matrix; on fixed- function chips (AVR, RP2040, STM32, Teensy) it picks a whole bus whose pins are all free. Lock any row to a pin of your choice and the planner works around it. The planned pins turn blue on the diagram.

Compare and find

Compare boards puts two boards side by side: wireless, USB, I/O and safe-pin counts, analog inputs (ADC1/ADC2), PWM, touch, DAC, deep-sleep wake pins, 5 V tolerance, and UART, I²C, SPI, CAN and I²S counts. Find a board lists the boards that have everything you tick — Wi-Fi, Bluetooth LE, Thread/Zigbee, CAN, DAC, touch, native USB, 5 V logic or 5 V tolerant I/O — and at least the analog, PWM, and I/O pin counts you ask for.

Export

The planner’s result exports as an ESPHome YAML snippet (i2c:, spi:, uart:, canbus:, ADC sensors, PWM outputs, binary sensors and switches), Arduino/PlatformIO `#define`s, MicroPython (or gpiozero BCM) constants, a Markdown table, or CSV. Pin table exports every header pin of the board with its functions, tags, and notes as Markdown or CSV.

Notes

On ESP32-family chips almost any output pin can carry almost any peripheral through the GPIO matrix. The I²C, SPI, and UART pins shown are the defaults used by Arduino-ESP32 (or the board’s own core: XIAO, Nano ESP32), the Pico SDK, and the Arduino cores. Clone boards (especially the ESP32-C3 SuperMini and Blue Pill) sometimes differ, so check the silkscreen. The data comes from the vendors' datasheets, dev-kit user guides (Espressif’s header tables for the DevKitM-1, C5 DevKitC-1 and P4 Function EV boards), board schematics, Adafruit’s pinout pages and PrettyPins diagrams, and the Arduino core variant files. For the ESP32-P4 the page shows only what the board guide lists per pin; see the ESP32-P4 datasheet for alternate functions.

Presenting

The board drawing as large as the screen allows, with the clicked pin’s details beside it — for a bench monitor or a class. Click pins on the big drawing; R rotates, U shows the underside, ← → change board. Press ⛶ Present (beside Share link) or F to open it; Esc or F closes it and T switches between dark and light. It goes full screen where the browser allows, otherwise it fills the window, and keeps the screen awake. Controls and the pointer fade after a few idle seconds.

Share link → Link options → Open in presentation mode makes a link that opens straight into this view. Browsers only allow real full screen after a click, so a link opened cold shows the view filling the window with a “Click for full screen” button.

Sharing

Share link copies a URL that opens this tool with your current settings — every value it remembers between visits, packed into ?s=. Opening a link replaces your saved settings for this tool. You can also write a short link by hand with board (the board id), for example /tools/pinout/?board=esp32-devkitc or /tools/pinout/?board=xiao-esp32c6.

Runs entirely in your browser; nothing you type leaves this page.