Skip to content

Raspberry Pi Pico 2 W and RP2350 Getting Started Guide

Pico 2 W combines the RP2350 microcontroller with 2.4GHz Wi-Fi and Bluetooth 5.2. It is a microcontroller board, not a Linux computer: code runs directly from flash, starts quickly, and has no Raspberry Pi OS package manager or normal shell.

Pico W vs Pico 2 W

Feature Pico W Pico 2 W
MCU RP2040 RP2350
CPU Dual Cortex-M0+ up to 133MHz Dual Cortex-M33 or Hazard3 up to 150MHz
SRAM 264KB 520KB
On-board flash 2MB 4MB
Wi-Fi 2.4GHz 802.11n 2.4GHz 802.11n, WPA3 support
Bluetooth 5.2 5.2
PIO state machines 8 12

The official Pico-series documentation lists 26 multi-function GPIO pins, USB host/device support, and the wireless capabilities. Existing Pico W wiring often transfers, but timing-sensitive code and low-level RP2040 assumptions must be reviewed.

Install Current MicroPython

  1. Download the Pico 2 W MicroPython UF2 from the official Pico software page.
  2. Disconnect USB.
  3. Hold BOOTSEL while connecting USB.
  4. Release BOOTSEL when the RP2350 mass-storage volume appears.
  5. Copy the Pico 2 W UF2 to that volume.

Install mpremote on the development computer:

1
2
3
4
5
python3 -m venv .venv
. .venv/bin/activate
python -m pip install --upgrade mpremote
mpremote connect list
mpremote repl

Inside the REPL, verify the firmware and board:

1
2
3
4
5
import os
import sys

print(os.uname())
print(sys.implementation)

Save this as main.py:

1
2
3
4
5
6
7
8
from machine import Pin
from time import sleep

led = Pin("LED", Pin.OUT)

while True:
    led.toggle()
    sleep(0.5)

Copy and run it:

mpremote fs cp main.py :main.py
mpremote reset

Press Ctrl+C in the REPL to interrupt an accidental infinite loop. If the board becomes hard to access, reconnect in BOOTSEL mode and use a flash-reset UF2 before reinstalling MicroPython.

Connect to Wi-Fi Without Committing Passwords

Create a local secrets.py that is excluded from source control:

WIFI_SSID = "your-network"
WIFI_PASSWORD = "replace-me"

Use it from wifi_test.py:

import network
import time
from secrets import WIFI_PASSWORD, WIFI_SSID

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(WIFI_SSID, WIFI_PASSWORD)

deadline = time.ticks_add(time.ticks_ms(), 20_000)
while not wlan.isconnected():
    if time.ticks_diff(deadline, time.ticks_ms()) <= 0:
        raise RuntimeError(f"Wi-Fi timeout, status={wlan.status()}")
    time.sleep_ms(200)

print("address:", wlan.ifconfig()[0])
print("RSSI:", wlan.status("rssi"))

Upload both files, but add secrets.py to .gitignore. Do not print the password or embed it in screenshots.

Antenna and Power Rules

  • Keep metal, batteries, displays, and ground planes away from the antenna end.
  • Power from a stable USB source during development.
  • Do not drive GPIO above 3.3V.
  • Disconnect motors and relays while diagnosing unexplained resets.
  • Use a transistor or driver board for loads beyond GPIO current limits.

The wireless chip shares internal signals with VSYS monitoring, so do not assume continuous ADC sampling of VSYS while Wi-Fi traffic is active.

RP2350 A4 and Errata

RP2350 A4 is a newer silicon stepping that fixes many issues present in early A2 parts. Keep the Pico SDK and MicroPython firmware current, record the board marking and purchase date, and consult the current RP2350 errata before depending on security or high-impedance GPIO behaviour. Do not infer the stepping only from a benchmark result.

Reproducible Microcontroller Benchmarks

Use ticks_us() and report enough context to repeat the test:

import gc
import os
import time

def integer_work(iterations=100_000):
    value = 1
    for i in range(iterations):
        value = (value * 33 + i) & 0xFFFFFFFF
    return value

gc.collect()
start = time.ticks_us()
result = integer_work()
elapsed = time.ticks_diff(time.ticks_us(), start)

print(os.uname())
print("result", result)
print("elapsed_us", elapsed)
print("free_heap", gc.mem_free())

Run at least five times after a reset and report the median, firmware build, CPU frequency, power source, temperature conditions, and whether Wi-Fi was active. For Wi-Fi tests, measure connection time, RSSI, packet loss, and energy over the same interval instead of quoting maximum PHY rate.

Common Failures

The board does not appear as a USB drive

Hold BOOTSEL before connecting the cable, use a known data cable, and try a direct USB port. The mass-storage volume appears only in bootloader mode.

mpremote cannot find the serial port

Close other serial monitors, confirm the user has serial-device permission, and inspect dmesg or Device Manager. A running program can still block the REPL until interrupted.

Wi-Fi never connects

Pico 2 W supports 2.4GHz Wi-Fi, not a 5GHz-only SSID. Check credentials, WPA mode, regulatory settings, signal level, and antenna clearance.

Pico W code behaves differently

Update libraries, remove direct RP2040 register assumptions, and review PIO timing. Use feature detection rather than selecting code only from a board-name string.

FAQ

Can Pico 2 W run Raspberry Pi OS?

No. RP2350 is a microcontroller and does not provide the memory management and resources expected by Raspberry Pi OS.

Should beginners use MicroPython or C/C++?

MicroPython gives the fastest feedback for sensors and networking. Use the Pico C/C++ SDK when deterministic timing, lower memory use, PIO integration, or maximum performance matters.

Does Pico 2 W replace Pico W?

It is the preferred choice for new designs needing more CPU, RAM, flash, or security features. Existing validated Pico W products may not benefit enough to justify a migration.