Waveshare RP2040-Zero pinout: every pin, the NeoPixel and the bottom row
Beginner
Or see every lesson.
- 455parts on the bench
- 43boards running now
- 1.00xreal time, on every board
The Waveshare RP2040-Zero is the Raspberry Pi Pico’s RP2040 on a board 23.5 by 18 mm, with a USB-C socket, nine pins down each side and five along the bottom. Every pin is named by its GPIO, so the pin marked GP4 is GPIO 4 in code. This page lists all twenty-three pins in Waveshare’s order with what each one can do, the bus defaults, the PWM slices, the NeoPixel and why the board does not belong in a breadboard.
The circuit above is the board in Mokxi on its own, fading its NeoPixel on GP16 around the color wheel. There is no plain LED on the board, which is the first thing to know about it. The table is held to the same board model the simulator runs, and where Mokxi does less than the chip, the page says so.
Every pin, in Waveshare’s order
With the USB socket at the top, Waveshare numbers the pins 1 to 9 down the left side, 10 to 14 along the bottom from left to right, and 15 to 23 up the right side. The left side reads 5V, GND, 3V3, GP29, GP28, GP27, GP26, GP15 and GP14. The bottom reads GP13, GP12, GP11, GP10 and GP9. The right side, from the top, reads GP0 down to GP8, so pin 23 is GP0 at the top right.
In code a pin is its GPIO number: digitalWrite(4, HIGH) drives GP4, and A0 to A3 are GP26 to GP29. The PWM column names the slice and channel: "PWM 2A" is slice 2, channel A. The bus pins are the defaults of the Arduino core’s board definition for the RP2040-Zero.
| Pin | GPIO | What it can do | Watch out for |
|---|---|---|---|
| 5V | - | Pin 1. USB 5 V. | Not a GPIO. |
| GND | - | Pin 2. Ground. | - |
| 3V3 | - | Pin 3. The regulator’s 3.3 V output. | Not a GPIO. |
| GP29 | 29 | Pin 4. ADC3 (A3). PWM 6B. | - |
| GP28 | 28 | Pin 5. ADC2 (A2). PWM 6A. | - |
| GP27 | 27 | Pin 6. ADC1 (A1). PWM 5B. | - |
| GP26 | 26 | Pin 7. ADC0 (A0). PWM 5A. | - |
| GP15 | 15 | Pin 8. PWM 7B. SPI1 MOSI (default). | - |
| GP14 | 14 | Pin 9. PWM 7A. SPI1 SCK (default). | - |
| GP13 | 13 | Pin 10, bottom row. PWM 6B. SPI1 CS (default). | Bottom row: see below. |
| GP12 | 12 | Pin 11, bottom row. PWM 6A. SPI1 MISO (default). | Bottom row: see below. |
| GP11 | 11 | Pin 12, bottom row. PWM 5B. | Bottom row: see below. |
| GP10 | 10 | Pin 13, bottom row. PWM 5A. | Shorts to GP9 in a breadboard. |
| GP9 | 9 | Pin 14, bottom row. PWM 4B. Serial2 RX. | Shorts to GP10 in a breadboard. |
| GP8 | 8 | Pin 15. PWM 4A. Serial2 TX. | - |
| GP7 | 7 | Pin 16. PWM 3B. | - |
| GP6 | 6 | Pin 17. PWM 3A. | - |
| GP5 | 5 | Pin 18. PWM 2B. I2C SCL (default). SPI SS (default). | Shared by Wire and SPI. |
| GP4 | 4 | Pin 19. PWM 2A. I2C SDA (default). SPI MISO (default). | Shared by Wire and SPI. |
| GP3 | 3 | Pin 20. PWM 1B. SPI MOSI (default). | - |
| GP2 | 2 | Pin 21. PWM 1A. SPI SCK (default). | - |
| GP1 | 1 | Pin 22. PWM 0B. UART0 RX on the chip. | In Mokxi a plain pin; Serial goes to the monitor. |
| GP0 | 0 | Pin 23. PWM 0A. UART0 TX on the chip. | In Mokxi a plain pin; Serial goes to the monitor. |
The bottom row, and why the board stays out of the breadboard
The five bottom pins, GP13 to GP9, run across the board in one line. Pushed into a breadboard with the side rows straddling the channel, that line lies along the breadboard’s strips, so GP9 and GP10 land in the same strip and short together. Mokxi models this as the bench does: push the board in and the two pins are one net.
So keep the RP2040-Zero beside the breadboard and reach it with jumper wires, as the Blink starter does with an LED and a 220 ohm resistor on GP0. The two side rows alone carry I2C, SPI and all four analog inputs, so most projects never need the bottom row; Serial2’s RX on GP9 is the one bus pin down there.
The NeoPixel, and no plain LED
The only light a sketch can drive is a WS2812 NeoPixel on GP16, PIN_NEOPIXEL, powered from 3.3 V. GP16 is inside the board and reaches no pin. In Mokxi it is a full WS2812 model, so Adafruit_NeoPixel pixel(1, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800) works as it does on a desk, and the board draws the NeoPixel in the color it was last sent.
There is no LED_BUILTIN on this board, so a Blink that uses it does not compile, which is more honest than one that blinks nothing. Wire an LED and a resistor from a pin to GND instead. Mokxi does not model the power LED.
Analog inputs, PWM and the pads on the back
The analog inputs are GP26 to GP29, which are A0 to A3, the RP2040’s four ADC inputs, all on the left side. analogRead returns ten bits against 3.3 V unless analogReadResolution asks for more. On a Pico, GP29 measures VSYS inside the board; here it is a pin of its own.
Every GPIO pin can do PWM, and GPIO n is on slice (n / 2) mod 8, channel A for an even pin and B for an odd one. Pins on one slice share a frequency, so GP0 and GP1 share slice 0, and GP10, GP11, GP26 and GP27 all sit on slice 5. Nine more GPIOs, GP17 to GP25, come out as solder pads on the back of the board. Mokxi does not model those pads.
Serial, I2C and SPI
Serial is the USB port in the Arduino core, and in Mokxi it reaches the serial monitor directly. Serial1 is the same port here, and GP0 and GP1 stay ordinary pins. Serial2 is UART1, with TX on GP8 and RX on GP9, for a GPS module or another board.
Wire.begin() puts I2C on GP4 for SDA and GP5 for SCL. SPI is GP2, GP4, GP3 and GP5 for SCK, MISO, MOSI and SS, and SPI1 is GP14, GP12, GP15 and GP13. Wire and SPI share GP4 and GP5, so a sketch that uses both can put its SPI device on SPI1. In Mokxi the buses run in software on those pins, because the RP2040’s I2C and SPI blocks are not modeled.
The two buttons, the flash and getting a sketch onto it
Beside the USB-C socket are two buttons, BOOT and RESET, and the board carries 2 MB of flash, as a Pico does. To put a sketch on a real one, hold BOOT while you plug it in, or hold BOOT and tap RESET: the RP2040 then shows up as a drive called RPI-RP2, and the Arduino IDE, or a .uf2 dragged onto that drive, writes the flash. After the first upload the Arduino core usually resets the board into that mode by itself, so the buttons are only needed when a sketch has crashed the USB port.
Questions
Which RP2040-Zero pins are analog?
GP26 to GP29, which are A0 to A3 in code. They are pins 7 to 4 on the left side.
Which pin is the NeoPixel on the RP2040-Zero?
GP16, which is `PIN_NEOPIXEL`. It is inside the board and reaches no pin.
Does the RP2040-Zero have an LED_BUILTIN?
No. The board has no plain user LED, so `LED_BUILTIN` is not defined. Wire an LED and a resistor to a pin, or color the NeoPixel.
What are the RP2040-Zero I2C pins?
SDA is GP4 and SCL is GP5, the pins `Wire.begin()` uses.
Can I put the RP2040-Zero in a breadboard?
Not with its bottom row in. The five bottom pins sit in one line, so GP9 and GP10 land in the same strip and short together. Keep it beside the breadboard and use jumpers.
Which pins are UART on the RP2040-Zero?
GP0 and GP1 are UART0’s TX and RX, and GP8 and GP9 are `Serial2`’s TX and RX. `Serial` is the USB socket.
Keep going
Build this for real
Open the editor, change a value and watch the number move with it. Nothing to install, and no account needed.