Raspberry Pi Pico W & Wireless RP2040

Raspberry Pi Pico W & Wireless RP2040
CPU: Dual Cortex-M0+Clock: 133 MHzWireless: Wi-Fi 4 + BLE 5.2RAM: 264 KB SRAMFlash: 2 MB QSPIHardware PIO: 8 State Machines

What is Raspberry Pi Pico W & Wireless RP2040?

The Raspberry Pi Pico W brings wireless connectivity to the popular RP2040 microcontroller platform. Powered by Raspberry Pi’s custom silicon dual-core ARM Cortex-M0+ processor running at 133 MHz, it integrates an onboard Infineon CYW43439 metallic-shielded module supporting 2.4 GHz 802.11n Wi-Fi and Bluetooth 5.2 LE.

Retaining the identical physical footprint, castellated pin holes, 264 KB internal SRAM, and 8 Programmable I/O (PIO) state machines as the original Pico, the Pico W enables seamless development in MicroPython, C/C++, and CircuitPython for connected IoT devices, battery monitors, and web interfaces.

Technical Specifications

MicrocontrollerRaspberry Pi RP2040 (Dual-Core ARM Cortex-M0+)
Clock Frequency133 MHz (Overclockable up to 250+ MHz)
Wireless ChipsetInfineon CYW43439 (2.4 GHz 802.11n Wi-Fi + BLE 5.2)
Operating Logic Voltage3.3V
Input Voltage (VSYS / USB)1.8V to 5.5V DC (Built-in Buck-Boost SMPS)
SRAM Memory264 KB on-chip SRAM across 6 independent banks
Flash Storage2 MB QSPI NOR Flash (supports XIP execute-in-place)
Digital GPIO Pins26 Multi-Function GPIOs (3.3V logic)
Programmable I/O (PIO)2 PIO blocks (8 state machines total)
Analog ADC Channels3x 12-bit 500 ksps ADCs + internal temp sensor
Hardware Peripherals2x UART, 2x SPI, 2x I2C, 16x PWM channels, 1x USB 1.1
Programming InterfaceUF2 Mass Storage Drag-and-Drop / SWD Debug
Dimensions & Weight21 mm x 51 mm (3 g)

Recommended Applications & Industry Uses

📡

Connected IoT & Cloud Dashboards

Transmits telemetry over Wi-Fi to AWS IoT, Adafruit IO, or ThingSpeak using MicroPython sockets or lightweight HTTP/MQTT clients.

⚡

High-Speed Cycle-Accurate Protocol Emulation

Uses 8 PIO state machines to drive addressable RGB NeoPixel matrices, generate composite/DVI video, or read high-speed optical encoders.

🔋

Battery-Powered Environmental Monitors

Integrated buck-boost converter accepts 1.8V to 5.5V from LiPo, 3x AA, or solar cells with low standby current draw.

⌨️

Wireless Bluetooth HID & Keyboards

Emulates wireless BLE keyboards, gamepads, and macro decks running CircuitPython or custom bare-metal C++ firmware.

Key Features & Architectural Highlights

📶

Infineon CYW43439 Wireless

Wi-Fi 4 + BLE 5.2

Seamless 2.4 GHz 802.11b/g/n Wi-Fi and Bluetooth 5.2 LE connectivity controlled via internal SPI bus, keeping standard GPIO pins free for user sensors.

⚙️

Programmable I/O (PIO)

8 State Machines

8 independent state machines execute cycle-perfect assembly to emulate custom protocols (VGA, DVI, I2S, WS2812B) with zero main CPU execution overhead.

🧠

Dual ARM Cortex-M0+

133 MHz Dual-Core

Parallel dual-core processing allows Core 1 to handle real-time sensor loops or motor PID while Core 0 manages Wi-Fi networking and HTTP client requests.

💾

Zero-Contention Bus Matrix

264KB Multi-Bank SRAM

264 KB of SRAM divided into 6 independent banks allows both Cortex-M0+ cores and DMA channels to access memory simultaneously without stalling.

🔋

Wide Input Buck-Boost

1.8V - 5.5V SMPS

Onboard Richtek RT6154 buck-boost converter allows the board to run seamlessly from USB 5V, single LiPo batteries, or multiple alkaline cells.

🐍

First-Class MicroPython Support

MicroPython Native

Official MicroPython firmware with precompiled network.WLAN and uasyncio modules enables building responsive asynchronous IoT servers in minutes.

Pin Configuration & Peripheral Layout

Digital GPIO Pins (GP0 - GP28)

26 multi-function 3.3V digital I/O pins with independent pull-up, pull-down, and slew-rate controls.

  • All 26 pins support 16 independent hardware PWM channels
  • Direct connection to hardware PIO state machines for sub-microsecond pin toggling
  • Note: Onboard LED is controlled via CYW43439 wireless chip rather than GP25

Analog ADC Channels (GP26 - GP28)

3 external 12-bit analog input channels (ADC0, ADC1, ADC2) plus internal temperature and voltage channels.

  • Reads voltages from 0V to 3.3V with 4096 discrete resolution steps (approx. 0.8 mV per step)
  • ADC channel 4 is connected internally to an on-chip silicon temperature sensor
  • ADC channel 3 measures VSYS divided by 3 for monitoring battery charge level

Dual SPI, I2C & UART Peripherals

Heavily multiplexed buses that can be routed across almost any GPIO pair.

  • Two independent hardware I2C controllers (I2C0, I2C1) supporting up to 1 MHz
  • Two high-speed SPI controllers (SPI0, SPI1) running up to 62.5 MHz with DMA support
  • Two hardware UART ports (UART0, UART1) supporting high baud rates and FIFO buffers

Communication Protocols

Wi-Fi 802.11n

CYW43439 SPI Bus

Station (client) and SoftAP (hotspot) modes supporting WPA2/WPA3 personal encryption and HTTP/MQTT networking.

Bluetooth 5.2 LE

CYW43439 SPI Bus

BLE Central and Peripheral roles supporting custom GATT services, temperature beacons, and smartphone links.

Programmable I/O

Any 26 GPIO Pins

8 cycle-accurate state machines capable of generating DVI video, driving LED matrix panels, or emulating SDIO.

Hardware SPI (x2)

Flexible GP Pinout

Dual SPI buses capable of streaming 60 FPS graphical data to ST7789 / ILI9341 color TFT display panels.

Hardware I2C (x2)

Flexible GP Pinout

Dual I2C buses for reading sensor clusters (BME280, MPU6050) without address collisions.

Hardware UART (x2)

Flexible GP Pinout

Dual UART channels for serial debugging, GPS modules, or inter-board packet exchanges.

Advanced Topics & Expert Knowledge

🐍

MicroPython Asynchronous Web Server

Use uasyncio with MicroPython on the Pico W to handle multiple concurrent HTTP browser connections without blocking sensor sampling loops.

import uasyncio as asyncio; asyncio.create_task(run_server());

Pro tip: Asynchronous event loops allow serving interactive web control dashboards while simultaneously polling I2C sensors at 100 Hz.

💡

Onboard LED Control Caveat

Unlike the original Pico (where the LED is wired to GP25), the Pico W routes the onboard LED through the CYW43439 chip.

led = Pin("LED", Pin.OUT); led.on(); // In MicroPython

Pro tip: In the C++ SDK, initialize the wireless chip with cyw43_arch_init() before controlling the LED via cyw43_arch_gpio_put().

⚡

Dual-Core Parallel Task Delegation

Launch dedicated C++ routines or MicroPython threads onto Core 1 using _thread to eliminate timing jitter from wireless networking.

_thread.start_new_thread(motor_control_loop, ())

Pro tip: Use hardware spinlocks or queue mailboxes to pass sensor data between Core 0 and Core 1 safely.

🔋

Battery Voltage Monitoring on ADC3

The Pico W includes an internal voltage divider connecting the VSYS power rail to internal ADC3 (GPIO29) to measure remaining battery capacity.

vsys_adc = ADC(3); battery_volts = vsys_adc.read_u16() * 3 * 3.3 / 65535;

Pro tip: Turn on the internal wireless chip powersave mode (CYW43_POWERSAVE_MODE) to extend battery life by 5x.

🚀

PIO State Machine Acceleration

Execute custom cycle-perfect assembly to sample GPIOs or bit-bang protocols without loading either Cortex-M0+ CPU core.

@rp2.asm_pio(out_init=rp2.PIO.OUT_LOW) ...

Pro tip: PIO can read bidirectional encoder signals at multi-megahertz frequencies without missing a single pulse.

📁

UF2 Drag-and-Drop Bootloader

Hold the BOOTSEL button while inserting the USB cable. The Pico W mounts as a standard flash drive (RPI-RP2) on any OS for instant flashing.

cp firmware.uf2 /Volumes/RPI-RP2/

Pro tip: The BOOTROM is permanently etched in silicon and cannot be corrupted or bricked by bad user code.

Recommended Applications & Industry Uses

📡

Connected IoT & Cloud Dashboards

Transmits telemetry over Wi-Fi to AWS IoT, Adafruit IO, or ThingSpeak using MicroPython sockets or lightweight HTTP/MQTT clients.

⚡

High-Speed Cycle-Accurate Protocol Emulation

Uses 8 PIO state machines to drive addressable RGB NeoPixel matrices, generate composite/DVI video, or read high-speed optical encoders.

🔋

Battery-Powered Environmental Monitors

Integrated buck-boost converter accepts 1.8V to 5.5V from LiPo, 3x AA, or solar cells with low standby current draw.

⌨️

Wireless Bluetooth HID & Keyboards

Emulates wireless BLE keyboards, gamepads, and macro decks running CircuitPython or custom bare-metal C++ firmware.

Programming on Raspberry Pi Pico W & Wireless RP2040

🐍 MicroPython: Asynchronous Web Server & LED Toggle
# Raspberry Pi Pico W - MicroPython Web Server
import network
import socket
import time
from machine import Pin

led = Pin("LED", Pin.OUT)
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("Your_WiFi_SSID", "Your_WiFi_Password")

while not wlan.isconnected():
    time.sleep(0.5)

print("Connected! IP:", wlan.ifconfig()[0])

# Open socket on port 80
s = socket.socket()
s.bind(('', 80))
s.listen(5)

while True:
    conn, addr = s.accept()
    request = str(conn.recv(1024))
    
    if '/light/on' in request:
        led.on()
    elif '/light/off' in request:
        led.off()
        
    html = "<html><body><h1>Volt X Pico W</h1><p><a href='/light/on'>ON</a> | <a href='/light/off'>OFF</a></p></body></html>"
    conn.send('HTTP/1.1 200 OK\nContent-Type: text/html\n\n' + html)
    conn.close()
⚙️ C/C++ SDK: cyw43 Wireless Initialization & Blink
#include "pico/stdlib.h"
#include "pico/cyw43_arch.h"

int main() {
    stdio_init_all();
    
    // Initialize the CYW43439 wireless chip architecture
    if (cyw43_arch_init()) {
        printf("Failed to initialize CYW43 wireless chip\n");
        return -1;
    }
    
    // Connect to Wi-Fi in Station Mode
    cyw43_arch_enable_sta_mode();
    printf("Connecting to Wi-Fi...\n");
    if (cyw43_arch_wifi_connect_timeout_ms("SSID", "PASSWORD", CYW43_AUTH_WPA2_AES_PSK, 30000)) {
        printf("Failed to connect\n");
    } else {
        printf("Connected successfully!\n");
    }

    // Toggle onboard LED through CYW43 chip
    while (true) {
        cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 1);
        sleep_ms(500);
        cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 0);
        sleep_ms(500);
    }
}

📚 Official Citations & Technical References

To ensure the absolute accuracy and reliability of this guide, all specifications, pinouts, and register settings have been cross-verified with official manufacturer documentation:

Related Resources

Basic Projects

Build beginner-friendly microcontroller projects

Sensor Guides

Learn about ultrasonic, temperature, and motion sensors

Electronics Tools

Use our free circuit calculators

Embedded Roadmap

Follow a structured learning path

Frequently Asked Questions

How do I control the onboard LED on the Raspberry Pi Pico W?

On the Pico W, the onboard LED is connected to the CYW43439 wireless chip instead of GP25. In MicroPython, use Pin("LED", Pin.OUT). In C/C++, initialize cyw43_arch_init() and call cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 1).

Can the Raspberry Pi Pico W run standard Raspberry Pi Pico code?

Yes! All GPIO pins (GP0 to GP28), PIO state machines, dual Cortex-M0+ cores, and memory layouts are 100% identical. The only hardware difference is the addition of the wireless module and the relocation of the LED pin.

Does the Raspberry Pi Pico W support Bluetooth?

Yes! Firmware support for Bluetooth 5.2 (BLE and Classic Bluetooth) is enabled in both the official C/C++ SDK and recent MicroPython builds using the aioble library.