The Raspberry Pi Pico W packs the RP2040 microcontroller and an Infineon CYW43439 wireless chip into a tiny footprint, but that wireless integration comes at a strict hardware cost: it hijacks several GPIO pins for internal routing. If you treat the Pico W pinout exactly like the standard Pico, you will crash your WiFi stack or fry your sensors. Below is the definitive bench reference for physical pins, protocol mappings, and the wire color standards you need to keep your harnesses organized.
The Complete Raspberry Pi Pico W Pinout & Protocol Table
This table maps the physical edge pins to their primary GPIO assignments, alternate functions, and the de-facto standard wire colors used in modern prototyping. Note that the Pico W exposes 26 multifunction GPIO pins (GP0-GP22, GP26-GP28), while GP23-GP25 and GP29 are consumed internally by the wireless chip.
| Physical Pin | GPIO / Label | Primary / Alt Function | Standard Wire Color (US Hobbyist) |
|---|---|---|---|
| 1 | GP0 | UART0 TX / SPI0 RX / I2C0 SDA | Green (TX) / Yellow (SDA) |
| 2 | GP1 | UART0 RX / SPI0 CSn / I2C0 SCL | White (RX) / Blue (SCL) |
| 3 | GND | Ground Reference | Black |
| 4 | GP2 | SPI0 SCK / I2C1 SDA | Orange (SCK) |
| 5 | GP3 | SPI0 TX / I2C1 SCL | Green (MOSI) |
| 8 | GP4 | SPI0 RX / I2C0 SDA / UART1 TX | White (MISO) |
| 9 | GP5 | SPI0 CSn / I2C0 SCL / UART1 RX | Red (CS) |
| 36 | 3V3(OUT) | 3.3V Regulator Output (Max 300mA) | Red |
| 38 | GND | Ground Reference | Black |
| 39 | VSYS | Main Input Voltage (1.8V to 5.5V) | Red (Striped) |
| 40 | VBUS | 5V from Micro-USB (Input only) | Red (5V) |
| Internal / Stolen Pins (Do not use for external wiring) | |||
| N/A | GP23 | WL_ON (Wireless Chip Power Enable) | N/A |
| N/A | GP24 | WL_DATA (Wireless SPI Data) | N/A |
| N/A | GP25 | WL_CLK (Wireless SPI Clock) | N/A |
| N/A | GP29 | ADC_VREF / WL_PMU | N/A |
Protocol Wire Color Standards: US Hobbyist vs. Industrial
When wiring sensors to the Pico W, the color of your jumper wires matters for debugging. While the Raspberry Pi Foundation does not mandate wire colors, two distinct ecosystems dominate the bench.
US Hobbyist / STEMMA QT Standard
Pioneered by Adafruit and adopted by SparkFun, this standard is universal in the US maker space and for 3.3V logic boards like the Pico W:
- Power: Red (3V3/VCC), Black (GND)
- I2C: Yellow (SDA), Blue (SCL)
- SPI: Orange (SCK), Green (MOSI), White (MISO), Red/Stripe (CS)
- UART: Green (TX), White (RX)
Industrial / IEC 60446 Variants
If you are integrating the Pico W into a 24V industrial control panel using optocouplers or level shifters, you must follow IEC 60446 (now superseded by IEC 60445) for power and signal wiring to pass safety inspections:
- AC/DC Power: Brown (Line/+), Blue (Neutral/-), Green-Yellow (Protective Earth/Shield)
- Industrial Sensors (e.g., M12 connectors): Brown (+24V), Blue (0V), Black (Signal/Output), White (Config/NC)
Rows People Get Wrong: The CYW43439 Hardware Traps
The most common bench failures on the Pico W stem from engineers copying code and wiring diagrams from the original, non-wireless Pico. Here are the specific rows and pins that cause grief:
1. The GPIO 25 LED Trap
On the standard Pico, GP25 is wired directly to the onboard green LED. On the Pico W, GP25 is the SPI clock line driving the CYW43439 WiFi chip. If your code includes machine.Pin(25, machine.Pin.OUT) and you toggle it, you will corrupt the WiFi SPI bus and crash the network stack. The user LED on the Pico W is actually connected to the WL_GPIO0 pin on the wireless chip itself. In modern MicroPython, you must use machine.Pin('LED', machine.Pin.OUT) to safely target it.
2. VSYS vs. 3V3(OUT) Misunderstandings
Pin 39 (VSYS) is the main power input, accepting 1.8V to 5.5V. Pin 36 (3V3 OUT) is the output of the onboard RT6154 buck-boost regulator. A frequent mistake is back-feeding 5V into Pin 36 to power the board via a breadboard rail. This bypasses the regulator's protection and will destroy the 3.3V logic domain. Always feed external battery packs (like a 3.7V LiPo) into VSYS.
3. ADC_VREF (GP29) is Gone
On the standard Pico, GP29 can be used as a general GPIO or as the ADC reference voltage input. On the Pico W, GP29 is hardwired to the wireless chip's power management unit (WL_PMU). You only have three usable ADC pins on the Pico W: GP26 (ADC0), GP27 (ADC1), and GP28 (ADC2).
Tracing Faded Markings: Bench Recovery Techniques
Early production runs of the Pico W used silkscreen ink that flakes off after a few months of handling and reflow work. If your board markings are faded or missing, do not guess the pinout. Use these recovery methods:
- The Bottom Test Points: Flip the board over. The Pico W exposes copper test points along the bottom edge. TP1 maps to GP0, TP2 to GP1, and so on sequentially up to TP26 (GP25). Use your multimeter in continuity mode (beep test) to trace from your header pin down to the test point.
- The RP2040 QFN Package: If the test points are covered by solder mask or flux, use a macro lens and continuity probe to trace directly from the castellated edge pad to the exposed pads on the RP2040 QFN chip. Pin 1 of the RP2040 (marked by a small dot) is GP0.
- USB Shield Grounding: To verify your GND pins (Pins 3, 8, 13, 18, 23, 28, 33, 38), simply test for continuity to the metal shell of the micro-USB connector. All ground planes are tied together.
Raspberry Pi Pico W Pinout FAQ
Why does my Raspberry Pi Pico W crash when I toggle GPIO 25?
GPIO 25 on the Pico W is not a general-purpose pin; it is the SPI clock (WL_CLK) for the onboard Infineon CYW43439 wireless chip. Toggling it manually interrupts the communication between the RP2040 and the WiFi module, causing the network stack to panic and crash. To control the onboard LED, use the logical 'LED' pin mapping provided by the MicroPython or C SDK, which routes the command to the wireless chip's internal GPIO.
Can I power high-draw sensors directly from the 3V3(OUT) pin?
No. The onboard RT6154 regulator on the Pico W has a strict thermal and current limit. While it can theoretically supply up to 500mA, practical continuous draw on the 3V3(OUT) pin should be kept under 300mA to prevent thermal shutdown, especially if the board is also powering the WiFi radio (which draws peaks of ~130mA during transmission). For high-draw sensors like OLED displays or NeoPixel strips, power them directly from the VBUS (5V) or VSYS pins and use a dedicated logic level shifter for the data lines.
How do I map I2C1 to alternative pins on the Pico W?
The RP2040 uses a flexible PIO and peripheral muxing system. I2C1 is not locked to a single pair of pins. According to the MicroPython quickref and the RP2040 datasheet, I2C1 SDA can be mapped to GP2, GP6, GP10, GP14, GP18, or GP26. I2C1 SCL can be mapped to GP3, GP7, GP11, GP15, GP19, or GP27. Simply initialize the bus with your desired pins in your code: i2c = machine.I2C(1, sda=machine.Pin(6), scl=machine.Pin(7)).
What happens if I accidentally feed 5V into a GPIO pin?
The RP2040 is strictly a 3.3V logic device. Feeding 5V into any GPIO pin will forward-bias the internal ESD protection diodes, routing the excess voltage into the 3.3V rail. If the current is high enough (typically >20mA per pin), it will permanently destroy the GPIO pad and potentially latch up the entire microcontroller. Always use a voltage divider or a dedicated level shifter (like the BSS138 MOSFET circuit) when interfacing the Pico W with 5V Arduino peripherals.






