Raspberry Pi Pico W

RP2040-based microcontroller board with onboard 2.4 GHz Wi-Fi and Bluetooth, built for connected 3.3V projects.

Raspberry Pi Pico W: RP2040 · Wi-Fi

What is the Raspberry Pi Pico W?

The Raspberry Pi Pico W is a low-cost microcontroller board built around Raspberry Pi's RP2040 chip, a dual-core Arm Cortex-M0+ running at up to 133 MHz with 264 KB of on-chip SRAM and 2 MB of external QSPI flash. It keeps the same 40-pin form factor and pinout as the original Pico while adding wireless connectivity.

Wireless is provided by an Infineon CYW43439 module linked to the RP2040 over SPI. It supports 2.4 GHz IEEE 802.11 b/g/n Wi-Fi and Bluetooth 5.2 (both Classic and LE, enabled through firmware), using an on-board antenna licensed from ABRACON (formerly ProAnt). One quirk to know: the board's user LED is wired to the CYW43439's WL_GPIO0 line rather than to an RP2040 pin, so the wireless driver must be initialized to blink it.

The board exposes 26 multifunction GPIO at 3.3V logic, with 3 analog inputs (12-bit ADC), 16 PWM channels, and 2 each of SPI, I2C, and UART, plus the RP2040's Programmable I/O (PIO) blocks for custom interfaces. Makers program it in C/C++ with the Pico SDK or in MicroPython, and it is powered and flashed over its micro-USB connector, which makes it a popular choice for Wi-Fi sensors, web-controlled hardware, and battery-powered IoT nodes.

Raspberry Pi Pico W pin reference

PinFunctionType
GP0 GP0Digital · PWM · SPI SPI0 RX · UART UART0 TX · I²C I2C0 SDABidirectional (GPIO)
GP1 GP1Digital · PWM · SPI SPI0 CSn · UART UART0 RX · I²C I2C0 SCLBidirectional (GPIO)
GND_3 GNDPowerPower in
GP2 GP2Digital · PWM · SPI SPI0 SCK · UART UART0 CTS · I²C I2C1 SDABidirectional (GPIO)
GP3 GP3Digital · PWM · SPI SPI0 TX · UART UART0 RTS · I²C I2C1 SCLBidirectional (GPIO)
GP4 GP4Digital · PWM · SPI SPI0 RX · UART UART1 TX · I²C I2C0 SDABidirectional (GPIO)
GP5 GP5Digital · PWM · SPI SPI0 CSn · UART UART1 RX · I²C I2C0 SCLBidirectional (GPIO)
GND_8 GNDPowerPower in
GP6 GP6Digital · PWM · SPI SPI0 SCK · UART UART1 CTS · I²C I2C1 SDABidirectional (GPIO)
GP7 GP7Digital · PWM · SPI SPI0 TX · UART UART1 RTS · I²C I2C1 SCLBidirectional (GPIO)
GP8 GP8Digital · PWM · SPI SPI1 RX · UART UART1 TX · I²C I2C0 SDABidirectional (GPIO)
GP9 GP9Digital · PWM · SPI SPI1 CSn · UART UART1 RX · I²C I2C0 SCLBidirectional (GPIO)
GND_13 GNDPowerPower in
GP10 GP10Digital · PWM · SPI SPI1 SCK · UART UART1 CTS · I²C I2C1 SDABidirectional (GPIO)
GP11 GP11Digital · PWM · SPI SPI1 TX · UART UART1 RTS · I²C I2C1 SCLBidirectional (GPIO)
GP12 GP12Digital · PWM · SPI SPI1 RX · UART UART0 TX · I²C I2C0 SDABidirectional (GPIO)
GP13 GP13Digital · PWM · SPI SPI1 CSn · UART UART0 RX · I²C I2C0 SCLBidirectional (GPIO)
GND_18 GNDPowerPower in
GP14 GP14Digital · PWM · SPI SPI1 SCK · UART UART0 CTS · I²C I2C1 SDABidirectional (GPIO)
GP15 GP15Digital · PWM · SPI SPI1 TX · UART UART0 RTS · I²C I2C1 SCLBidirectional (GPIO)
VBUS VBUSPowerPower in
VSYS VSYSPowerPower in
GND_38 GNDPowerPower in
3V3_EN 3V3_ENDigitalDigital input
3V3 3V3PowerPower out
ADC_VREF ADC_VREFAnalog ADC referenceDigital input
GP28 GP28 / ADC2Analog ADC2 · Digital · PWM · SPI SPI1 RX · UART UART0 TX · I²C I2C0 SDABidirectional (GPIO)
GND_33 GND / AGNDPowerPower in
GP27 GP27 / ADC1Analog ADC1 · Digital · PWM · SPI SPI1 TX · UART UART1 RTS · I²C I2C1 SCLBidirectional (GPIO)
GP26 GP26 / ADC0Analog ADC0 · Digital · PWM · SPI SPI1 SCK · UART UART1 CTS · I²C I2C1 SDABidirectional (GPIO)
RUN RUNDigitalDigital input
GP22 GP22Digital · PWM · SPI SPI0 SCK · UART UART1 CTS · I²C I2C1 SDABidirectional (GPIO)
GND_28 GNDPowerPower in
GP21 GP21Digital · PWM · SPI SPI0 CSn · UART UART1 RX · I²C I2C0 SCLBidirectional (GPIO)
GP20 GP20Digital · PWM · SPI SPI0 RX · UART UART1 TX · I²C I2C0 SDABidirectional (GPIO)
GP19 GP19Digital · PWM · SPI SPI0 TX · UART UART0 RTS · I²C I2C1 SCLBidirectional (GPIO)
GP18 GP18Digital · PWM · SPI SPI0 SCK · UART UART0 CTS · I²C I2C1 SDABidirectional (GPIO)
GND_23 GNDPowerPower in
GP17 GP17Digital · PWM · SPI SPI0 CSn · UART UART0 RX · I²C I2C0 SCLBidirectional (GPIO)
GP16 GP16Digital · PWM · SPI SPI0 RX · UART UART0 TX · I²C I2C0 SDABidirectional (GPIO)

Specifications

Operating voltage
3.3 V
Interface
gpio
Clock speed
133 MHz
Flash
2 MB
RAM
264 KB
GPIO pins
26
ADC
3 channels · 12-bit
PWM channels
16
Dimensions
51 × 21 × 8.5 mm

Verified from the Tinkered component library · Raspberry Pi.

Circuit requirements

  • GPIO run at 3.3V logic and are NOT 5V tolerant; feeding 5V into any GP pin can permanently damage the chip. Level-shift 5V signals down to 3.3V.
  • Power the board over micro-USB (5V lands on the VBUS pin), or supply VSYS directly from a 1.8-5.5V source such as a battery for standalone use.
  • VBUS and VSYS are separated by an onboard Schottky diode; a common battery hookup feeds the cell into VSYS through its own diode so USB and battery can coexist without back-powering.
  • The 3V3 pin is a regulated 3.3V output for powering sensors and peripherals; do not drive external voltage into it. Pull 3V3_EN low to disable the onboard regulator and shut the board down.
  • The onboard LED is on the CYW43439's WL_GPIO0, not on an RP2040 GPIO, so the Wi-Fi/Bluetooth driver must be brought up before the LED can be toggled.
  • Pull the RUN pin low to reset the RP2040; hold BOOTSEL while connecting USB to mount the board as a drive for firmware flashing.

Common Raspberry Pi Pico W mistakes

Blinking the LED like it is a plain Pico

On the original Pico the onboard LED is GP25, but on the Pico W that pin is used by the wireless chip and the LED moved to the CYW43439's WL_GPIO0. Code that toggles GP25 does nothing; you must initialize the wireless driver and use the cyw43 'LED' pin instead.

Assuming the GPIO are 5V tolerant

The RP2040 runs at 3.3V logic and its pins are not 5V tolerant. Wiring a 5V sensor output, another 5V board, or a 5V I2C bus straight to a GP pin can damage it. Use a level shifter or voltage divider.

Trying to use the wireless chip's shared pins

GPIO used to interface the CYW43439 (and VSYS voltage sensing) are consumed internally on the Pico W and are not free general-purpose pins on the header. Do not plan a design that reuses them for your own signals.

Skipping the Wi-Fi country/region setting

In MicroPython, failing to set the wireless country (for example rp2.country('US')) or leaving default region settings can cause the board to fail to connect or scan properly. Configure the region before joining a network.

Back-powering through VBUS while on USB

Injecting external 5V into VBUS while the board is also plugged into a computer's USB can create conflicting supplies. For battery or external power, feed VSYS through a diode rather than driving VBUS.

Raspberry Pi Pico W datasheet

Official Raspberry Pi Pico W datasheetRaspberry Pi

Popular Raspberry Pi Pico W projects

Wi-Fi environmental sensor

Read a temperature, humidity, or air-quality sensor over I2C and push readings to a cloud dashboard or MQTT broker over the onboard Wi-Fi.

Browser-controlled GPIO web server

Run a small MicroPython or C web server on the Pico W so a phone or laptop can switch relays, LEDs, or motors from a web page on the local network.

MQTT home-automation node

Publish sensor data and subscribe to commands over MQTT to tie the board into Home Assistant or another smart-home hub.

Bluetooth LE beacon or peripheral

Use the CYW43439's Bluetooth 5.2 LE support to broadcast sensor values or act as a BLE peripheral for a phone app.

NTP internet clock and display

Sync time from an NTP server over Wi-Fi and show it on an OLED or LED matrix, with no external RTC required.

IoT data logger to a cloud service

Sample analog inputs on the 12-bit ADC and stream them to a service like Adafruit IO or ThingSpeak for remote graphing and alerts.

Build with the Raspberry Pi Pico W.

Drop the Raspberry Pi Pico W into a circuit, write firmware, and simulate it in your browser, then deploy to real hardware. All in one editable Tinkered project.