# NeoPIO: Drive lots of LEDs with Raspberry Pi Pico

## Overview

![Animation of 8 NeoPixel strips](https://cdn-learn.adafruit.com/assets/assets/000/099/671/medium800thumb/raspberry_pi_ezgif.com-rotate.jpg?1614004158)

The new RP2040 microcontroller from Raspberry Pi Foundation has a powerful feature: the PIO module, a sort of accelerated I/O processor.

In this guide, you will learn how you can use CircuitPython and PIO together to drive 8 separate NeoPixel LED strands using just 3 GPIO pins and a [74HC595 Shift Register](https://learn.adafruit.com/74hc595).

One advantage of driving your NeoPixel LEDs this way is that less time is spent actually sending the pixel data to the LEDs—It is about 7.5x faster to `show()` your NeoPixels with the parallel method. Depending on your project, having parallel strips as opposed to chained strips can also make for better wiring.

Mostly, this guide is just a cool way to show off some of the capabilities of PIO itself. When it comes to wiring up NeoPixels, especially lots of them, [check out some in-depth information in the UberGuide](https://learn.adafruit.com/adafruit-neopixel-uberguide/the-magic-of-neopixels) including learning about [level-shifting](https://learn.adafruit.com/adafruit-neopixel-uberguide/logic-level) and [powering them](https://learn.adafruit.com/adafruit-neopixel-uberguide/powering-neopixels).

## Benchmark
The numbers below compare the speed of the two methods of refreshing NeoPixels, the traditional with a single 960-pixel chain, or 8 independent 120-pixel strands thanks to using PIO. It excludes the time to actually update animations on the strips, so it is a "best case" scenario.

```python
960 pixels, 100 refreshes
Neopixel show(): 2.93s,  34.1 FPS,  32757 pixels/second
NeoPIO   show(): 0.43s, 232.7 FPS, 223418 pixels/second
```

Check out the following pages to learn more about PIO and how to use it in CircuitPython.

## Parts
### Raspberry Pi Pico RP2040

[Raspberry Pi Pico RP2040](https://www.adafruit.com/product/4864)
The Raspberry Pi foundation changed single-board computing [when they released the Raspberry Pi computer](https://www.raspberrypi.org/archives/723), now they're ready to do the same for microcontrollers with the release of the brand new **Raspberry Pi Pico**. This...

Out of Stock
[Buy Now](https://www.adafruit.com/product/4864)
[Related Guides to the Product](https://learn.adafruit.com/products/4864/guides)
![Angle shot of Raspberry Pi Pico RP2040](https://cdn-shop.adafruit.com/640x480/4864-00.jpg)

### Raspberry Pi Pico RP2040 with Loose Unsoldered Headers

[Raspberry Pi Pico RP2040 with Loose Unsoldered Headers](https://www.adafruit.com/product/4883)
The Raspberry Pi foundation changed single-board computing&nbsp;[when they released the Raspberry Pi computer](https://www.raspberrypi.org/archives/723), now they're ready to do the same for microcontrollers with the release of the brand new&nbsp; **Raspberry Pi...**

Out of Stock
[Buy Now](https://www.adafruit.com/product/4883)
[Related Guides to the Product](https://learn.adafruit.com/products/4883/guides)
![Top view of Raspberry Pi Pico with two 20-pin male headers.](https://cdn-shop.adafruit.com/640x480/4883-06.jpg)

### Adafruit NeoPixel LED Strip with 3-pin JST PH 2mm Connector

[Adafruit NeoPixel LED Strip with 3-pin JST PH 2mm Connector](https://www.adafruit.com/product/3919)
Plug in and glow, this **Adafruit NeoPixel LED Strip with JST PH Connector** has **30 total LEDs** in a **"60 LED per meter" spacing** , and is 0.5 meters long, in classy Adafruit Black. Its not too long, but has lots of glowing action.<a...></a...>

Out of Stock
[Buy Now](https://www.adafruit.com/product/3919)
[Related Guides to the Product](https://learn.adafruit.com/products/3919/guides)
![Adafruit NeoPixel LED Strip with 3-pin JST PH Connector lit up rainbow](https://cdn-shop.adafruit.com/640x480/3919-01.jpg)

You can make this project with anywhere from 2 to 8 NeoPixel LED strands. Each strand should be the same length.

### 74HC595 Shift Register - 3 pack

[74HC595 Shift Register - 3 pack](https://www.adafruit.com/product/450)
Add lots more outputs to a microcontroller system with chainable shift registers. These chips take a serial input (SPI) of 1 byte (8 bits) and then output those digital bits onto 8 pins. You can chain them together so putting three in a row with the serial output of one plugged into the serial...

In Stock
[Buy Now](https://www.adafruit.com/product/450)
[Related Guides to the Product](https://learn.adafruit.com/products/450/guides)
![Angle Shot of the 74HC595 Shift Register - 3 pack.](https://cdn-shop.adafruit.com/640x480/450-02.jpg)

### 5V 2A (2000mA) switching power supply - UL Listed

[5V 2A (2000mA) switching power supply - UL Listed](https://www.adafruit.com/product/276)
This is an FCC/CE certified and UL listed power supply. Need a lot of 5V power? This switching supply gives a clean regulated 5V output at up to 2000mA. 110 or 240 input, so it works in any country. The plugs are "US 2-prong" style so you may need a plug adapter, but you can pick one...

In Stock
[Buy Now](https://www.adafruit.com/product/276)
[Related Guides to the Product](https://learn.adafruit.com/products/276/guides)
![Angled shot of power supply.](https://cdn-shop.adafruit.com/640x480/276-06.jpg)

### Premium Male/Male Jumper Wires - 40 x 3" (75mm)

[Premium Male/Male Jumper Wires - 40 x 3" (75mm)](https://www.adafruit.com/product/759)
Handy for making wire harnesses or jumpering between headers on PCB's. These premium jumper wires are 3" (75mm) long and come in a 'strip' of 40 (4 pieces of each of ten rainbow colors). They have 0.1" male header contacts on either end and fit cleanly next to each other...

Out of Stock
[Buy Now](https://www.adafruit.com/product/759)
[Related Guides to the Product](https://learn.adafruit.com/products/759/guides)
![Angled shot of Premium Male/Male Jumper Wires - 40 x 3 (75mm)](https://cdn-shop.adafruit.com/640x480/759-04.jpg)

### Female DC Power adapter - 2.1mm jack to screw terminal block

[Female DC Power adapter - 2.1mm jack to screw terminal block](https://www.adafruit.com/product/368)
If you need to connect a DC power wall wart to a board that doesn't have a DC jack - this adapter will come in very handy! There is a 2.1mm DC jack on one end, and a screw terminal block on the other. The terminals are labeled with positive/negative assuming a positive-tip configuration...

In Stock
[Buy Now](https://www.adafruit.com/product/368)
[Related Guides to the Product](https://learn.adafruit.com/products/368/guides)
![Angle shot Female DC Power adapter - 2.1mm jack to screw terminal block](https://cdn-shop.adafruit.com/640x480/368-03.jpg)

# NeoPIO: Drive lots of LEDs with Raspberry Pi Pico

## Installing CircuitPython

[CircuitPython](https://github.com/adafruit/circuitpython) is a derivative of [MicroPython](https://micropython.org) designed to simplify experimentation and education on low-cost microcontrollers. It makes it easier than ever to get prototyping by requiring no upfront desktop software downloads. Simply copy and edit files on the **CIRCUITPY** drive to iterate.

## CircuitPython Quickstart

Follow this step-by-step to quickly get CircuitPython working on your board.

[Download the latest version of CircuitPython for the Raspberry Pi Pico from circuitpython.org](https://circuitpython.org/board/raspberry_pi_pico/)
 **Click the link above and download the latest UF2 file.**

Download and save it to your desktop (or wherever is handy).

![circuitpython_Cat_UF2_download.png](https://cdn-learn.adafruit.com/assets/assets/000/098/753/medium640/circuitpython_Cat_UF2_download.png?1611157944)

Start with your Pico unplugged from USB. Hold down the **BOOTSEL** button, and while continuing to hold it (don't let go!), plug the Pico into USB. **Continue to hold the BOOTSEL button until the RPI-RP2 drive appears!**

If the drive does not appear, unplug your Pico and go through the above process again.

A lot of people end up using charge-only USB cables and it is very frustrating! **So make sure you have a USB cable you know is good for data sync.**

![raspberry_pi_one_one_two.png](https://cdn-learn.adafruit.com/assets/assets/000/125/993/medium640/raspberry_pi_one_one_two.png?1699493528)

You will see a new disk drive appear called **RPI-RP2**.

&nbsp;

Drag the **adafruit\_circuitpython\_etc.uf2** file to **RPI-RP2.**

![circuitpython_Cat_RPI-RP2_drive.png](https://cdn-learn.adafruit.com/assets/assets/000/098/756/medium640/circuitpython_Cat_RPI-RP2_drive.png?1611158210)

![circuitpython_Cat_drag_UF2.png](https://cdn-learn.adafruit.com/assets/assets/000/098/758/medium640/circuitpython_Cat_drag_UF2.png?1611158274)

The **RPI-RP2** drive will disappear and a new disk drive called **CIRCUITPY** will appear.

That's it, you're done! :)

![circuitpython_Cat_CIRCUITPY.png](https://cdn-learn.adafruit.com/assets/assets/000/098/759/medium640/circuitpython_Cat_CIRCUITPY.png?1611158312)

## Flash Resetting UF2

If your Pico ever gets into a really _weird_ state and doesn't even show up as a disk drive when installing CircuitPython, try installing this 'nuke' UF2 which will do a 'deep clean' on your Flash Memory. You will lose all the files on the board, but at least you'll be able to revive it! After nuking, re-install CircuitPython

[flash_nuke.uf2](https://datasheets.raspberrypi.com/soft/flash_nuke.uf2)
# NeoPIO: Drive lots of LEDs with Raspberry Pi Pico

## Installing the Mu Editor

Mu is a simple code editor that works with the Adafruit CircuitPython boards. It's written in Python and works on Windows, MacOS, Linux and Raspberry Pi. The serial console is built right in so you get immediate feedback from your board's serial output!

Info: Mu is our recommended editor - please use it (unless you are an experienced coder with a favorite editor already!). While it has been announced end of life in 2026, it still works fine.

You are free to use whatever text editor you wish along with a terminal program to connect to the CircuitPython REPL. Thonny is one such editor.

## Download and Install Mu
Download Mu from&nbsp;[https://codewith.mu](https://codewith.mu/).

Click the&nbsp; **Download** link for downloads and installation instructions.

Click **Start Here&nbsp;** to find a wealth of other information, including extensive tutorials and and how-to's.

&nbsp;

![circuitpython_WtCP_codewithdotmu_main_page.png](https://cdn-learn.adafruit.com/assets/assets/000/105/677/medium640/circuitpython_WtCP_codewithdotmu_main_page.png?1634749167)

Warning: 

## Starting Up Mu
The first time you start Mu, you will be prompted to select your 'mode' - you can always change your mind later. For now please select **CircuitPython**!

The current mode is displayed in the lower right corner of the window, next to the "gear" icon. If the mode says "Microbit" or something else, click the **Mode** button in the upper left, and then choose "CircuitPython" in the dialog box that appears.

![circuitpython_WtCP_Mu_mode_dialogue.png](https://cdn-learn.adafruit.com/assets/assets/000/105/681/medium640/circuitpython_WtCP_Mu_mode_dialogue.png?1634750676)

Mu attempts to auto-detect your board on startup, so if you do not have a CircuitPython board plugged in with a **CIRCUITPY** drive available, Mu will inform you where it will store any code you save until you plug in a board.

To avoid this warning, plug in a board and ensure that the **CIRCUITPY** drive is mounted before starting Mu.

![circuitpython_WtCP_Mu_device_not_found.png](https://cdn-learn.adafruit.com/assets/assets/000/105/679/medium640/circuitpython_WtCP_Mu_device_not_found.png?1634749722)

## Using Mu

You can now explore Mu! The three main sections of the window are labeled below; the button bar, the text editor, and the serial console / REPL.

![](https://cdn-learn.adafruit.com/assets/assets/000/098/505/medium800/circuitpython_Mu_Window_Explained.png?1609970219)

Now you're ready to code! Let's keep going...

# NeoPIO: Drive lots of LEDs with Raspberry Pi Pico

## Wiring and Code

![Close-up of breadboard with Rasbperry Pi Pico, 74HC595 chip (obscured), and many jumper wires.  The wiring is described below.](https://cdn-learn.adafruit.com/assets/assets/000/099/672/medium800/raspberry_pi_PXL_20210219_194449313.jpg?1614004064)

## CircuitPython Wiring

First, wire up the 74HC595 to your Raspberry Pi Pico. Then, connect all the NeoPixel strips. Once you've double-checked the wiring, you can connect the 5V 2A power supply and then connect the Pico to your computer using a USB cable.

Info: 

- **Pico VSYS** to **TOP SIDE**  **power rail on breadboard**
- **Pico GND** to **TOP SIDE ground**  **rail on breadboard**
- **TOP SIDE Ground rail on breadboard** to **BOTTOM SIDE**  **ground rail on breadboard**
- **74HC595 Pin 16** to **TOP SIDE**  **power rail on breadboard**
- **74HC595 Pin 10** to **TOP SIDE**  **power rail on breadboard**
- **74HC595 Pin 13** to **either**  **ground rail on breadboard**
- **74HC595 Pin 8** to **either**  **ground rail on breadboard**
- **74HC595 Pin 14** to **Pico GP0**  
- **74HC595 Pin 11** to **Pico GP1**  
- **74HC595 Pin 12** to **Pico GP2**  
- **5V 2A "+"** to **BOTTOM SIDE power rail**  
- **5V 2A "-"** to **BOTTOM SIDE ground rail**
- **8 x NeoPixel GND** to **ground rail on breadboard**
- **8 x NeoPixel VCC** to **BOTTOM SIDE power rail on breadboard**
- **74HC595 Pins 1-7, 15** to **8 ×**  **NeoPixel DATA pins**

![Project Wiring (see description)](https://cdn-learn.adafruit.com/assets/assets/000/099/673/medium640/raspberry_pi_neopio_bb.png?1614004082)

![Typical JST PH Neopixel Connection, 3 jumper wires inserted in JST PH connector according to color code](https://cdn-learn.adafruit.com/assets/assets/000/099/678/medium640/raspberry_pi_PXL_20210219_204341504.jpg?1614004113)

Primary: 

Info: 

If you want to power the Pico from the 5V 2A power supply, you can connect the **TOP SIDE power rail** and the **BOTTOM SIDE power rail together**. This way, you don't need an additional USB cable except when you need to connect the Pico to the computer to make changes to the code.

## Copying & Running the code
Use the "Download Project Zip" link below and unzip the files onto the **CIRCUITPY** drive that appears when you plug the Pico into your computer via a known good power + data USB cable.

CircuitPython will automatically re-load and start displaying 8 independent rainbow chases on your 8 LED strands. If you run into trouble, double-check your connections and if necessary open the REPL/serial in Mu to see any Python errors that may have occurred.

![Directory listing of CIRCUITPY drive with code.py and neopio.py uploaded](https://cdn-learn.adafruit.com/assets/assets/000/099/679/medium640/raspberry_pi_files.png?1614004128)

From here, you can apply any of the animations from the Adafruit [LED Animations Library](https://learn.adafruit.com/circuitpython-led-animations)! Treat the LEDs as a single strand, or independent strands using PixelMap.

To discover more about how the code works behind the scenes, continue on with this guide.

https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/CircuitPython_Pico_PIO_Neopixel/code.py

# NeoPIO: Drive lots of LEDs with Raspberry Pi Pico

## Code Walkthrough: PIO

[Let's review how data is transmitted to a NeoPixel](https://learn.adafruit.com/adafruit-neopixel-uberguide/advanced-coding): A "1"-bit is sent as a LONGER period of HIGH voltage followed by a SHORTER period of LOW voltage. A "0"-bit is sent as a SHORTER period of HIGH voltage followed by a LONGER period of LOW voltage.

The code on this page uses ratios of 1:2 and 2:1. **This isn't the most compatible waveform possible** , but it works on _most_ strips that identify themselves as NeoPixel-compatible.

![](https://cdn-learn.adafruit.com/assets/assets/000/099/704/medium800/hacks_leds_timing.png?1614101421)

Since each pixel is made up of 24 bits of red, green, and blue data, this cycle repeats 24 times for each pixel, and 720 times for a strand of 30 pixels. All together, that takes just under 1 millisecond.

When running CircuitPython, the `neopixel_write` module has optimized code (often in assembler) to produce exactly the required waveform. On the Raspberry Pi Pico with RP2040 microcontroller, this is actually done with the PIO programmable I/O block.

However, the PIO is so powerful that it _laughs_ at the simplicity of running a single LED strip and boasts that (with the addition of the lowly 74HC595 shift register) it can run 8 LED strips from just 3 I/O pins.

First, let's look at the code that works on the PIO programmable I/O block:

```python
.program neopio
.side_set 2

.wrap_target
    set x, 7            side 2
    pull

bitloop0:
    set pins, 1         side 0
    jmp x--, bitloop0   side 1
    set x, 7            side 2
bitloop1:
    out pins, 1         side 0
    jmp x--, bitloop1   side 1
    set x, 7            side 2
bitloop2:
    set pins, 0         side 0
    jmp x--, bitloop2   side 1
.wrap
```

The code is divided into 3 loops (`bitloop0`, `bitloop1`, and `bitloop2`), plus a little housekeeping code. The full loop will run in about 1.25 microseconds, and transfers 1 bit for each of the 8 NeoPixel strips.

The register **x** is used as a loop variable. The loop instruction **jmp x--** checks if **x** is zero, then updates x by subtracting 1, and depending on the previous value of **x** jumps to the given label (if nonzero) or continues to the next line (if zero). By storing 7 in **x** to begin with, each loop executes 8 times (this may make more sense to you if you're a robot)

In the first loop, the first instruction is "set pins, 1" which turns the first 'set pin' to **HIGH**.

In the second loop, the first instruction is "out pins, 1" which turns the first 'out pin' to either **HIGH** or **LOW** depending on the next bit of data sent to it from the data buffer in Python. Note that the 'set pin' and 'out pin' are actually the same pin in this case.

In the third loop, the first instruction is "set pins, 0" which turns the 'set pin' to **LOW**.

See how the structure of the three loops reflect the structure of a NeoPixel bit transmission? The first part is always **HIGH** , the second part depends on the data to be transmitted, and the third part is always **LOW**.

Next: to understand how each bit gets received by the shift register with concentration on the middle bitloop:

```python
bitloop1:
    out pins, 1         side 0
    jmp x--, bitloop1   side 1
    set x, 7            side 2
```

This time, concentrate on the part of each line that says **side _N_**. This instruction updates the value of the _side-set pins_. There are two side-set pins, and the possible side values are:

- **0:** turn both pins **LOW**
- **1** : turn first pin **HIGH** and second pin **LOW**
- **2** : turn first pin **LOW** and second pin **HIGH**
- **3** : turn both pins **HIGH** (not used in this program)

_Side-set pin 1_ is connected to the shift register's clock pin, and _side-set pin 2_ is connected to the shift register's parallel load pin. Each of those functions is activated by a rising edge (from **LOW** to **HIGH** ). This means that in the loop the data pin is updated first with its new value (`out pins`) with clock low (`side 0`) and then the clock pin is activated (`side 1`).

When the loop finishes, the parallel load pin is activated (`side 2`) and the 8 values just sent out appear on the 8 output pins of the '595.

# NeoPIO: Drive lots of LEDs with Raspberry Pi Pico

## Code Walkthrough: Bit Manipulation

So far you've seen how to use PIO to send data to NeoPixels, but the data also has to be in the correct format: Each 8 bits sent has to describe a part of 8 different pixels, one in each strip.

This means re-formatting the bits that make up the pixels. There is a function do this quickly in the CircuitPython core, but below will explain it in this section with diagrams and Python code.

Normally, color data for NeoPixels is stored in memory as a series of 24-bit (sometimes 32-bit) values, with one pixel after another.

![Screenshot of spreadsheet showing the traditional memory structure of 8 neopixel values in memory](https://cdn-learn.adafruit.com/assets/assets/000/099/578/medium640/raspberry_pi_ksnip_20210217-125446.png?1614004332)

See how the bits for each color now have a vertical orientation? After rearrangement, it's like the data has been rotated 90 degrees (or "transposed", to use a more mathematical term.&nbsp;

![Screenshot of spreadsheet showing the memory structure of 8 neopixel values in memory, ready to be sent to shift register.](https://cdn-learn.adafruit.com/assets/assets/000/099/577/medium640/raspberry_pi_ksnip_20210217-125352.png?1614004357)

When the shift register receives each group of data, it sends the "bit 0" column to the first strand, the "bit 1" column to the second strand, and so forth.

The Python code shown below transforms the data of 8 strands into data for the shift register:

```python
n = len(strand_data[0])
buf = bytearray(n*8)
for output_idx in range(n*8):    # For each output byte, ...
    input_idx = output_idx >> 3
    input_bit = 0x80 >> (output_idx & 0x7)
    b = 0
    for strand_idx in range(8):  # Find 8 input bits
        if strand_data[strand_idx][input_idx] & input_bit:
            b |= 1<<strand_idx   # Place them in the right spot
    buf[output_idx] = b
```

However, since our goal is raw speed, we don't want to actually perform these steps using interpreted Python code. On RP2040-based boards like the Raspberry Pi Pico there is a function `bitops.bit_transpose` which contains highly optimized code to perform this transformation.

# NeoPIO: Drive lots of LEDs with Raspberry Pi Pico

## Code Walkthrough: Being a PixelBuf

This is all great, but you probably have existing code using the Animations library that you'd like to use with NeoPIO. How can we make the two work together? By implementing a subclass of PixelBuf! Select parts of the code are listed below.

Instead of taking a single I/O pin, the constructor takes three: `data`, `clock`, and `strobe`. It also requires that you specify the number of strands (`num_strands`), from 2 to 8. The first step is some necessary error checking:

```python
class NeoPIO(adafruit_pixelbuf.PixelBuf):
    def __init__(
        self, data, clock, strobe, n, *, num_strands=8, bpp=3, brightness=1.0, auto_write=True, pixel_order=None
    ):
        if not _pin_directly_follows(data, clock):
            raise ValueError("clock pin must directly follow data pin")
        if not _pin_directly_follows(clock, strobe):
            raise ValueError("strobe pin must directly follow clock pin")

        if n % num_strands:
            raise ValueError("Length must be a multiple of num_strands")
```

Next, the steps to construct the underlying PixelBuf object, just like NeoPixel:

```python
…
        if not pixel_order:
            pixel_order = GRB if bpp == 3 else GRBW
        else:
            if isinstance(pixel_order, tuple):
                order_list = [RGBW[order] for order in pixel_order]
                pixel_order = "".join(order_list)

        super().__init__(
            n, brightness=brightness, byteorder=pixel_order, auto_write=auto_write
        )
```

Last, we need to store the number of strands so we can use that number later, create some scratch memory for the transposed bits, and then (the interesting part!) create the PIO state machine:

```python
…
        self._transposed = bytearray(bpp*n*8//num_strands)
        self._num_strands = num_strands

        self._sm = rp2pio.StateMachine(
            _assembled,
            frequency=800_000 * 52,
            init=adafruit_pioasm.assemble("set pindirs 7"),
            first_out_pin=data,
            out_pin_count=1,
            first_set_pin=data,
            set_pin_count=3,
            first_sideset_pin=clock,
            sideset_pin_count=2,
            auto_pull=True,
            out_shift_right=False,
            pull_threshold=8,
        )
```

There are some other definitions to supply that are identical to NeoPixel, or are not very interesting, such as the method `deinit` and the property `num_strands`.

The last thing to provide is the `_transmit` method, to blast out those pixel values. There are two steps—transposing the bits, then writing them out—yet It's almost anticlimactic how simple this is:

```python
…
    def _transmit(self, buffer):
        bitops.bit_transpose(buffer, self._transposed, self._num_strands)
        self._sm.write(self._transposed)
```


## Featured Products

### Raspberry Pi Pico RP2040

[Raspberry Pi Pico RP2040](https://www.adafruit.com/product/4864)
The Raspberry Pi foundation changed single-board computing [when they released the Raspberry Pi computer](https://www.raspberrypi.org/archives/723), now they're ready to do the same for microcontrollers with the release of the brand new **Raspberry Pi Pico**. This...

Out of Stock
[Buy Now](https://www.adafruit.com/product/4864)
[Related Guides to the Product](https://learn.adafruit.com/products/4864/guides)
### Raspberry Pi Pico RP2040 with Loose Unsoldered Headers

[Raspberry Pi Pico RP2040 with Loose Unsoldered Headers](https://www.adafruit.com/product/4883)
The Raspberry Pi foundation changed single-board computing&nbsp;[when they released the Raspberry Pi computer](https://www.raspberrypi.org/archives/723), now they're ready to do the same for microcontrollers with the release of the brand new&nbsp; **Raspberry Pi...**

Out of Stock
[Buy Now](https://www.adafruit.com/product/4883)
[Related Guides to the Product](https://learn.adafruit.com/products/4883/guides)
### 74HC595 Shift Register - 3 pack

[74HC595 Shift Register - 3 pack](https://www.adafruit.com/product/450)
Add lots more outputs to a microcontroller system with chainable shift registers. These chips take a serial input (SPI) of 1 byte (8 bits) and then output those digital bits onto 8 pins. You can chain them together so putting three in a row with the serial output of one plugged into the serial...

In Stock
[Buy Now](https://www.adafruit.com/product/450)
[Related Guides to the Product](https://learn.adafruit.com/products/450/guides)
### Adafruit NeoPixel LED Strip with 3-pin JST PH 2mm Connector

[Adafruit NeoPixel LED Strip with 3-pin JST PH 2mm Connector](https://www.adafruit.com/product/3919)
Plug in and glow, this **Adafruit NeoPixel LED Strip with JST PH Connector** has **30 total LEDs** in a **"60 LED per meter" spacing** , and is 0.5 meters long, in classy Adafruit Black. Its not too long, but has lots of glowing action.<a...></a...>

Out of Stock
[Buy Now](https://www.adafruit.com/product/3919)
[Related Guides to the Product](https://learn.adafruit.com/products/3919/guides)
### 5V 2A (2000mA) switching power supply - UL Listed

[5V 2A (2000mA) switching power supply - UL Listed](https://www.adafruit.com/product/276)
This is an FCC/CE certified and UL listed power supply. Need a lot of 5V power? This switching supply gives a clean regulated 5V output at up to 2000mA. 110 or 240 input, so it works in any country. The plugs are "US 2-prong" style so you may need a plug adapter, but you can pick one...

In Stock
[Buy Now](https://www.adafruit.com/product/276)
[Related Guides to the Product](https://learn.adafruit.com/products/276/guides)
### Premium Male/Male Jumper Wires - 40 x 3" (75mm)

[Premium Male/Male Jumper Wires - 40 x 3" (75mm)](https://www.adafruit.com/product/759)
Handy for making wire harnesses or jumpering between headers on PCB's. These premium jumper wires are 3" (75mm) long and come in a 'strip' of 40 (4 pieces of each of ten rainbow colors). They have 0.1" male header contacts on either end and fit cleanly next to each other...

Out of Stock
[Buy Now](https://www.adafruit.com/product/759)
[Related Guides to the Product](https://learn.adafruit.com/products/759/guides)
### Female DC Power adapter - 2.1mm jack to screw terminal block

[Female DC Power adapter - 2.1mm jack to screw terminal block](https://www.adafruit.com/product/368)
If you need to connect a DC power wall wart to a board that doesn't have a DC jack - this adapter will come in very handy! There is a 2.1mm DC jack on one end, and a screw terminal block on the other. The terminals are labeled with positive/negative assuming a positive-tip configuration...

In Stock
[Buy Now](https://www.adafruit.com/product/368)
[Related Guides to the Product](https://learn.adafruit.com/products/368/guides)

## Related Guides

- [74HC595 Shift Register](https://learn.adafruit.com/74hc595.md)
- [Moonshine Voice Control on Raspberry Pi](https://learn.adafruit.com/moonshine-voice-control-on-raspberry-pi.md)
- [No-Code Rain Sensing Smart Desktop Umbrella Stand](https://learn.adafruit.com/no-code-rain-sensing-smart-desktop-umbrella-stand.md)
- [Wireless LED Juggling Balls with ESP-NOW](https://learn.adafruit.com/wireless-juggling-balls-esp-now.md)
- [Milk Jug Glow Skull](https://learn.adafruit.com/milk-jug-glow-skull.md)
- [FunHouse Parking Assistant](https://learn.adafruit.com/funhouse-parking-assistant.md)
- [Adafruit Circuit Playground TFT Gizmo](https://learn.adafruit.com/adafruit-tft-gizmo.md)
- [Adafruit QT Py and NeoPixel LEDs](https://learn.adafruit.com/qt-py-and-neopixel-leds.md)
- [Adafruit Hallowing M4](https://learn.adafruit.com/adafruit-hallowing-m4.md)
- [PyPortal NeoPixel Color Picker](https://learn.adafruit.com/pyportal-neopixel-color-picker.md)
- [Holiday Tree with Feather RP2040 Scorpio](https://learn.adafruit.com/holiday-tree-with-scorpio.md)
- [PyGamer NeoPixel Controller](https://learn.adafruit.com/pygamer-neopixel-controller.md)
- [WiFi Jellyfish Lantern with WLED](https://learn.adafruit.com/wifi-jellyfish-lantern-with-wled.md)
- [Adafruit PyBadge and PyBadge LC](https://learn.adafruit.com/adafruit-pybadge.md)
- [Wakanda Forever Game](https://learn.adafruit.com/wakanda-forever-game.md)
- [CircuitPython LED Animations](https://learn.adafruit.com/circuitpython-led-animations.md)
