Since its release in January of 2021, Raspberry Pi’s first silicon, the RP2040, has taken the microcontroller world by storm. Its low cost, impressive capabilities (including its unique Programmable I/O), and — let’s face it — ability to be purchased in quantity amid a seemingly never-ending chip shortage, have led to wide adoption across the industry. As is their wont, Adafruit have blessed the chip with their Feather form factor, and, just when you thought it couldn’t get any better, decided to make it pink!
One of the most exciting things about the RP2040 is the number of programming environments to which it is amenable. Raspberry Pi’s own Pico SDK enables development in C, C++ or assembly, while Earle Philhower’s Arduino-Pico core brings unofficial Arduino support to the board. But because this is an Adafruit board, we thought it would make the most sense to try it with CircuitPython, the MicroPython fork that Adafruit recommends as the best way for newcomers to the world of microcontrollers to get started.
If you would like to use CircuitPython with the Feather, the first thing you’ll need to do is flash it with the required firmware, which is a relatively simple process. This is thanks to the RP2040’s in-ROM USB UF2 bootloader, combined with Adafruit’s dedicated firmware download site: just save the .uf2 file to your PC, hold the BOOTSEL button while plugging in your board via USB, and drag the file to the “RPI-RP2” mass storage device that appears. The board will recognize the presence of this new firmware, flash and reset itself, and you will be presented with a newly-named drive “CIRCUITPY” into which you can start dropping CircuitPython code.
Adafruit recommends the Mu editor for beginners, which may not include all of the bells and whistles of an advanced IDE like Visual Studio Code, but should feel intuitive to users of the Arduino 1.x IDE, and provide everything you need while starting out. Adafruit’s exemplary documentation covers everything from installing headers to writing programs for the RP2040’s unique PIO, and of course provides a simple LED blinking example, but in order to be broadly compatible across their range of CircuitPython boards, it uses the “pin 13” (Arduino default) LED, which is a tiny SMD affair next to the USB-C connector and not much to look at.
Also onboard is an RGB NeoPixel (WS2812B), which would make for far more impressive blinking, so our next task was to give that a try. Adafruit had us covered there too with an example in their Adafruit Learning System GitHub repository. The code required to drive the Neopixel is not built into CircuitPython, so an external library must be used. The process for doing this in CircuitPython somewhat clunky — first you have to download the library bundle for the version that you are running, then extract the files, and then either copy just the files that you need to /lib on your board’s mass storage device, or copy all of them there if you have space (about 1.2MB for version 7.x) and don’t want to keep repeating the process each time you need a different library. You can then import them in your code.py, and replace the original script’s led.value with pixels.fill() to create whatever color blinking you like!
As with other Feather devices, the RP2040 board features a number of “extras” compared to more minimal affairs like Raspberry Pi’s own Pico. For starters, there is 8MB of QSPI flash, compared to 2MB on the Pico, with about 7MB available when using CircuitPython. The aforementioned LEDs are joined by Feather’s typical LiPo charger with JST jack, and a STEMMA QT/Qwiic/Grove I2C connector for easy expansion with no soldering. I/O abounds with four 12-bit ADCs, two each of I2C, SPI and UART ports, 16 PWM outputs, and eight consecutive digital “non-ADC/non-peripheral” GPIO pins in order to maximize compatibility with the PR2040’s Programmable I/O.
If you’re looking to get started with the RP2040 and/or CircuitPython, the Adafruit Feather RP2040 is a great way to do so. With all of the hallmarks of Adafruit’s Feather range: onboard LiPo charging, a STEMMA QT connector, tons of GPIO, and compatibility with the extensive ecosystem of Adafruit and 3rd-party FeatherWings, this board will grow with you as you learn, and may be the only RP2040 you’ll ever need. Coupled with Adafruit’s fantastic documentation, and, lest we forget, a pink PCB, it’s hard not to recommend that everyone pick one up, especially given those two words we see all too rarely these days on dev board product pages: “In Stock!”
- Explore the RP2040 in a familiar ecosystem with existing FeatherWings and great documentation
- Learn CircuitPython, MicroPython, C, C++, and more with a single board
- Tons of GPIO!
- It’s pink!!!