Getting started with the Raspberry Pi Pico
Applies to: the plain Raspberry Pi Pico (first generation, RP2040, no wireless). Pico H (pre-soldered headers) behaves identically; Pico W adds wireless and is out of scope here.
The identity check
The plain Pico is a first-generation board: RP2040, 2 MB flash, micro-USB, castellated DIP. If your board says Pico 2, use the Pico 2 getting-started guide — same BOOTSEL mechanics, but a different volume name (RP2350), firmware file (RPI_PICO2) and build target (PICO_BOARD=pico2).
Pick a language first
Raspberry Pi supports two official paths, and the choice changes which file you drag onto the board:
| Path | You drag | You get |
|---|---|---|
| MicroPython | a MicroPython .uf2 from micropython.org | an interpreter; you write Python over USB serial (REPL) |
| C/C++ SDK | your own compiled .uf2 | a bare-metal binary; no interpreter on the board |
Neither is “the beginner one” officially — MicroPython needs no toolchain, C/C++ needs CMake + the Arm cross-compiler installed before you write a line of code.
MicroPython: drag, drop, REPL
From the official drag-and-drop guide:
- Push and hold BOOTSEL, connect USB to the computer, release BOOTSEL when the board appears as a mass-storage device called RPI-RP2.
- Drag the Pico MicroPython UF2 onto that volume. The Pico reboots — you are now running MicroPython.
- Access the REPL through USB serial (the official book walks both the command line and the Thonny IDE).
Expected: a drive literally named RPI-RP2 appears and disappears after the drag (that reboot is success, not a failure). If nothing appears at all, see USB board not detected.
C/C++ SDK: toolchain, then a UF2 you build
The official quick-start is deliberately terse and Linux-based; summarized faithfully:
- Install CMake (≥ 3.13) and the Arm cross-compiler (
gcc-arm-none-eabiand its libraries). git clone https://github.com/raspberrypi/pico-sdk.gitand setPICO_SDK_PATH(environment or-DPICO_SDK_PATH=to CMake).- Copy
external/pico_sdk_import.cmakefrom the SDK into your project;include()it beforeproject()inCMakeLists.txt, callpico_sdk_init(). - Build a
hello_world(single.c, linkpico_stdlib,pico_add_extra_outputsproduces the UF2), then drag that UF2 over BOOTSEL exactly like the MicroPython file.
Expected: the build emits a .uf2 next to the ELF; stdout defaults to UART — setup_default_uart() prints over GPIO0/1, not USB, unless you use the USB example. For Windows/macOS detail steps the official books are the source of truth, not this page.
What this page cannot tell you
- We did not run these steps on hardware here. The flow is transcribed from the pinned official documents below; no MCUID device bring-up receipt exists for it.
- Which MicroPython build you got — the download links track the latest release; this page does not pin a MicroPython version number.
- Pico W wireless setup — a separate official connectivity document covers it.
Sources
- Raspberry Pi Pico documentation — drag-and-drop MicroPython (commit
21d772e7) - C/C++ SDK quick-start (commit
21d772e7) - Pico-series overview (commit
21d772e7) - MCUID data record: Raspberry Pi Pico — header mapping, internal-function GPIOs, BOOTSEL/SWD facts with fixed sources