Documentation

ShillehTek Seeed Studio Pre-Soldered XIAO RP2040 Pre-Soldered Microcontroller Arduino | ShillehTek Product Manual
Documentation / ShillehTek Seeed Studio Pre-Soldered XIAO RP2040 Pre-Soldered Microcontroller Arduino | ShillehTek Product Manual

ShillehTek Seeed Studio Pre-Soldered XIAO RP2040 Pre-Soldered Microcontroller Arduino | ShillehTek Product Manual

Overview

The Seeed Studio XIAO RP2040 is a thumbnail-sized development board based on the Raspberry Pi RP2040 — a dual-core ARM Cortex-M0+ chip running up to 133 MHz. With 2 MB of flash, 264 KB of SRAM, programmable I/O (PIO), and the same form factor as every other XIAO (21 × 17.5 mm), it's the smallest official RP2040 board you can find that still gives you 11 GPIOs and a full USB-C connector.

Unlike the larger Raspberry Pi Pico, the XIAO RP2040 has castellated edge connectors for surface-mount soldering, native USB-C, and an addressable RGB LED — making it perfect for wearables, badge electronics, and tight spaces where a Pico simply doesn't fit.

Program it with the Arduino IDE (Earle Philhower's RP2040 core), CircuitPython, MicroPython, or the official Pico C/C++ SDK. PIO is the killer feature: it gives you two state machines you can program to bit-bang protocols (custom DSI, NeoPixel, WS2812, even VGA) that an MCU this size shouldn't be able to do.

At a Glance

MCU
RP2040
Core
Dual Cortex-M0+ @ 133 MHz
Flash / RAM
2 MB / 264 KB
GPIO
11 pins (D0-D10)
Logic Voltage
3.3V
USB
USB-C native

Specifications

Parameter Value
Microcontroller Raspberry Pi RP2040 (dual-core ARM Cortex-M0+)
Maximum Clock 133 MHz (overclockable to 250+ MHz)
Flash Memory 2 MB (external QSPI)
SRAM 264 KB
USB USB-C 1.1, native USB device + host
GPIO 11 pins (D0-D10)
Analog Input 4 channels (A0-A3) on 12-bit ADC
I2C SDA=D4 (GP6), SCL=D5 (GP7)
SPI SCK=D8 (GP2), MISO=D9 (GP4), MOSI=D10 (GP3)
UART TX=D6 (GP0), RX=D7 (GP1)
PIO 2 PIO blocks, 4 state machines each
On-board LEDs User RGB LED (WS2812 on D2/GP12) + power LED
Buttons RESET (R) and BOOT (B)
Power Input 5V via USB-C, or 3.7V LiPo via solder pads
Dimensions 21 × 17.5 mm

Pinout Diagram

Seeed Studio XIAO RP2040 pinout diagram showing left side D0-D6 with analog A0-A3, MicroPython port pins P26-P0, I2C SDA on D4 and SCL on D5, UART TX on D6, and right side D10-D7 with SPI MOSI/MISO/SCK on D10/D9/D8, CSn on D7, and 5V/GND/3V3 power pins

Wiring Guide

Power and Programming

USB-C provides 5V power and acts as a native USB device for programming. To enter the bootloader for first-time flashing, hold the BOOT button while plugging in the USB cable — the board appears as a USB drive named RPI-RP2 onto which you can drag a UF2 firmware file.

Pin Function Notes
USB-C 5V power + UF2 flashing Hold BOOT while plugging in to enter bootloader
5V +5V input/output Pass-through from USB-C
3V3 3.3V regulator output ~600 mA available for sensors
GND Ground
BAT pads 3.7V LiPo input On back of PCB
Tip: CircuitPython users get a built-in CIRCUITPY drive — just drop your code.py file onto it and the board reloads instantly. No IDE setup needed.

LEDs & Button

The XIAO RP2040 has a single addressable RGB LED (WS2812) on D2/GP12, plus separate red/green/blue dim LEDs and a power LED. Add an external button on any GPIO with internal pull-up.

Component XIAO Pin Details
RGB LED (WS2812) D2 / GP12 (built-in) Use NeoPixel or PIO to drive
NeoPixel power enable NEOPIXEL_POWER (GP11) Set HIGH to enable LED power
External LED + 220Ω → GND D0 (GP26) Anode to GPIO, cathode to GND through resistor
Button → GND D1 (GP27) Use INPUT_PULLUP

I2C Devices

I2C uses D4 (SDA, GP6) and D5 (SCL, GP7).

Sensor Pin XIAO RP2040 Pin
VCC 3V3
GND GND
SDA D4 (GP6)
SCL D5 (GP7)

SPI Devices

SPI is on D8 (SCK, GP2), D9 (MISO, GP4), D10 (MOSI, GP3). Use any free GPIO for chip-select; D7 (CSn, GP1) is the conventional pick.

SPI Signal XIAO Pin RP2040 Pin
SCK D8 GP2
MISO D9 GP4
MOSI D10 GP3
CS D7 GP1 (or any free GPIO)

UART / Serial

UART0 is on D6 (TX, GP0) and D7 (RX, GP1). Use the USB-C port as default Serial for the Arduino IDE Serial Monitor.

UART Signal XIAO Pin RP2040 Pin
TX (Serial1) D6 GP0
RX (Serial1) D7 GP1
Serial Monitor USB-C Native USB CDC

Code Examples

Arduino — Built-in NeoPixel Cycle

xiao_rp2040_neopixel.ino
// XIAO RP2040 - Cycle the on-board WS2812 RGB LED
// Library: Adafruit NeoPixel (Library Manager)
// Board: "Seeed XIAO RP2040" (Arduino-Pico core by Earle Philhower)

#include <Adafruit_NeoPixel.h>

#define NEOPIXEL_PIN  12     // D2 / GP12
#define NEOPIXEL_PWR  11     // GP11 enables NeoPixel power

Adafruit_NeoPixel pixel(1, NEOPIXEL_PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  pinMode(NEOPIXEL_PWR, OUTPUT);
  digitalWrite(NEOPIXEL_PWR, HIGH);   // Enable LED power
  pixel.begin();
  pixel.setBrightness(40);
}

void loop() {
  pixel.setPixelColor(0, pixel.Color(255, 0, 0));   pixel.show(); delay(400);
  pixel.setPixelColor(0, pixel.Color(0, 255, 0));   pixel.show(); delay(400);
  pixel.setPixelColor(0, pixel.Color(0, 0, 255));   pixel.show(); delay(400);
}

Arduino — Read Analog Sensor on A0

xiao_rp2040_adc.ino
// XIAO RP2040 - Read 12-bit analog on A0 (GP26)

void setup() {
  Serial.begin(115200);
  analogReadResolution(12);
}

void loop() {
  int raw = analogRead(A0);
  float volts = raw * (3.3f / 4095.0f);
  Serial.print(raw);
  Serial.print(" -> ");
  Serial.print(volts, 3);
  Serial.println(" V");
  delay(500);
}

CircuitPython — Hello World

code.py
# XIAO RP2040 - CircuitPython Hello World
# Flash the official Adafruit CircuitPython UF2 for "Seeed XIAO RP2040",
# then drop this as code.py on the CIRCUITPY drive.

import board
import neopixel
import time

pixel = neopixel.NeoPixel(board.NEOPIXEL, 1, brightness=0.2)

while True:
    pixel[0] = (255, 0, 0)
    time.sleep(0.4)
    pixel[0] = (0, 255, 0)
    time.sleep(0.4)
    pixel[0] = (0, 0, 255)
    time.sleep(0.4)

MicroPython — Hello World

xiao_rp2040_hello.py
# XIAO RP2040 - MicroPython Blink
# Flash the official MicroPython RP2040 UF2 firmware first.

from machine import Pin
import time

led = Pin(25, Pin.OUT)   # green LED on GP25 (also serves as user LED)

while True:
    led.toggle()
    time.sleep(0.5)

Frequently Asked Questions

How do I program the XIAO RP2040 the first time?
Hold the BOOT button while plugging in the USB-C cable. The board appears as a USB drive named "RPI-RP2". Drag your .uf2 firmware (CircuitPython, MicroPython, or an Arduino sketch compiled to UF2) onto the drive — the file copies, the board reboots, and the new firmware runs.
What's the difference between the XIAO RP2040 and the Raspberry Pi Pico?
Same chip (RP2040), same flash size (2 MB), same RAM (264 KB). The Pico is much larger (51×21mm vs 21×17.5mm), uses micro-USB instead of USB-C, and breaks out 26 GPIOs instead of 11. The XIAO is smaller, has a USB-C connector, an addressable RGB LED, and is designed for surface-mounting onto custom PCBs.
Does it have Wi-Fi or Bluetooth?
No. The RP2040 is a microcontroller with no built-in radio. If you need Wi-Fi/BLE in the same form factor, look at the XIAO ESP32-C3 or ESP32-C6 instead. You can also pair an external ESP-01 or HM-10 module over UART for limited connectivity.
What is PIO and why is it special?
PIO (Programmable I/O) is the RP2040's secret weapon — two dedicated processors with 4 state machines each, each running tiny custom programs to bit-bang protocols at high speed. You can implement WS2812 NeoPixel timing, custom SPI variants, VGA video, DVI output, and weird industrial protocols (DMX, RS-485 framing) without using main CPU cycles.
How do I use both cores?
In Arduino, the second core runs the void setup1()/loop1() functions you provide — Earle Philhower's Arduino-Pico core makes this as simple as having two pairs of setup/loop. In MicroPython use _thread.start_new_thread(). In CircuitPython, the second core is reserved for the runtime; only Pico-SDK C/C++ gives you full second-core control there.
Why is GP25 marked as the on-board LED on a Pico but not on the XIAO?
The Pico hard-wires GP25 to its on-board LED. The XIAO RP2040 instead routes GP25 to a green status LED that's available on the breakout but uses GP12/D2 for the user-controllable WS2812 RGB LED. Different boards expose different LED pins — always check the schematic.
Can it run TinyML or machine learning?
Yes — TensorFlow Lite Micro and Edge Impulse both have working RP2040 ports. With dual M0+ cores and 264 KB RAM you can run small audio-keyword and gesture-recognition models. Don't expect image classification — for that, pick the XIAO ESP32-S3 (which has 8 MB PSRAM and vector instructions).

Related Tutorials