Maker.io main logo

RP2040 Thing Plus Hookup Guide

2024-12-10 | By SparkFun Electronics

License: See Original Project LEDs / Discrete / Modules Arduino Qwiic Raspberry Pi SBC

Courtesy of SparkFun

Guide by Nick Poole, santaimpersonator

Introduction

Introducing the SparkFun Thing Plus - RP2040, featuring the RP2040 microcontroller (MCU) on a Feather (Thing ‎Plus) form-factor. Additionally, this development platform also provides an SD card slot, 16MB (128Mbit) flash ‎memory, a JST single cell battery connector (with a charging circuit and attached fuel gauge sensor), a ‎WS2812 RGB LED, JTAG (PTH) pins, and our signature Qwiic connector.‎

The Raspberry Pi RP2040 (the first MCU from the Raspberry Pi Foundation) is a low cost, dual-core ‎Arm® Cortex® M0+ microcontroller with 264kB of SRAM, running at 133MHz. It includes USB host functionality, ‎a timer with 4 alarms, a real time counter (RTC), six dedicated IO pins for Quad-SPI flash (supporting execute ‎in place), and thirty multifunction GPIO (*18 of which are broken out on the board), with the following ‎capabilities:‎

  • Four 12-bit Analogue to Digital Converter (ADC) channels

  • Two UART buses

  • Two I2C buses

  • Two SPI buses

  • Up to 16 PWM channels

  • Can emulate interfaces such as SD Card and VGA

Required Materials

To get started, users will need a few items. Now some users may have a few of these items, feel free to ‎modify your cart accordingly.‎

BATTERIES

Li-Po Battery

For mobile applications, users will want to pick up a single-cell LiPo battery from our catalog. Below, ‎are a few available options:‎

JUMPER MODIFICATION

To modify the jumpers, users will need soldering equipment and/or a knife.‎

HEADERS & ACCESSORIES

Headers are great for development purposes, letting users swap parts with just a set of jumper ‎wires. If you would like to add headers to your board, check out some of the options for the Thing ‎Plus or Feather form factor boards:‎

Below is a sample selection of our other headers and soldering tools in our catalog. For a full ‎selection of our available Headers or Soldering Tools, click on the associated link.‎

The additional materials based on the tasks you wish to perform. Feel free to modify the items in your cart to fit your needs.‎

Suggested Reading

Here are a few tutorials that may help users familiarize themselves with various aspects of the board.‎

  • How to Solder: Through-Hole Soldering: This tutorial covers everything you need to know about through-‎hole soldering.‎

  • Serial Communication: Asynchronous serial communication concepts: packets, signal levels, baud rates, ‎UARTs and more!‎

  • Serial Peripheral Interface (SPI): SPI is commonly used to connect microcontrollers to peripherals such as ‎sensors, shift registers, and SD cards.‎

  • Battery Technologies: The basics behind the batteries used in portable electronic devices: LiPo, NiMH, coin ‎cells, and alkaline.‎

  • Pulse Width Modulation: An introduction to the concept of Pulse Width Modulation.‎

  • Logic Levels: Learn the difference between 3.3V and 5V devices and logic levels.‎

  • I2C: An introduction to I2C, one of the main embedded communications protocols in use today.‎

  • Analog vs. Digital: This tutorial covers the concept of analog and digital signals, as they relate to electronics.‎

qwiic_1

One of the new, convenient features of the board is that it takes advantage of the Qwiic connect system. We ‎recommend familiarizing yourself with the Logic Levels and I2C tutorials. Click on the banner above to learn ‎more about Qwiic products.‎

 

UF2 Bootloader

The SparkFun Thing Plus - RP2040 is easy to program, thanks the UF2 bootloader. With the UF2 bootloader, ‎the RP2040 Thing Plus shows up on your computer as a USB storage device without having to install ‎drivers for Windows 10, Mac, and Linux!‎

RP2040_Thing_Plus_uf2_micropython

Board being recognized as a USB device.‎

What is UF2?‎

UF2 stands for USB Flashing Format, which was developed by Microsoft for PXT (now known as MakeCode) for ‎flashing microcontrollers over the Mass Storage Class (MSC), just like a removable flash drive. The file format ‎is unique, so unfortunately, you cannot simply drag and drop any compiled binary or hex file onto the board. ‎Instead, the format of the file must have specific information to tell the processor where the data goes, in ‎addition to the data itself. For more information about UF2, you can read more from the MakeCode blog, as ‎well as the UF2 file format specification.‎

BOOTSEL Mode

Users can enter BOOTSEL mode by holding down the BOOT button when the USB connection is made to a ‎computer. The board will remain in this mode until it power cycles (happens automatically after uploading ‎a .uf2 firmware file) or the RESET button is pressed. The board will appear as a USB mass storage device under ‎the name RPI-RP2.‎

mode_2

Hold down BOOT button to enter BOOTSEL mode.‎

Note: As another option, with the USB-C cable already connected to the board and the computer, users can ‎hold down the BOOT button and toggle the RESET button to enter BOOTSEL mode. However, this method does ‎require a little bit of finger dexterity.‎

Hardware Overview

Board Dimensions

The SparkFun RP2040 Thing Plus has a feather form factor and the board dimensions are illustrated in the ‎drawing below.‎

board_3

Board dimensions (PDF) for the SparkFun RP2040 Thing Plus, in inches. ‎

Power

The SparkFun RP2040 Thing Plus only requires 3.3V to power the board. However, the simplest method to ‎power the board is through the USB-C connector.‎

power_4

SparkFun RP2040 Thing Plus power connections. ‎

The power pins that are available on the board, are detailed below:‎

  • 3V3 - A regulated 3.3V voltage source (600mA).‎

    • Regulated from the USB 5V power and/or battery connection by a AP2112 LDO.‎

    • Used to power the RP2040 MCU, WS2812 RGB LED, W25Q128 16MB flash chip, µSD card slot, ‎and Qwiic I2C bus.‎

    • Serves as the reference voltage for the RP2040 ADC (ADC_VDD).‎

    • Pin can also operate as an input from an external power source.‎

  • USB - The voltage from the USB-C connector, usually 5V.‎

  • VBAT - The voltage from the JST battery connector; meant for single cell LiPo batteries.‎

    • Used to provide a regulated 3.3V source through the AP2112 LDO (see above).‎

    • Connected to the MCP73831 linear charge management controller.‎

  • GND - The common ground or the 0V reference for the voltage supplies.‎

pins_5

SparkFun RP2040 Thing Plus power pins.‎

Current Consumption

The Thing Plus - RP2040 consumes about 24mA on average, without any code running. The table below, ‎summarizes the approximate current draw of the SparkFun RP2040 Thing Plus, through the USB-C connector, ‎for various operational conditions.‎

table_6

Note: The RP2040 microcontroller has two low power states:‎

  • SLEEP - All the processors are asleep and most of the clocks in the chip are stopped

  • DORMANT - All clocks in the chip are stopped

The real-time clock (RTC) can wake the RP2040 chip up from both of these modes. However, to wake the chip ‎from dormant mode, the RTC must be configured to use an external reference clock, supplied by a GPIO pin.‎

Power Status LED

The red, POWER LED will light up once 3.3V is supplied to the board; however, for most users, it will light up ‎when 5V is supplied through the USB connection or when a LiPo battery is connected to the JST connector.‎

red_7

SparkFun RP2040 Thing Plus POWER status LED indicator.‎

Charging Circuit

The charging circuit utilizes the MCP73831 linear charge management controller and is powered directly from ‎the USB-C connector or USB. The controller is configured for a 500mA charge rate and battery charging is ‎indicated by the yellow, CHG LED. If the charge controller is shutdown or charging is complete, the CHG LED ‎will turn off. For more information, please refer to the MCP73831 datasheet.‎

circuit_8

Charging circuit for the battery connector. ‎

Power Control

The power source to the AP2112 LDO voltage regulator is controlled by a P-channel MOSFET. In addition, ‎the 3.3V regulated output from the AP2112 is controlled by the enable (EN) pin, broken out on the board.‎

control_9

Circuit for 3.3V power control.‎

The P-channel MOSFET operation is based on the voltages at the MOSFET's gate and source pins. Depending ‎on the power sources connected to the board, the MOSFET will act as a switch and control power from the ‎battery to the AP2112 voltage regulator; detailed in the following table.‎

table_10

The enable pin of the AP2112 LDO also provides an additional amount of control for power to the board. By ‎default, the chip enable pin (EN) is pulled high, to enable the 3.3V output, supply voltage. To disable and ‎shutdown the output voltage from the AP2112, the chip enable pin (EN) needs to be pulled low (i.e., shorted to ‎ground (GND)). For more information, please refer to the AP2112 datasheet.‎

voltage_11

Enable pin on the SparkFun RP2040 Thing Plus.‎

Protection

A BAT20J Schottky diode, in the power circuit, provides reverse current protection to the USB-C (VUSB) ‎connector, from the battery (VBAT) or the board.‎

RP2040 Microcontroller

The Raspberry Pi RP2040 is a low-cost, high-performance microcontroller with flexible digital interfaces. It ‎features:‎

  • Dual Arm® Cortex®-M0+ processors, up to 133 MHz

  • ‎264 kB of embedded SRAM in 6 banks‎

  • ‎6 dedicated IO for additional storage‎

    • Connects to QSPI Flash

    • Supports execute in place (XIP))‎

  • ‎30x 3.3V user-programmable high-speed IO (only 18 are broken out on the board)‎

    • 4x 12-bit 500ksps Analogue to Digital Converter (ADC)‎

    • Various digital peripherals

    • ‎2x UART, 2x I2C, 2x SPI, up to 16 PWM channels‎

    • ‎1x Timer with 4 alarms, 1x Real Time Counter‎

  • USB 1.1 Host/Device compatible

plus_12

RP2040 on the SparkFun RP2040 Thing Plus.‎

The processor implements the ARMv6-M Thumb instruction set and provides programmable (multifunction) IO ‎‎(PIO), which is unique to the RP2040. For more information, please refer to the RP2040 datasheet.‎

JTAG Pins

Note: Currently there isn't support for the RP2040, using J-Link ARM programmers. The current ‎recommended debug hardware is a second RP2040 microcontroller.‎

For users interested in debugging their code, the SWD pins are broken out on JTAG PTH pins. On the RP2040, ‎the debug pins are:‎

  • Pin 24: SWCLK

  • Pin 25: SWDIO

jtag_13

JTAG pins on the SparkFun RP2040 Thing Plus.

An individual debug access port (DAP) to each core is attached to a shared multidrop SWD bus. Each DAP will ‎only respond to debug commands if correctly addressed by a SWD TARGETSEL command. In the event that the ‎RP2040 locks up, a Rescue debug port is available to reset the microcontroller. The default address of each ‎debug port is listed below:‎

  • Core 0: 0x01002927‎

  • Core 1: 0x11002927‎

  • Rescue DP: 0xf1002927‎

Rescue Debug Port Reset: The RP2040 can be reset through a Rescue Debug Port, allowing users to recover ‎the Thing Plus - RP2040 from a locked-up state. A Rescue Debug Port reset configures ‎the PSM_RESTART_FLAG of the CHIP_RESET register and resets the RP2040. On startup, the CHIP_RESET register ‎is read by the bootcode and when set, it causes the RP2040 to enter a safe state.‎

USB Functionality

The RP2040 contains a USB 2.0 controller that can operate as either:‎

  • Full Speed device (12 Mbit/s)‎

  • Host that can communicate with both Low Speed (1.5 Mbit/s) and Full Speed devices. This includes ‎multiple downstream devices connected to a USB hub.‎

USB Mass Storage Interface

The Bootrom provides a standard USB bootloader that emulates a writeable drive available for loading ‎firmware to the RP2040 using UF2 files. Once a UF2 file is loaded onto the drive, it is written to the flash or ‎RAM and the device automatically reboots.‎

  • The bootrom source code is hosted on GitHub.‎

RPI-RP2 Drive

The RP2040 appears as a standard 128MB flash drive named RPI-RP2 formatted as a single partition with ‎FAT16. There are only ever two actual files visible on the drive specified.‎

  • INFO_UF2.TXT - contains a string description of the UF2 bootloader and version.‎

  • INDEX.HTM - redirects to information about the RP2040 device.‎

Note: Any type of files may be written to the USB drive from the host computer, however in general these are ‎not stored, and only appear to be so because of caching on the host side. When a .uf2 file is written to the ‎device however, the special contents are recognized, and data is written to specified locations in RAM or Flash. ‎On the completed download of an entire valid .uf2 file, the RP2040 automatically reboots to run the newly ‎downloaded code.‎

Flash Memory

RP2040 has embedded ROM and SRAM, and access to external flash via a QSPI interface. On the SparkFun ‎RP2040 Thing Plus, an additional 16MB (128Mbit) of 133MHz memory is provided by a W25Q128JVPIM chip. ‎The flash memory is required for the RP2040 to store program code, which it can boot and run from through ‎its dedicated QSPI pins:‎

  • Pin 52: CLK

  • Pin 56: CS

  • Pin 53: DATA 0/DI

  • Pin 55: DATA 1/DO

  • Pin 54: DATA 2/WP

  • Pin 51: DATA 3/HOLD

memory_14

W25Q128JVPIM flash memory on the SparkFun RP2040 Thing Plus.‎

Note: The RP2040 is able to access up to a 16MB memory window starting at 0x10000000.‎

Indicator LEDs

There are 4 indication LEDs on the SparkFun RP2040 Thing Plus for:‎

  • PWR: Power (Red)‎

  • CHG: Battery Charging (Yellow)‎

  • ‎25: GPIO 25 (Blue)‎

  • WS2812: GPIO 08 (RGB)‎

Power LED

The red, PWR LED will light up once 3.3V is supplied to the board. For most users, it will light up when 5V is ‎supplied through the USB connection and/or when a LiPo battery is attached to the JST connector.‎

led_15

SparkFun RP2040 Thing Plus PWR status LED indicator.‎

Battery Charging LED

The yellow, CHG LED will light while a battery is being charged through the charging circuit. The LED will be off ‎when no battery is present (*or dimmed), when the charge management controller is in standby (after the ‎battery charging has been completed), or when the charge management controller is shutdown (thermal ‎shutdown or when the input voltage is lower than the battery voltage). The LED will be on when the charge ‎management controller is in the process of charging the battery. For more information, please refer to ‎the MCP73831 datasheet.‎

battery_16

The battery charging (CHG) LED indicator on the SparkFun RP2040 Thing Plus.‎

table_17

‎*The charge LED may appear dimmed due a trickle charge from the MAX17048 fuel gauge. Normally, the LED ‎should be OFF.‎

Status LED

The blue, 25 LED is typically used as a test or status LED to make sure that a board is working or for basic ‎debugging. This indicator is connected to GPIO 25.‎

status_18

The status/test (25) LED indicator on the SparkFun RP2040 Thing Plus.‎

WS2812 RGB LED

The WS2812 RGB LED is controlled with a 24-bit (GRB) data signal. This indicator is connected to GPIO 08 and ‎the digital output pin from the LED is broken out as the WS2812 pin on the board. For more information, please ‎refer to the WS2812C datasheet.‎

indicator_19

WS2812 LED indicator on the SparkFun RP2040 Thing Plus.‎

‎µSD Slot‎

Note: To comply with the latest OSHW design practices, on the RP2040 Thing Plus we have replaced ‎the MOSI/MISO nomenclature with SDO/SDI; the terms Master and Slave are now referred to as Controller ‎and Peripheral. The MOSI signal on a controller has been replaced with the title SDO. Please refer to ‎this announcement on the decision to deprecate the MOSI/MISO terminology and transition to ‎the SDO/SDI naming convention.‎

The SparkFun RP2040 Thing Plus includes an µSD card slot. This is great for data logging applications or storing ‎files. The µSD card slot is connected to the following dedicated GPIO:‎

  • GPIO 09: DATA 3/CS

  • GPIO 10: DATA 2

  • GPIO 11: DATA 1

  • GPIO 12: DATA 0/CIPO (or Peripheral's SDO)‎

  • GPIO 14: CLK/SCK

  • GPIO 15: CMD/COPI (or Peripheral's SDI)‎

card_20

‎µSD card slot on the SparkFun RP2040 Thing Plus.‎

Buttons

The Thing Plus -RP2040 has two buttons on the board for uploading and running code.‎

Reset Button

The RESET button is connected to the reset pin and is used to reset the microcontroller without needing to ‎unplug the board.‎

reset_21

RESET button on the SparkFun RP2040 Thing Plus.‎

Boot Button

The BOOT button is used to force the board into BOOTSEL mode, by holding down the BOOT button while ‎connecting the board to a computer through its USB-C connector. Users can then, upload firmware files to the ‎emulated RPI-RP2 USB mass storage device.‎

boot_22

BOOT button on the SparkFun RP2040 Thing Plus.‎

BOOTSEL Mode: Users can enter BOOTSEL mode by holding down the BOOT button when the USB connection is ‎made to a computer. The board will remain in this mode until it power cycles (happens automatically after ‎uploading a .uf2 firmware file) or the RESET button is pressed. The board will appear as a USB mass storage ‎device under the name RPI-RP2.‎

mode_2

Hold down BOOT button to enter BOOTSEL mode on The SparkFun Thing Plus - RP2040.‎

Primary I2C Bus

A (battery) fuel gauge and a Qwiic connector are attached to the primary I2C bus I2C1. The primary I2C bus for ‎this board utilizes the GPIO connections, detailed in the table below:‎

table_23

component_24

I2C bus components on the SparkFun RP2040 Thing Plus.‎

Note: The clock line of the I2C bus is tied between pins 9 and 35 (GPIO 07 and GPIO 23). This allows GPIO 16 -‎‎ GPIO 23 to be aligned on the board's edge, for a consecutive, eight pin bus, useful for things like HDMI.‎

shared_25

Shared pin for GPIO 07 and GPIO 23 on the SparkFun RP2040 Thing Plus.‎

‎*Since the two GPIO pins are tied together, they cannot operate simultaneously.‎

Battery Fuel Gauge

The MAX17048 fuel gauge measures the approximate charge or discharge rate, state of charge (SOC) (based ‎on ModelGauge algorithm), and voltage of a connected battery. Additionally, there is a configurable alert pin ‎functionality for low SOC, 1% SOC, reset, overvoltage, or under voltage. For more information, please refer to ‎the MAX17048 datasheet.‎

fuel_26

The MAX17048 fuel gauge on the SparkFun RP2040 Thing Plus.‎

table_27

Qwiic Connector

A Qwiic connector is provided for users to seamlessly integrate with SparkFun's Qwiic Ecosystem.‎

qwiic_28

Qwiic connector on the SparkFun RP2040 Thing Plus.‎

What is Qwiic?‎

The Qwiic system is intended a quick, hassle-free cabling/connector system for I2C devices. Qwiic is actually a ‎play on words between "quick" and I2C or "iic".

 

Features of the Qwiic System

  • NO SOLDERING

Keep your soldering iron at bay.‎

Cables plug easily between boards making quick work of setting up a new prototype. We currently offer three ‎different lengths of Qwiic cables as well as a breadboard friendly cable to connect any Qwiic enabled board to ‎anything else. Initially you may need to solder headers onto the shield to connect your platform to the Qwiic ‎system but once that’s done it’s plug and go!‎

sensor_29

Qwiic cables connected to Spectral Sensor Breakout

  • POLARIZED CONNECTOR

Minimize your mistakes.‎

How many times have you swapped the SDA and SCL wires on your breadboard hoping the ‎sensor will start working? The Qwiic connector is polarized so you know you’ll have it wired ‎correctly, every time, from the start.‎

The PCB connector is part number SM04B-SRSS (Datasheet) or equivalent. The mating ‎connector used on cables is part number SHR04V-S-B or equivalent. This is a common and ‎low-cost connector.‎

sensor_30

‎1mm pitch, 4-pin JST connector

  • DAISY CHAIN

Expand with ease.‎

It’s time to leverage the power of the I2C bus! Most Qwiic boards will have two or more connectors ‎on them allowing multiple devices to be connected.‎

sensor_31

Shown above: Qwiic Shield for Arduino on RedBoard, Spectral Sensor Breakout - NIR, Spectral Sensor Breakout - ‎Visible and SparkFun GPS Breakout

I2C Jumper

Cutting the I2C jumper will remove the 4.7kΩ pull-up resistors from the I2C bus. If you have many devices on ‎your I2C bus, you may want to remove these jumpers.‎

jumper_32

I2C pull-up resistor jumper.

Software Overview

The Raspberry Pi foundation provides excellent documentation for the RP2040 on their website. This includes ‎information for users to program the RP204 with MicroPython and C/C++ through the Pico SDK. Arduino has ‎also announced the release of their Mbed RP2040 Arduino core. The instructions below, are meant to help ‎users setup and utilize the following programming environments on Windows 10 computers:‎

  • Arduino IDE

  • Pico SDK (C/C++)‎

  • MicroPython

    • REPL

    • rshell

For utilizing the Pico SDK (C/C++) and MicroPython on Mac OSX and Linux based computers, users can follow ‎the instructions provided by the Raspberry Pi Foundation documentation:‎

Arduino IDE

Note: For first-time users, who have never programmed before and are looking to use the Arduino IDE, we ‎recommend beginning with the SparkFun Inventor's Kit (SIK), which includes a simpler board like the Arduino ‎Uno or SparkFun RedBoard and is designed to help users get started programming with the Arduino IDE.‎

Most users will be familiar with the Arduino IDE, and it's use. As a point of reference for professional ‎developers who aren't aware, the Arduino IDE is an open-source development environment, written in Java, ‎that makes it easy to write code and upload it to a supported board. For more details, feel free to check out ‎the Arduino website.‎

To get started with the Arduino IDE, check out the following tutorials:‎

  • Installing an Arduino Library: How do I install a custom Arduino library? It's easy! This tutorial will go over ‎how to install an Arduino library using the Arduino Library Manager. For libraries not linked with the Arduino ‎IDE, we will also go over manually installing an Arduino library.‎

  • What is an Arduino? What is this 'Arduino' thing anyway? This tutorial dives into what an Arduino is and ‎along with Arduino projects and widgets.‎

  • Installing Arduino IDE: A step-by-step guide to installing and testing the Arduino software on Windows, ‎Mac, and Linux.‎

  • Installing Board Definitions in the Arduino IDE: How do I install a custom Arduino board/core? It's easy! ‎This tutorial will go over how to install an Arduino board definition using the Arduino Board Manager. We will ‎also go over manually installing third-party cores, such as the board definitions required for many of the ‎SparkFun development boards.‎

Installing the RP2040 Board Definition

Install the latest Arduino Mbed OS RP2040 board definitions in the Arduino IDE. Users unfamiliar with the ‎board definition installation process can reference our tutorial below.‎

installing_33

Installing Board Definitions in the Arduino IDE

How do I install a custom Arduino board/core? It's easy! This tutorial will go over how to install an Arduino ‎board definition using the Arduino Board Manager. We will also go over manually installing third-party cores, ‎such as the board definitions required for many of the SparkFun development boards.‎

Installation Instructions:‎

‎1.‎ Search for RP2040 in the Boards Manager.

installation_34

Arduino Mbed OS RP2040 listed in the Boards Manager.‎

‎2.‎ To complete the installation process, selected the Arduino Mbed OS RP2040 core and click on ‎the INSTALL button that appears in the lower, right-hand corner. The board definition and upload tools ‎will be installed automatically; users will notice that this may take a while.

Note: Users may need to disable their anti-virus software when installing the Arduino Mbed OS ‎RP2040 board definition. We ran into issues, where the installation of the upload tools for the Arduino ‎core were blocked by the anti-virus software. Arduino is already aware of the issue; they are working to ‎get their files white-listed. For more information, users can reference this GitHub issue.‎

‎3.‎ Programming Tip:‎

The board may not show up on a COM port, if users who have already programmed their board through ‎a different method. A simple solution is to:‎

‎1.‎ Download the picoprobe.uf2 file from the Raspberry Pi foundation's Pico board documentation ‎page

CLICK TO DOWNLOAD THE PICOPROBE.UF2 FILE

‎2.‎ Copy the picoprobe.uf2 firmware file to the board (while it is in BOOTSEL mode)‎

‎3.‎ If the board isn't automatically listed on a COM port users should reset (or unplug and re-plug in ‎the board to the computer)‎

Note: If users have the Arduino IDE's Tools drop down menu open looking for a new COM port to be ‎added, the Arduino IDE doesn't automatically repopulate and update the listed COM ports. To update ‎the available COM ports list, users should close and then re-open the Tools drop down menu and ‎navigate to the available COM ports.

Note: Users trying to access the SD card slot will need to modify the pins_arduino.h file to reconfigure the SPI ‎bus pins. However, this will make the SPI bus inaccessible through the breakout pins (when utilizing the SPI ‎library).‎

  • On a Windows 10 computer, with the Arduino IDE installed through the App store, the location of ‎the pins_arduino.h file is:‎

C:\Users\<username>\Documents\ArduinoData\packages\arduino\hardware\mbed_rp2040\<package_version>\variants\RASPBERRY_PI_PICO

pins_35

pins_arduino.h file in the RASPBERRY_PI_PICO folder.

  • Users will need to modify lines 45 - 47 of the pins_arduino.h file to the following:‎

Copy Code
// SPI
#define PIN_SPI_MISO  (12u) //(4u)
#define PIN_SPI_MOSI  (15u) //(3u)
#define PIN_SPI_SCK   (14u) //(2u)
    

line_36

Line modifications to the pins_arduino.h file.

Note: GitHub user earlephilhower has ported an unofficial Arduino core for the RP2040, which is based on the ‎Pico SDK. This is useful for customers who want the functionality of the Pico SDK in the Arduino ‎IDE. Installation instructions are available in the GitHub repository.‎

Pico SDK

In order to program the RP2040 with C/C++, users will use the Pico SDK (software development kit) provided ‎by the Raspberry Pi Foundation. Additionally, the Raspberry Pi Foundation has written a user manual, which ‎includes software documentation and examples to accompany the Pico SDK. The foundation has also provided ‎online documentation that can be used as a reference manual.‎

CLICK TO DOWNLOAD THE PICO (C/C++) SDK FROM GITHUB (ZIP)‎

CLICK TO OPEN THE GETTING STARTED WITH RASPBERRY PI PICO GUIDE (PDF)‎

CLICK TO OPEN THE RASPBERRY PI PICO C/C++ SDK USER MANUAL (PDF)‎

Getting Started: For novice programmers, we recommend starting off with the Getting Started with ‎Raspberry Pi Pico guide, from the Raspberry Pi Foundation. While the guide is intended for their RP2040 ‎microcontroller board, it contains useful information for getting started with the Pico SDK, building, and ‎uploading a program, debugging, and adapting the SDK to a third-party IDE.‎

Installation: The Raspberry Pi Foundation also provides an installation script to download and setup the Pico ‎SDK on a Raspberry Pi (SBC) single board computer, which can be downloaded from their GitHub repository.‎

CLICK TO DOWNLOAD THE RASPBERRY PI INSTALLATION SCRIPT FROM GITHUB ‎‎(ZIP)‎

Basic Operation: Users programming with the Pico SDK will be creating a project, compiling, and building ‎their code to a .uf2 file, which the SDK generates. The .uf2 firmware file is then copied to the board when it is ‎in BOOTSEL mode to upload the program.‎

As documented in the user manual, the Pico C/C++ SDK can be used with various integrated development ‎environments (IDEs). In order to utilize the SDK, users will also need to install a few dependencies. The ‎Raspberry Pi Foundation also provides examples for the basic functionality of the RP2040 in their pico-‎examples GitHub repository.‎

CLICK TO DOWNLOAD THE C/C++ EXAMPLE CODE FILES FROM GITHUB (ZIP)‎

Pico SDK on Windows 10‎

Note: The information for below has been compiled based on the information from the following resources:‎

On Windows 10 computers, the simplest way to get started with the Pico SDK is to use the installation script ‎from the pico-setup-windows GitHub repository.‎

Users will need to download and use the installation executable files from the releases section:‎

  • For 32-bit systems, users will want to use the executable ending in x86.exe

  • For 64-bit systems, users will want to use the executable ending in x64.exe

Installation Instructions:‎

‎1.‎ Use the setup script from the pico-setup-windows GitHub repo

  • Download release executable for your system architecture:‎

CLICK TO GO TO THE LATEST RELEASE

‎2.‎ Run the downloaded executable

‎3.‎ Utilize the default configurations

  • Feel free to customize the installation for your computer system

  • Note the file path to the installed Pico folder

path_37

Installation file path.‎

‎4.‎ Un-select the Clone and build Pico repo completion option before clicking Finish button

  • By selecting this option, the executable will automatically build the Pico SDK for the Raspberry Pi ‎Pico board and not the RP2040 Thing Plus.‎

  • Additionally, users who haven't configured their computer system's PATH variable for the ‎installed dependencies will run into various errors.‎

setup_38

Installation completion options.‎

‎5.‎ Configure the computer system's PATH variables for the installed dependencies:‎

User Variables:‎

table_40

System Variables:‎

table_41

For more information on configuring the PATH variable, check out the tutorial below:‎

path_42

Configuring the PATH System Variable

A simple guide for configuring the PATH variable on Win 10, Mac OSX, and Linux systems.‎

Build Instructions:‎

Executing the pico-setup.cmd script will download all the relevant RP2040 GitHub repositories, update all the ‎submodules, and build the examples for the Pico SDK. (Users will need to modify the pico-setup.cmd script to ‎build the examples for the RP2040 Thing Plus and not the Raspberry Pi Pico board.)‎

1.‎ Navigate to the installation location of the Pico folder

2. Modify the pico-setup.cmd script on line 62, replace cmake -G "NMake Makefiles" .. with:‎

  • cmake -G "NMake Makefiles" .. -DPICO_BOARD=sparkfun_thingplus

  • cmake -G "NMake Makefiles".. -DCMAKE_BUILD_TYPE=Debug -DPICO_BOARD=sparkfun_thingplus (for ‎debugging)‎

mods_43

Modification for the Pico SDK build configuration.

‎3.‎ Execute pico-setup.cmd

  • If users run into errors, they may need to call pico-env.cmd from the terminal/command prompt ‎and then call pico-setup.cmd

‎4.‎ Users will find the builds for the example code in the pico-examples\build folder. In each of the built ‎example folders, users will find the .uf2 file associated with the individual example.‎

‎5.‎ Once the board is in BOOTSEL mode, user can copy the .uf2 file over to program their board.‎

MicroPython

The Raspberry Pi Foundation has provided support for the RP2040 microcontroller with MicroPython. ‎Additionally, the Raspberry Pi Foundation has written a user manual, which includes documentation and some ‎basic MicroPython examples.‎

CLICK TO DOWNLOAD MICROPYTHON FROM GITHUB

CLICK TO OPEN THE RASPBERRY PI PICO PYTHON SDK USER MANUAL

Getting Started: For novice programmers, we recommend starting off with the Get Started with MicroPython ‎on Raspberry Pi Pico book, written by the Raspberry Pi Foundation. While the book is intended for their ‎Raspberry Pi Pico board, it contains useful information for getting started with MircoPython, utilizing the REPL ‎‎(Read–Eval–Print Loop), and several projects.‎

Note: Users will only need to download MicroPython, if they want to rebuild the .uf2 file or include a Python ‎package in their custom build. For more information on MicroPython check out their online documentation and ‎the README.md for the RP2040 port.‎

Basic Operation: Before users can begin programming with MicroPython, they will need to copy ‎the .uf2 firmware file to the board (while it is in BOOTSEL mode). The latest MicroPython firmware can be ‎downloaded from the RP2040 documentation on the Raspberry Pi Foundation website.

GO TO THE RP2040 DOCUMENTATION HOSTED BY THE RASPBERRY PI ‎FOUNDATION

Note: Since this tutorial was written, MicroPython has built and released new firmware specifically for the ‎RP2040 Thing Plus. The latest *.uf2 firmware file can be download from the MicroPython website.‎

Once copied, the RP2040 should automatically reset. Then users can utilize the REPL (Read–Eval–Print Loop) ‎to interface with the microcontroller directly or use rshell to upload and save their code to the flash memory of ‎the RP2040.‎

As documented in the user manual, the MicroPython can be used with various integrated development ‎environments (IDEs). In order to utilize the SDK, users will also need to install a few dependencies. The ‎Raspberry Pi Foundation also provides MicroPython examples to accompany the book (noted above), which can ‎be downloaded from their GitHub repository.‎

CLICK TO DOWNLOAD THE MICROPYTHON EXAMPLE CODE FILES FROM GITHUB ‎‎(ZIP)‎

Read–Eval–Print Loop (REPL)‎

Note: The RP2040 Thing Plus must be running MicroPython to access and utilize the REPL.‎

Users can access the REPL with their favorite serial terminal to instantly program the RP2040 microcontroller. ‎After the MicroPython firmware is copied to the board, it will reset and show up on the computer's serial (or ‎COM) port. Make sure to configure the serial terminal emulator for a baud rate of 115200 bps.‎

programming_46

Programming the RP2040 through the REPL.‎

Remote MicroPython Shell on Windows 10‎

Note: The RP2040 Thing Plus must be running MicroPython to utilize rshell and upload your program.‎

  • Users need to copy the .uf2 MicroPython firmware file to the board (while it is in BOOTSEL mode).‎

  • The latest MicroPython firmware can be downloaded from the RP2040 documentation on the Raspberry ‎Pi Foundation website.‎

  • If users upload another .uf2 file on to the board, the RP2040 will execute the new code. However, any ‎saved Python files may still remain in flash (instead of getting overwritten by the new code). Therefore, ‎when users upload the .uf2 MicroPython firmware file back onto the board, the previously saved python ‎files may:‎

    • Execute on reboot

    • Run on a soft reboot in the REPL

Installation Instructions:‎

‎1.‎ Install prerequisites

‎2.‎ Install Remote MicroPython Shell (rshell)‎

  • In PowerShell (run as admin), type pip3 install rshell

Programming Instructions:

Below is an example of how to upload a program to the board using rshell on Windows 10.‎

‎1.‎ Change the working directory to the location of the program file

‎2.‎ Open rshell

  • In PowerShell or the Command Prompt (run as admin), type rshell

‎3.‎ In the remote shell, connect to the COM port for the RP2040 Thing Plus

  • Type connect serial COM[#] [baudrate]‎

    • To connect to COM3: connect serial COM3 115200‎

    • *Use the device manager to find the COM port for the RP2040 Thing Plus‎

‎4.‎ In the remote shell, copy your program file to the RP2040 Thing Plus

  • Type cp [file name] /[board name]

    • By default, MicroPython executes two files on restart or power up:‎

      • boot.py – this script is executed when the pyboard boots up. It sets up various ‎configuration options for the pyboard

      • main.py – this is the main script that will contain your Python program. It is ‎executed after boot.py

    • By default, rshell will name a board pyboard when connecting to the COM port (unless ‎otherwise specified)‎

      • *The command boards, in rshell, will list the boards that it is connected to, their ‎names, and the connection

‎5.‎ Once the user presses the RESET button, the board will disconnect from rshell and the RP2040 ‎microcontroller will execute the boot.py and main.py files stored in its flash.‎

instructions_47

Uploading a program to the RP2040 using rshell.‎

Hardware Assembly

USB Programming

The USB connection is utilized for programming and serial communication. Users only need to plug their ‎RP2040 Thing Plus into a computer using a USB-C cable.‎

cable_48

cable_49

The SparkFun Thing Plus - RP2040 attached to a computer.

BOOTSEL Mode

Users can enter BOOTSEL mode by holding down the BOOT button when the USB connection is made to a ‎computer. The board will remain in this mode until it power cycles (happens automatically after uploading ‎a .uf2 firmware file) or the RESET button is pressed. The board will appear as a USB mass storage device under ‎the name RPI-RP2.‎

mode_2

Hold down BOOT button to enter BOOTSEL mode on The SparkFun Thing Plus - RP2040.‎

Battery

For remote applications, the RP2040 Thing Plus can be powered through its 2-pin JST battery connector. ‎Additionally, users may be interested in utilizing a solar panel and USB-C cable to recharge their battery.‎

battery_50

The SparkFun Thing Plus - RP2040 with a battery attached.‎

Note: DO NOT remove batteries by pulling on their wires. Instead, it is recommended that pair of dikes (i.e. ‎diagonal wire cutters), pliers, or tweezers be used to pull on the JST connector housing, to avoid damaging the ‎battery wiring.‎

wires_51

Using a pair of dikes to disconnect a battery.

Headers

The pins for the RP2040 Thing Plus are broken out to 0.1"-spaced pins on the outer edges of the board. When ‎selecting headers, be sure you are aware of the functionality you need. If you have never soldered before or ‎need a quick refresher, check out our How to Solder: Through-Hole Soldering guide.‎

soldering_52

Soldering headers to the RP2040 Thing Plus.‎

The Feather Stackable Header Kit is a great option as it allows users to stack shields (w/ Feather footprint) or ‎it can be placed on the a breadboard; while, the pins are still accessible from the female/male headers.‎

Qwiic Devices

The Qwiic system allows users to effortlessly prototype with a Qwiic compatible I2C device without soldering. ‎Users can attach any Qwiic compatible sensor or board, with just a Qwiic cable. (*The example below, is for ‎demonstration purposes and is not pertinent to the board functionality or this tutorial.)‎

tutorial_53

The Qwiic GPS receiver and distance sensor connected to the SparkFun Thing Plus - RP2040.‎

MicroPython Examples

Note: The information contained in this section will be expanded upon as more resources become available.‎

Below, are some MicroPython examples that can be copied and pasted into the REPL.‎

LED Control

This example turns on the GPIO 25 status LED. Try changing the led.value() value to 0.‎

Copy Code
from machine import Pin
led = Pin(25, Pin.OUT)
led.value(1)

# Include blank carriage returns

WS2812 Control

This example controls the WS2812 RGB LED on the board. Try changing the r, g, and b values (range is 0 - 255).‎

Copy Code
# Example using PIO to drive a WS2812 LED
// Copy and paste directly into REPL from TeraTerm
// Make sure baudrate is set to 115200 bps

import array, time
from machine import Pin
import rp2

# Configure the number of WS2812 LEDs.
NUM_LEDS = 1


@rp2.asm_pio(sideset_init=rp2.PIO.OUT_LOW, out_shiftdir=rp2.PIO.SHIFT_LEFT, autopull=True, pull_thresh=24)
def ws2812():
T1 = 2
T2 = 5
T3 = 3
wrap_target()
label("bitloop")
out(x, 1)               .side(0)    [T3 - 1]
jmp(not_x, "do_zero")   .side(1)    [T1 - 1]
jmp("bitloop")          .side(1)    [T2 - 1]
label("do_zero")
nop()                   .side(0)    [T2 - 1]
wrap()






# Create the StateMachine with the ws2812 program, outputting on Pin(08).
sm = rp2.StateMachine(0, ws2812, freq=8_000_000, sideset_base=Pin(08))

# Start the StateMachine, it will wait for data on its FIFO.
sm.active(1)

# Display a pattern on the LEDs via an array of LED RGB values.
ar = array.array("I", [0 for _ in range(NUM_LEDS)])

# Cycle colours.
for i in range(4 * NUM_LEDS):
for j in range(NUM_LEDS):
r = 255
b = 255
g = 255
ar[j] = g << 16 | r << 8 | b
sm.put(ar, 8)




# Include blank carriage returns

OLED Displays

This example displays a bitmap and text on two OLED screens. For this example, users will need the Micro ‎OLED Breakout (Qwiic), the Qwiic OLED Display, and a Qwiic cable kit. Users will need to upload a modified ‎version of the MicroPython firmware, which includes the SSD1306 display driver.‎

example_54

An example of the Thing Plus - RP2040 running with two OLED displays.‎

Copy Code
# Display Image & text on I2C driven ssd1306 OLED display 
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
import framebuf

WIDTH_1  = 64                                             # oled display width
HEIGHT_1 = 48                                             # oled display height
WIDTH_2  = 128                                            # oled display width
HEIGHT_2 = 32                                             # oled display height

i2c = I2C(1)                                            # Init I2C using I2C0 defaults, SCL=Pin(GP9), SDA=Pin(GP8), freq=400000
print("I2C Address      : "+hex(i2c.scan()[0]).upper()) # Display device address
print("I2C Configuration: "+str(i2c))                   # Display I2C config


oled1 = SSD1306_I2C(WIDTH_1, HEIGHT_1,  i2c, addr=0x3D)      # Init oled_1 display

# SparkFun logo as 32x48 bytearray
buffer[:] = [\
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF8, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, \
0xFF, 0xFF, 0xFF, 0x0F, 0x07, 0x07, 0x06, 0x06, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x07, 0x0F, 0x3F, 0x3F, 0xFF, 0xFF, 0xFF, \
0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFC, 0xFC, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFC, 0xF8, 0xE0, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, \
0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xF0, 0xFD, 0xFF, \
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, \
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, \
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x07, 0x01, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, \
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x1F, 0x0F, 0x0F, 0x0F, 0x0F, \
0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, \
0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]


# Load the SparkFUn logo into the framebuffer (the image is 32x48)
fb = framebuf.FrameBuffer(buffer, 64, 48, framebuf.MONO_VLSB)

# Clear the oled display in case it has junk on it.
oled1.fill(0)

# Blit the image from the framebuffer to the oled display
oled1.blit(fb, 0, 0)

# Finally update the oled display so the image & text is displayed
oled1.show()

oled2 = SSD1306_I2C(WIDTH_2, HEIGHT_2,  i2c, addr=0x3C)      # Init oled_2 display

# Clear the oled display in case it has junk on it.
oled2.fill(0)

# Add some text
oled2.text("SparkFun Thing",5,5)
oled2.text("Plus - RP2040",5,15)
oled2.text("(DEV-17745)",5,25)

oled2.show()

# Include blank carriage returns

Resources and Going Further

For more on the RP2040 Development Kit, check out the links below:‎

制造商零件编号 DEV-17745
SPARKFUN THING PLUS - RP2040
SparkFun Electronics
制造商零件编号 CAB-14743
CABLE A PLUG TO C PLUG 3.28'
SparkFun Electronics
制造商零件编号 TOL-09325
SOLDER LEAD FREE - 100-GRAM SPOO
SparkFun Electronics
HOBBY KNIFE
制造商零件编号 TOL-09200
HOBBY KNIFE
SparkFun Electronics
制造商零件编号 PRT-00116
BREAK AWAY HEAD
SparkFun Electronics
制造商零件编号 PRT-14321
PHOTON HEADER - 12 PIN FEMALE
SparkFun Electronics
制造商零件编号 TOL-14681
SPARKFUN BEGINNER TOOL KIT
SparkFun Electronics
制造商零件编号 PRT-16763
EXTENDED GPIO FEMALE HEADER - 2X
SparkFun Electronics
制造商零件编号 PRT-16279
ARDUINO NANO STACKABLE HEADERS
SparkFun Electronics
制造商零件编号 PRT-16764
EXTENDED GPIO FEMALE HEADER - 2X
SparkFun Electronics
制造商零件编号 PRT-00115
FEMALE HEADERS
SparkFun Electronics
制造商零件编号 KIT-24063
PINECIL SOLDERING IRON KIT
SparkFun Electronics
制造商零件编号 TOL-14672
INSULATED SILICONE SOLDERING MAT
SparkFun Electronics
制造商零件编号 GPS-14414
GPS BREAKOUT - XA1110 (QWIIC)
SparkFun Electronics
制造商零件编号 DEV-14352
QWIIC SHIELD FOR ARDUINO
SparkFun Electronics
制造商零件编号 DEV-13975
REDBOARD ATMEGA328 EVAL BRD
SparkFun Electronics
制造商零件编号 SEN-14351
QWIIC SPECTRAL SENSOR BRD AS7263
SparkFun Electronics
制造商零件编号 SEN-14347
QWIIC SPECTRAL SENSOR BRD AS7262
SparkFun Electronics
制造商零件编号 GPS-14414
GPS BREAKOUT - XA1110 (QWIIC)
SparkFun Electronics
制造商零件编号 KIT-15631
ARDUINO UNO INVENTOR KIT V4.1
SparkFun Electronics
制造商零件编号 A000066
ARDUINO UNO R3 ATMEGA328P BOARD
Arduino
制造商零件编号 KIT-15081
QWIIC CABLE KIT
SparkFun Electronics
制造商零件编号 GPS-14414
GPS BREAKOUT - XA1110 (QWIIC)
SparkFun Electronics
制造商零件编号 SEN-14722
QWIIC 4M DISTANCE SENSOR VL53L1X
SparkFun Electronics
制造商零件编号 LCD-24606
SPARKFUN QWIIC OLED DISPLAY (0.9
SparkFun Electronics
Add all DigiKey Parts to Cart
Have questions or comments? Continue the conversation on TechForum, DigiKey's online community and technical resource.