Raspberry Pi RP2040

Collection of RP2040-based microcontroller boards

Raspberry Pi RP2040
The new microcontroller from Raspberry Pi

Welcome to Raspberry Pi RP2040

Welcome to Raspberry Pi RP2040, a microcontroller designed here at Raspberry Pi.

Whether you have a Raspberry Pi Pico or another RP2040-based microcontroller board, everything you need to get started is here. You'll find support for getting started with C/C++ or MicroPython on Raspberry Pi Pico, and links to resources for other boards that use RP2040. There are also links to the technical documentation for both the Raspberry Pi Pico microcontroller board and our RP2040 microcontroller chip.

RP2040 Boards

Documentation

Documentation for Raspberry Pi Pico and other RP2040-based boards.

The API level Doxygen documentation for the Raspberry Pi Pico C/C++ SDK is available as a micro-site, and frequent questions are answered in the Frequently Asked Questions (FAQ) document.

Boards from Raspberry Pi:

Raspberry Pi Pico

Designed by Raspberry Pi, RP2040 features a dual-core Arm Cortex-M0+ processor with 264KB internal RAM and support for up to 16MB of off-chip Flash. A wide range of flexible I/O options includes I2C, SPI, and — uniquely — Programmable I/O (PIO). These support endless possible applications for this small and affordable package.

More about the Raspberry Pi Pico

Boards from Adafruit:

Feather 2040

A new chip means a new Feather, and the Raspberry Pi RP2040 is no exception. When we saw this chip we thought "this chip is going to be awesome when we give it the Feather Treatment" and so we did! This Feather features the RP2040, and all niceties you know and love about Feather.

More about the Feather 2040

ItsyBitsy 2040

A new chip means a new ItsyBitsy, and the Raspberry Pi RP2040 is no exception. When we saw this chip we thought "this chip is going to be awesome when we give it the ItsyBitsy teensy-weensy Treatment" and so we did! This Itsy' features the RP2040, and all niceties you know and love about the ItsyBitsy family.

More about the ItsyBitsy 2040

Boards from Arduino:

Nano RP2040 Connect

We started from the Nano format with its own tiny footprint, leveraging on some of the existing key features of other Nanos like the versatile u-blox NINA WiFi and Bluetooth module. The new board will come packed with some high-quality MEMS sensors from STM, an efficient power section, and a bunch of other innovations.

More about the Nano RP2040 Connect

Boards from Pimoroni:

Tiny 2040

A postage stamp sized RP2040 development board with a USB-C connection, perfect for portable projects, wearables, and embedding into devices. Tiny 2040 comes with 8MB of QSPI (XiP) flash on board so it can handle projects small and large with ease.

More about the Tiny 2040

Keybow 2040

A luxe 16 key USB-C keyboard with tactile mechanical switches and fully customisable RGB lighting, ideal for custom macro pads, midi controllers and stream decks. RP2040 gives Keybow 2040 low latency input, zero boot time and a new, compact footprint.

More about the Keybow 2040

PicoSystem

An all-in-one pocket sized games console with RP2040 at its heart, ready for filling up with all the most fun pixels! PicoSystem has a nice tactile joypad and buttons, a vibrant 240x240 screen and a lipo battery, neatly wrapped up in some shiny abstract PCB art.

More about the PicoSystem

Boards from SparkFun:

Pro Micro - RP2040

The SparkFun Pro Micro RP2040 is a low-cost, high performance board with flexible digital interfaces featuring the RP2040 microcontroller. The board also includes a WS2812B addressable LED, boot button, reset button, USB-C, resettable PTC fuse, castellated pads, and a Qwiic connector to add devices from SparkFun’s quick-connect I2C ecosystem.

More about the Pro Micro - RP2040

Thing Plus - RP2040

The SparkFun Thing Plus - RP2040 harnesses the capability of RP2040 on a compact development board. Within the Feather-compatible Thing Plus form factor with 18 GPIO pins, the board offers an SD card slot, 16MB flash memory, a JST single-cell battery connector, an addressable WS2812 RGB LED, JTAG PTH pins, mounting holes, and SparkFun's signature Qwiic connector.

More about the Thing Plus - RP2040

MicroMod RP2040 Processor

The SparkFun MicroMod Pi RP2040 Processor Board is part of SparkFun’s MicroMod modular interface system. The MicroMod M.2 connector makes it a breeze to connect your MicroMod Pi RP2040 Processor with the MicroMod carrier board that gives you the inputs and outputs you need for your project.

More about the MicroMod RP2040 Processor

Raspberry Pi Pico

Raspberry Pi Pico is a low-cost, high-performance microcontroller board with flexible digital interfaces. Key features include:

  • RP2040 microcontroller chip designed by Raspberry Pi in the United Kingdom
  • Dual-core Arm Cortex M0+ processor, flexible clock running up to 133 MHz
  • 264KB of SRAM, and 2MB of on-board Flash memory
  • Castellated module allows soldering direct to carrier boards
  • USB 1.1 with device and host support
  • Low-power sleep and dormant modes
  • Drag-and-drop programming using mass storage over USB
  • 26 × multi-function GPIO pins
  • 2 × SPI, 2 × I2C, 2 × UART, 3 × 12-bit ADC, 16 × controllable PWM channels
  • Accurate clock and timer on-chip
  • Temperature sensor
  • Accelerated floating-point libraries on-chip
  • 8 × Programmable I/O (PIO) state machines for custom peripheral support

Documentation

Documentation for Raspberry Pi Pico and other RP2040-based boards.

The API level Doxygen documentation for the Raspberry Pi Pico C/C++ SDK is available as a micro-site, and frequent questions are answered in the Frequently Asked Questions (FAQ) document.

Utilities

What is on your Pico?

If you have forgotten what has been programmed into your Raspberry Pi Pico, and the program was built using our Pico C/C++ SDK, it will usually have a name and other useful information embedded into the binary. You can use the Picotool command line utility to find out these details. Full instructions on how to use Picotool to do this are available in our 'getting started' documentation.

Picotool repo

Debugging using another Raspberry Pi Pico

It is possible to use one Raspberry Pi Pico to debug another Pico. This is possible via picoprobe, an application that allows a Pico to act as a USB → SWD and UART converter. This makes it easy to use a Pico on non-Raspberry Pi platforms such as Windows, Mac, and Linux computers where you don’t have GPIOs to connect directly to your Pico. Full instructions on how to use Picoprobe to do this are available in our 'getting started' documentation.

Download UF2 filePicoprobe repo

Resetting Flash memory

Pico's BOOTSEL mode lives in read-only memory inside the RP2040 chip, and can't be overwritten accidentally. No matter what, if you hold down the BOOTSEL button when you plug in your Pico, it will appear as a drive onto which you can drag a new UF2 file. There is no way to brick the board through software. However, there are some circumstances where you might want to make sure your Flash memory is empty. You can do this by dragging and dropping a special UF2 binary onto your Pico when it is in mass storage mode.

Download UF2 fileSee the code

Getting started with MicroPython

Drag and drop MicroPython

You can program your Pico by connecting it to a computer via USB, then dragging and dropping a file onto it, so we’ve put together a downloadable UF2 file to let you install MicroPython more easily.

  1. Download the MicroPython UF2 file by clicking the button below.
  2. Push and hold the BOOTSEL button and plug your Pico into the USB port of your Raspberry Pi or other computer. Release the BOOTSEL button after your Pico is connected.
  3. It will mount as a Mass Storage Device called RPI-RP2.
  4. Drag and drop the MicroPython UF2 file onto the RPI-RP2 volume. Your Pico will reboot. You are now running MicroPython.

You can access the REPL via USB Serial. Our MicroPython documentation contains step-by-step instructions for connecting to your Pico and programming it in MicroPython.

Download UF2 file

MicroPython animation

What is MicroPython?

MicroPython is a full implementation of the Python 3 programming language that runs directly on embedded hardware like Raspberry Pi Pico. You get an interactive prompt (the REPL) to execute commands immediately via USB Serial, and a built-in filesystem. The Pico port of MicroPython includes modules for accessing low-level chip-specific hardware.

Go to WikiGo to Forum

MicroPython logo

Your official guide

If you’re new to MicroPython, our official guide, "Get started with MicroPython on Raspberry Pi Pico", is a great place to start. Learn the basics of MicroPython and physical computing, connect your Pico to displays and sensors, build alarms, reaction games, and more.

Buy now

Get started with MicroPython on Raspberry Pi Pico illustration

Documentation

Documentation for Raspberry Pi Pico and other RP2040-based boards.

The API level Doxygen documentation for the Raspberry Pi Pico C/C++ SDK is available as a micro-site, and frequent questions are answered in the Frequently Asked Questions (FAQ) document.

Getting started with C/C++

Blink an LED

The first program anyone writes when using a new microcontroller is to blink an LED on and off. The Raspberry Pi Pico comes with a single LED on-board (connected to GPIO pin 25). You can blink this on and off by,

  1. Download the Blink UF2
  2. Push and hold the BOOTSEL button and plug your Pico into the USB port of your Raspberry Pi or other computer.
  3. It will mount as a Mass Storage Device called RPI-RP2.
  4. Drag and drop the Blink UF2 binary onto the RPI-RP2 volume.
  5. Pico will reboot, and the on-board LED should start blinking.

Download UF2 fileSee the code

Blink an LED animation

Say 'Hello World'

The next program anyone writes is to say 'Hello World' over a USB serial connection.

  1. Download the 'Hello World' UF2.
  2. Push and hold the BOOTSEL button and plug your Pico into the USB port of your Raspberry Pi or other computer.
  3. It will mount as a Mass Storage Device called RPI-RP2.
  4. Drag and drop the 'Hello World' UF2 binary onto the RPI-RP2 volume. Pico will reboot
  5. Open a Terminal window and type:
sudo apt install minicom
minicom -b 115200 -o -D /dev/ttyACM0

You should see 'Hello, world!' printed to the Terminal

Download UF2 fileSee the code

Hello World animation

Raspberry Pi Pico C/C++ SDK

Our official C SDK can be used from the command line, or from popular integrated development environments like Visual Studio Code, Eclipse, and CLion. To get started, download our C/C++ SDK and Examples, and take a look at our 'getting started' documentation to get going. Or for a quick setup see the next section.

SDK RepoExamples Repo

Pico C SDK illustration

SDK Setup

For a full walk-through of how to get going with the C/C++ SDK, you should read our 'getting started' documentation. However, if you are intending to develop for Pico on a Raspberry Pi, then you can set up the C/C++ toolchain quickly by running our setup script from the command line.

Note: You should make sure the OS on your Raspberry Pi is up to date before running the setup script.

Download Setup Script

SDK setup illustration

Documentation

Documentation for Raspberry Pi Pico and other RP2040-based boards.

The API level Doxygen documentation for the Raspberry Pi Pico C/C++ SDK is available as a micro-site, and frequent questions are answered in the Frequently Asked Questions (FAQ) document.

Get inspired

Looking for project inspiration?

We'll be posting great Raspberry Pi Pico projects from around the world.

Windows Setup Script

For anyone that might have had problems manually installing the development toolchain under Windows 10, then Nikhil Dabas has your back with a new easy-to-use installer to get started on Windows for the C/C++ SDK. The script was inspired by, and is roughly equivalent to, our own pico-setup script for the Raspberry Pi.

Ethernet support for Pico

For anyone wanting to connect their Pico to the network Sandeep Mistry has put together support for RMII-based Ethernet PHY modules like the Microchip LAN8720. The project leverages the lwIP stack, and the PIO, DMA, and dual-core capabilities of RP2040 to create an Ethernet MAC stack in software.

SD Card support for Pico

For anyone wanting SD Card and FatFS support from their Raspberry Pi Pico this library by Carl J Kugler. Library support is wrapped up inside a complete runnable project, with an example data logging application and a command line interface.

Machine Learning on Pico

A tutorial on using the the RP2040 port of TensorFlow Lite for Microcontrollers framework to build a person detection using Machine Learning and the Arducam Mini 2MP Plus. The tutorial walks you through building TensorFlow and wiring up, as well as how to see results on your laptop in Processing.

CircuitPython for RP2040

CircuitPython 6.2 brings the examples and libraries of CircuitPython to the RP2040. After installing via UF2, a CIRCUITPY drive appears with code.py. Edit it with your favorite text editor to start coding. The code will re-run after the file is saved.

Arduino support for Pico

A (community) port of the Arduino core to Raspberry Pi Pico and other RP2040-based boards. There is automated discovery of boards in bootloader mode, so they show up in the IDE, and the upload command works using the (included) Microsoft UF2 tool.

WebAssembly Dino Game

The famous WebAssembly "Dino Game" running on the Raspberry Pi Pico and the Pimoroni Display Pack using the Display Pack Library. Serves as an example of how to pull WebAssembly code and run them on Pico using the Rasberry Pi Pico C SDK.

Pico-powered Keyboard

Interested in building a Pico-powered mechanical keyboard? This project is a custom mechanical keyboard inspired by the CFTKB Mysterium, with an UK ISO layout, TKL (75%) size, form factor. Keycaps used were HK Gaming 9009 and the switches were Gateron Brown.

Pico Plate

Another project from Luke Wren to connect your Raspberry Pi Pico neatly to your Raspberry Pi 400 without having any wires flapping around. It connects UART0, SWD, and the +5V rail neatly, and adds a reset button. Like most of Luke's work it's under a CC0 license.

Pico Bird

A Flappy Bird clone using the C SDK for the Raspberry Pi Pico and the Pimoroni Display Pack. Makes use of the Display Pack Library. You can control your bird using the 'Y' button on the Pico Display, while the walls come with added eyes👀 and teeth😬 for extra scaryness.

Pico Display Case

A case to hold Raspberry Pi Pico with the Pimoroni Pico Display Pack attached. Features a perfectly fitting hole for the Micro-USB slot and Pico itself snaps to the case from the 2 knobs of the bottom so you can even shake it and it'll hold. Just push from Raspberry logo of the board if you need to take it out.

FUZIX port to Pico

A FUZIX port by David Given to Raspberry Pi Pico and RP2040. FUZIX is Alan Cox’s lightweight Unix for small machines, which provides a pretty decent old-school Unix environment, with multiple processes, the classic Bourne shell, init and getty, and so on. Want to run Unix on Pico? Now you can.

Automatic game playing

A video tutorial on how to use the Adafruit CircuitPython port to RP2040 on Raspberry Pi Pico to turn it into a USB HID deveice and create simple auto clicker for Android games. There are chickens everywhere.

Everywhere I tell you. 🐔

Bitbanged DVI on RP2040

Wouldn't it be absurd and wonderful to connect a microcontroller straight to an HD TV, with no other electronics in between? RP2040 has no video hardware, but enough processing performance and IO flexibility to drive DVI straight out of the GPIOs if you're careful. 1x microcontroller, 8x 270 ohm resistors, 1x HDMI cable, 1x TV.

PicoDVI board outputting an image to a display

Motor encoding with PIO

Using the Pimoroni Pico Explorer to and PIO to create a motor quadrature encoder, which robots use to know the angles of their joints. A really nice set of example code showing how to make use of a screen, drive and read signals from a motor.

A game of Space Invaders👾

A video tutorial on how to use an SSD1306 OLED display and a potentiometer to build a very tiny Space Invaders👾 clone in MicroPython on a breadboard. Although I've got to agree with the comments, the next step has to be a game of Asteroids☄️🛸..?

3D printed LEGO® case

A Raspberry Pi Pico LEGO® case. The Adafruit LEGO® compatible mount features studs that fit standard bricks or base plates, and it features built in standoffs so you can snap fit the Pico right on top. The 3D printed enclosure features two switches. These can be used for projects that need user buttons or a reset button.

A Pico probe enclosure

It is possible to use one Raspberry Pi Pico to debug another Raspberry Pi Pico. This is possible via picoprobe, an application that allows a Raspberry Pi Pico to act as a USB → SWD and UART converter. But maybe you want your Pico probe to look like a proper debugger? Well now you can thanks to Brian Welsby.

Pico Sequencer

This Pico sequencer can handle 16 channels of MIDI. That means drums, bass, melodies and more! 🎹🥁🎵🎶 The code for this USB MIDI step sequencer, which uses the Raspberry Pi Pico and a Pimoroni RGB Keyboard is written in CircuitPython and is available on Github.

Soil Moisture Sensor

A little soil moisture indicator for your indoor house plants using The Raspberry Pi Pico and CircuitPython so you never forget to give your ferns🌿 a little drink. The project makes use of a Sparkfun soil moisture sensor, and a Neopixel ring.

Pico StreamDeck

A nice of example of using Pico as a HID device. Pete Gallagher is using his Pico and CircuitPython to to create an OBS StreamDeck. All wrapped inside a 3D printed enclosure with custom keycaps.

Pico C++ Boilerplate Project

Take away all the dull bits of setting up your open source project. Just hit "Use this template" and start coding! Once you've got something ready to share, tag a "Release" and a compiled UF2 will be attached automatically for people to try out.

Pico WS2812b

A library for WS2812b (NeoPixel) LEDs. This convenience library makes using NeoPixel strings much easier from MicroPython. Providess two methods; one to set the colour value of an particular LED, the other to send data up to the strip.

NeoPixel dithering with Pico

A dithering WS2812b (NeoPixel) controller. One core handles the calculations for the dithering, the other core is free to create whatever animations you like. The pixels are pushed out with PIO. The virtual bit depth is configurable.

Neopixel LED strip