The overview, with examples running, is on the board page.
The Waveshare RP2040-Zero
The Pico's RP2040 on a board 23.5 by 18 mm: twenty-three pins named by GPIO, a USB-C socket and a NeoPixel on GP16.
What it is
The same RP2040 as the Raspberry Pi Pico, a Cortex-M0+, on Waveshare's small square board. It has nine castellated pins down each long edge, 0.6 inch apart, five more along the bottom edge, the BOOT and RESET buttons and a WS2812 NeoPixel. There is no plain user LED. Mokxi runs the chip, its pins and the NeoPixel.
Pin numbers: by GPIO number
The silkscreen names each pin by its GPIO, and so does the arduino-pico core's
"Waveshare RP2040 Zero": digitalWrite(0, HIGH) drives GP0. A0 to A3 are
GP26 to GP29. The pin column is Waveshare's numbering: 1 to 9 down the left
from the USB end, 10 to 14 along the bottom, 15 to 23 up the right.
| Pin | Name | GPIO | Also |
|---|---|---|---|
| 1 | 5V |
5 V supply | |
| 2 | GND |
ground | |
| 3 | 3V3 |
3.3 V supply | |
| 4 | GP29 |
29 | A3 |
| 5 | GP28 |
28 | A2 |
| 6 | GP27 |
27 | A1 |
| 7 | GP26 |
26 | A0 |
| 8 | GP15 |
15 | SPI1 MOSI |
| 9 | GP14 |
14 | SPI1 SCK |
| 10 | GP13 |
13 | SPI1 CS |
| 11 | GP12 |
12 | SPI1 MISO |
| 12 | GP11 |
11 | |
| 13 | GP10 |
10 | |
| 14 | GP9 |
9 | Serial2 RX |
| 15 | GP8 |
8 | Serial2 TX |
| 16 | GP7 |
7 | |
| 17 | GP6 |
6 | |
| 18 | GP5 |
5 | I2C SCL, SPI SS |
| 19 | GP4 |
4 | I2C SDA, SPI MISO |
| 20 | GP3 |
3 | SPI MOSI |
| 21 | GP2 |
2 | SPI SCK |
| 22 | GP1 |
1 | UART RX, see below |
| 23 | GP0 |
0 | UART TX, see below |
A0 to A3 read the volts on the net, ten bits against 3.3 V unless
analogReadResolution() asks for more. Every GPIO pin can do PWM with
analogWrite(), and every one can take attachInterrupt().
Wire uses GP4 and GP5, SPI uses GP2, GP4, GP3 and GP5, and SPI1 uses
GP14, GP12, GP15 and GP13. They run in software on those pins. Wire and
SPI share GP4 and GP5, so a sketch that wants both can put its SPI device
on SPI1.
Serial reaches the serial monitor, and Serial1 is the same port, so GP0
and GP1 stay ordinary pins. Serial2 is UART1, with TX on GP8 and RX on GP9.
Keep it beside the breadboard
The five bottom pins, GP13 to GP9, sit in one column across the board. Pushed into a breadboard, GP9 and GP10 land in the same strip and short together, in Mokxi as on the bench. So the starter keeps the board beside the breadboard and reaches it with jumper wires.
The NeoPixel
The only light a sketch can drive is a WS2812 on GP16 (PIN_NEOPIXEL),
powered from 3.3 V. GP16 is inside the board, on no pin. It is a full
WS2812 model of its own, so Adafruit_NeoPixel works as
it does on a desk:
#include <Adafruit_NeoPixel.h>
Adafruit_NeoPixel pixel(1, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800);
The board draws the NeoPixel in the color it was last sent.
There is no plain LED
There is no LED_BUILTIN on this board, so a sketch that uses it does not
compile, which is more honest than one that blinks nothing. Wire an LED and a
220 ohm resistor from a pin to GND instead; the built-in Blink uses GP0.
What is modeled
The Pico model's chip, whole: the Cortex-M0+ core, GPIO and the pads, PWM on
every pin, the TIMER behind millis() and delay(), UART0 wired to the
serial monitor, UART1 as Serial2, pin interrupts, the watchdog and the ADC
on GP26 to GP29, at the real RP2040 addresses. The NeoPixel is on the board.
What is not modeled
The nine solder pads on the back (GP17 to GP25) and the power LED. RESET and BOOT are buttons with no pin.
From the RP2040 itself, as on the Pico: the second core,
PIO, DMA, the chip's own I2C and SPI blocks (Wire and SPI run in software
instead), the USB controller (Serial reaches the monitor directly), the RTC
and the clock tree.
Common mistakes
digitalWrite(LED_BUILTIN, HIGH) from a Pico sketch. There is no
LED_BUILTIN here. Wire an LED to a pin, or color the NeoPixel.
Pushing the board into a breadboard. GP9 and GP10 short together. Keep it beside the breadboard and use jumpers.
Starter projects
RP2040-Zero NeoPixel is the board on its own, fading its NeoPixel on GP16
around the color wheel with Adafruit_NeoPixel.
RP2040-Zero blink is the board beside a breadboard, blinking an LED and a 220 ohm resistor on GP0.