Documentation

ShillehTek RP2040 Zero Microcontroller Board Presoldered | ShillehTek Product Manual
Documentation / ShillehTek RP2040 Zero Microcontroller Board Presoldered | ShillehTek Product Manual

ShillehTek RP2040 Zero Microcontroller Board Presoldered | ShillehTek Product Manual

shillehtek

Overview

The RP2040-Zero is Waveshare's stamp-sized take on the Raspberry Pi RP2040 chip. It packs the same dual-core ARM Cortex-M0+ at 133 MHz, 264 KB of SRAM, and 2 MB of QSPI Flash as the larger Raspberry Pi Pico — into a board roughly the size of a postage stamp (18 x 23 mm) with USB Type-C, BOOT and RESET buttons, and an addressable WS2812 RGB LED on GPIO 16.

It breaks out 23 GPIO pins (GP0-GP15, GP26-GP29 on the front; GP17-GP25 on solder pads on the back), three 12-bit ADC channels, dual SPI/I2C/UART blocks, and the RP2040's signature 8 PIO state machines for hardware-accelerated custom protocols. Headers come pre-soldered so it's breadboard-ready out of the box.

Like the Pico, the RP2040-Zero supports the official C/C++ SDK, MicroPython, CircuitPython, and the Arduino IDE via the arduino-pico core. The on-board WS2812 makes it easy to add visual feedback without wiring an external LED.

At a Glance

MCU
RP2040 Dual-Core M0+
Clock Speed
133 MHz
Flash / SRAM
2 MB / 264 KB
Logic Level
3.3V (NOT 5V tolerant)
GPIO Pins
23 broken-out
USB
USB Type-C

Specifications

Parameter Value
Microcontroller RP2040 (dual-core ARM Cortex-M0+)
Clock Frequency Up to 133 MHz (overclockable to 250+ MHz)
Flash Memory 2 MB QSPI Flash
SRAM 264 KB on-chip
Operating Voltage 3.3V
Input Voltage 5V via USB-C or 5V pin
GPIO Logic Level 3.3V (NOT 5V tolerant)
Digital I/O Pins 23 broken-out (GP0-15, GP26-29 on front; GP17-25 back pads)
Analog Input Channels 3 (GP26 / GP27 / GP28, 12-bit)
PWM Channels 16 (8 PWM blocks, 2 channels each)
PIO (Programmable I/O) 2 blocks, 4 state machines each (8 total)
Communication Interfaces 2x I2C, 2x SPI, 2x UART, USB 1.1
USB Connector USB Type-C
On-board RGB LED WS2812 on GPIO 16 (DIN)
Buttons BOOT + RESET
Headers Pre-soldered male pins
Dimensions ~18 x 23 mm

Pinout Diagram

RP2040 Zero pinout diagram showing all GPIO pins GP0-GP15 and GP17-GP29 with alternate functions including SPI0/SPI1 RX/CSn/SCK/TX, I2C0/I2C1 SDA/SCL, UART0/UART1 TX/RX, ADC0-ADC3 analog inputs, BOOT and RESET buttons, USB Type-C connector, 5V/3.3V power, GND, and the on-board WS2812 RGB LED on GPIO 16

Wiring Guide

LED + Push Button

Use a 220-330 ohm series resistor on the LED. The board's on-board WS2812 RGB LED on GP16 is also handy as a "no wiring needed" status indicator.

Component RP2040-Zero Pin Details
LED Anode (long) GP2 Through 220 ohm resistor
LED Cathode (short) GND
Button Terminal 1 GP3 INPUT_PULLUP in code
Button Terminal 2 GND
Tip: The on-board WS2812 (GP16) is great for color status. Use the Adafruit NeoPixel library in Arduino, or neopixel in CircuitPython, to drive it.

I2C Sensor

Two hardware I2C buses are available. I2C0 defaults to GP0 (SDA) and GP1 (SCL); I2C1 defaults to GP2 (SDA) and GP3 (SCL). Most 3.3V breakouts work directly with no level shifting.

Sensor Pin RP2040-Zero Pin
VCC 3V3
GND GND
SDA GP0 (I2C0)
SCL GP1 (I2C0)
Warning: RP2040 GPIO is 3.3V only. Use a logic level converter when interfacing with 5V I2C devices.

SPI Device

SPI0 defaults to GP4 (RX/MISO), GP5 (CSn), GP6 (SCK), and GP7 (TX/MOSI). Any free GPIO can serve as a chip select if you need more devices on the bus.

SPI Pin RP2040-Zero Pin
VCC 3V3
GND GND
SCK GP6
MISO GP4
MOSI GP7
CS / SS GP5

UART / Serial

UART0 is on GP0 (TX) and GP1 (RX) by default; UART1 is on GP4/GP5. Note: GP0/GP1 are also the default I2C0 pins — pick one usage per project.

External Device RP2040-Zero Pin
Device TX GP1 (UART0 RX)
Device RX GP0 (UART0 TX)
VCC 3V3 or 5V (match device)
GND GND (shared)

Code Examples

MicroPython - Light the On-board WS2812

rgb_led.py
# RP2040-Zero - color the on-board WS2812 RGB LED (GP16)
# Flash MicroPython for RP2040 from micropython.org, then save this as main.py

from machine import Pin
from neopixel import NeoPixel
import time

pixel = NeoPixel(Pin(16), 1)

colors = [(64, 0, 0), (0, 64, 0), (0, 0, 64), (32, 32, 32)]
while True:
    for c in colors:
        pixel[0] = c
        pixel.write()
        time.sleep(0.5)

Arduino IDE (arduino-pico) - Blink External LED

rp2040_blink.ino
// RP2040-Zero - external LED blink on GP2
// Install: Boards Manager URL https://github.com/earlephilhower/arduino,/pico/releases/download/global/package_rp2040_index.json
// Select Board: Tools -> Board -> "Raspberry Pi Pico/RP2040" -> "Generic RP2040"

const int ledPin = 2;

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  digitalWrite(ledPin, HIGH);
  delay(500);
  digitalWrite(ledPin, LOW);
  delay(500);
}

CircuitPython - Read Analog (Potentiometer)

code.py
# RP2040-Zero - read a 10k pot on GP26 (ADC0)
# Drop CircuitPython for "Waveshare RP2040-Zero" or "Raspberry Pi Pico" onto the board

import board
import analogio
import time

pot = analogio.AnalogIn(board.GP26)

while True:
    raw = pot.value                 # 0 - 65535
    voltage = raw * 3.3 / 65535
    print("Raw:", raw, "  Voltage: {:.2f} V".format(voltage))
    time.sleep(0.2)

Frequently Asked Questions

How do I put the RP2040-Zero into bootloader mode?
Hold the BOOT button while pressing and releasing RESET (or while plugging in USB). The board will appear as a USB drive named "RPI-RP2". Drag-and-drop a .uf2 file (MicroPython, CircuitPython, or your compiled Arduino .uf2) onto the drive to flash it.
Does it work with the same code as the Pico?
Yes — the RP2040 chip is identical to the Pico's. Almost any Pico tutorial works without changes if you stick to the same GP pin numbers. The differences are: smaller form factor, USB-C instead of Micro-USB, on-board WS2812 RGB LED (vs single green LED on the Pico), and slightly fewer broken-out pins on the front side.
Are the GPIO pins 5V tolerant?
No. RP2040 GPIO is 3.3V only. Driving 5V into any GPIO can damage the chip. Use a logic level converter for 5V signals.
What is the on-board RGB LED, and how do I drive it?
It's a single WS2812 (NeoPixel) addressable LED on GP16. Use the NeoPixel library in CircuitPython (import neopixel; px = neopixel.NeoPixel(board.GP16, 1)), the neopixel module in MicroPython, or the Adafruit_NeoPixel library in Arduino.
How do I use the GP17-GP25 pins on the back?
They are exposed as solder pads on the back of the board. Solder wires directly, or use them with a header strip if you build a custom carrier board. They behave exactly like the front-side GPIOs.
Can I overclock the RP2040?
Yes. The chip is rated for 133 MHz but reliably runs at 200-250 MHz. In Arduino, change the CPU clock under Tools > CPU Speed. In MicroPython, use machine.freq(250_000_000). Watch out for thermal stability if you push it.
Does this board have Wi-Fi or Bluetooth?
No — this is the bare RP2040, no radio. If you need wireless, look at the Pico W (RP2040 + CYW43439 Wi-Fi) or pair the Zero with an external module (ESP8266, ESP-01, NRF24L01).