# MP3 Playback on RP2040 with CircuitPython

## Pico PWM MP3

Compressed audio can be a nice alternative to uncompressed WAV files, especially when you have a small filesystem like that on many CircuitPython boards, as WAV files get sizeable quite quickly. You can listen to a much longer playlist with CircuitPython, using the built in MP3 playback capability!

## Necessary Hardware

You'll need the following additional hardware to complete the examples on this page.

### Adafruit Mono 2.5W Class D Audio Amplifier - PAM8302

[Adafruit Mono 2.5W Class D Audio Amplifier - PAM8302](https://www.adafruit.com/product/2130)
This super small mono amplifier is surprisingly powerful - able to deliver up to 2.5 Watts into 4-8 ohm impedance speakers. Inside the miniature chip is a class D controller, able to run from 2.0V-5.5VDC. Since the amp is a class D, its very efficient (over 90% efficient when driving an...

Out of Stock
[Buy Now](https://www.adafruit.com/product/2130)
[Related Guides to the Product](https://learn.adafruit.com/products/2130/guides)
![Angled shot of an Adafruit Mono 2.5W Class D Audio Amplifier assembled to a speaker and white breadboard. ](https://cdn-shop.adafruit.com/640x480/2130-00.jpg)

### Mono Enclosed Speaker with Plain Wires - 3W 4 Ohm

[Mono Enclosed Speaker with Plain Wires - 3W 4 Ohm](https://www.adafruit.com/product/4445)
Listen up! This single&nbsp; 2.8" x 1.2" speaker&nbsp;is&nbsp;the perfect addition to any audio project where you need 4 ohm impedance and 3W or less of power. We particularly like these speakers as they are small and enclosed for good audio volume and quality. This speaker _does..._

In Stock
[Buy Now](https://www.adafruit.com/product/4445)
[Related Guides to the Product](https://learn.adafruit.com/products/4445/guides)
![Enclosed Speaker with wires](https://cdn-shop.adafruit.com/640x480/4445-01.jpg)

## The Speaker
To connect a speaker up to the Raspberry Pi Pico, you'll use a PAM8302 amplifier. Wire it up as shown below.

- **PAM8302 A+** to **Pico GP0**
- **PAM8302 A-** to **Pico GND**
- **PAM8302 VIN** to **Pico 3.3v**
- **PAM8302 GND** to **Pico GND**
- **PAM8302 screw terminal +** to **speaker +**
- **PAM8302 screw terminal -** to **speaker -**

![circuitpython_MP3_Pico_PAM8302_bb.jpg](https://cdn-learn.adafruit.com/assets/assets/000/104/052/medium640/circuitpython_MP3_Pico_PAM8302_bb.jpg?1629929556)

## CircuitPython-Compatible MP3 Files

CircuitPython supports any MP3 file, as long as it is the right bit rate and sample rate for your board.

 **Mono** and **stereo** files less than **64kbit/s** work, with sample rates from **8kHz** to **24kHz**. The RP2040 has a PWM output with 10 bits, so there's not much point in using high bit rates.

On faster microcontrollers with more RAM, such as the RP2350, higher bit rates have been shown to work. You may wish to experiment with your audio and the microcontroller, noting that CD quality audio will generally not be playable but certainly files will with suitable downsampling.

Be aware, doing things like updating a display, or having intense flash activity like reading and writing files can result in distorted sounds or noise during playback.

You can find an example of converting an MP3 file using Audacity in [this guide](https://learn.adafruit.com/microcontroller-compatible-audio-file-conversion). The parameters suggested above may not be exactly what's in the guide, but the concept will be the same.

## Playing an MP3 File

Update your **code.py** to the following.

Click the **Download Project Bundle** button below to download the necessary libraries and the **code.py** file in a zip file. Extract the contents of the zip file, open the folder that matches your CircuitPython version, and copy the **entire**  **lib**  **folder** and the **code.py** file to your **CIRCUITPY** drive.

Your **CIRCUITPY** drive should now look something like this:

![CIRCUITPY](https://adafruit.github.io/Adafruit_Learning_System_Guides/MP3_Playback_RP2040_Pico_Single_File.png )

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

https://youtu.be/ofTMK8Uqzjk

As soon as you save, the MP3 will begin playing! It plays only once. [Connect to the serial console](https://learn.adafruit.com/welcome-to-circuitpython/kattni-connecting-to-the-serial-console), and reload to play it again.

First, you import the necessary modules. All of these modules are built into CircuitPython, so this example does not require you to copy any external libraries to your board. Then, you setup the `audio` object and provide it the speaker pin.

Next, you create the `decoder` object and tell it the name of the MP3 file you'd like to play, in this case, `"slow.mp3"`.

Then, you use the `audio` object to play the decoded MP3 file. `while` the audio is playing, `pass`, or do nothing. (You can add other code here such as blinking an LED or whatever you like.)

Finally, you print `Done playing!` to the serial console to let you know the MP3 playback has concluded.

That's all there is to playing a single MP3 file using CircuitPython!

## Playing Multiple MP3 Files

The previous example plays a single MP3 file. But what if you want to include a playlist? This example has you covered.

Update your **code.py** to the following.

Click the **Download Project Bundle** button below to download the necessary libraries and the **code.py** file in a zip file. Extract the contents of the zip file, open the folder that matches your CircuitPython version, and copy the **entire**  **lib**  **folder** and the **code.py** file to your **CIRCUITPY** drive.

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

As soon as you save, the MP3s will begin playing! They play only once. [Connect to the serial console](https://learn.adafruit.com/welcome-to-circuitpython/kattni-connecting-to-the-serial-console), and reload to play them again.

The code starts out the same, with the same imports and audio setup.

This time, however, you create a list of `mp3files`, with each file name as a string, including the .mp3. There are only two in this list, but you could add as many as you like to the list, copy the associated files to your **CIRCUITPY** drive, and the code will play them each consecutively.

Then, you open the first MP3 file in the list, and use it to construct the `decoder` object. This is necessary to be able to reuse the `decoder` object multiple times later.

Then, for each file in the mp3files list, you open the file in the decoder, use the audio object to play the decoded MP3 file. You print to the serial console `Playing:` and the name of the file currently playing. Then, `while` the audio is playing, `pass`, or do nothing.

Finally, you print `Done playing!` to the serial console to let you know the MP3 playback has concluded.

That's all there is to playing multiple MP3 files using CircuitPython!

## CircuitPython MP3 Capable Pins

MP3 playback is supported on specific pins. The good news is, there's a simple way to find out which pins support audio playback.

Save the following file as **code.py** on your **CIRCUITPY** drive. Then, [connect to the serial console](https://learn.adafruit.com/welcome-to-circuitpython/kattni-connecting-to-the-serial-console) to see a list of pins printed out. This file runs only once, so if you do not see anything in the output, press CTRL+D to reload and run the code again.

This microcontroller also support I2S, which allows use of a higher quality external DAC. The sample rates and bit rates are still limited to those shown above, but the audio quality can be substantially better. This script does not provide I2S-capable pins.

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

# MP3 Playback on RP2040 with CircuitPython

## MacroPad MP3

The Adafruit MacroPad runs a Raspberry Pi RP2040 microcontroller and has a built in speaker that makes it simple to play tones and audio clips. The [Adafruit CircuitPython MacroPad](https://github.com/adafruit/Adafruit_CircuitPython_MacroPad) library includes `play_file()` which supports MP3 playback, making it super simple to play MP3s on your MacroPad. This page explores using your MacroPad to play MP3 files with the Adafruit CircuitPython MacroPad library.

To get your MacroPad setup with the latest CircuitPython, check out [the CircuitPython page in the MacroPad guide](https://learn.adafruit.com/adafruit-macropad-rp2040/circuitpython). You can find details on using the MacroPad library [the MacroPad CircuitPython Library page in the MacroPad guide](https://learn.adafruit.com/adafruit-macropad-rp2040/macropad-circuitpython-library).

**To install the Adafruit CircuitPython MacroPad library and its dependencies, follow the instructions below to download the Project Bundle**. If you choose to install the library and its dependencies manually, please check out [this guide](https://learn.adafruit.com/adafruit-macropad-rp2040/macropad-circuitpython-library#macropad-library-installation-3100144-4).

## Playing an MP3 File

Update your **code.py** to the following.

Click the **Download Project Bundle** button below to download the necessary libraries and the **code.py** file in a zip file. Extract the contents of the zip file, open the folder that matches your CircuitPython version, and copy the **entire**  **lib**  **folder** and the **code.py** file to your **CIRCUITPY** drive.

https://github.com/adafruit/Adafruit_CircuitPython_MacroPad/blob/main/examples/macropad_mp3/macropad_mp3.py

Your **CIRCUITPY** drive should resemble the following image.

![CIRCUITPY](https://adafruit.github.io/Adafruit_CircuitPython_Bundle/macropad_macropad_mp3_macropad_mp3.py.png)

https://youtu.be/lUXciiVph7E

Now, press any one of the first four keys to hear some beats! Once the associated file is finish playing, you can press another of the first four keys to listen to a different one. You can press any of the rest of the keys to see them light up, but no audio will be played.

The video above plays only the **slow.mp3** file as a demonstration of what MP3 playback sounds like on the MacroPad.

First, you import `rainbowio` and `adafruit_macropad`, and instantiate the MacroPad library.

Next, you create a list called `audio_files`, and include the names of the MP3 files you wish to play with the full name including .mp3 in quotes.

Inside the loop, the first thing you do is setup to look for the key press by creating the `key_event` variable and assigning it to `macropad.keys.events.get()`. Then, you check to see if there is a `key_event` (i.e. a key being pressed). If it is a key being pressed (`key_event.pressed`), you light up the key using the `key_number` to generate a `colorwheel()` value.

Then, if the `key_number` is less than the length of the list, you play the file in the list associated with the key number. This works because Python begins counting at 0. Therefore, the first key is number 0 and the fourth key is number 3. The length of the list is 4 (there are four items), so the key numbers associated with the files in the list will always be one less than the length of the list!

Finally, you turn off the NeoPixels when the keys are no longer being pressed and the files are no longer playing.

That's all there is to playing MP3s using the Adafruit CircuitPython MacroPad library and the Adafruit MacroPad!

## Adding Your Own MP3 Files

Including additional or different MP3 files is simple. To include additional files, add them to the following line:

```python
audio_files = ["slow.mp3", "happy.mp3", "beats.mp3", "upbeats.mp3"]
```

To include files other than the default ones, simply change the name of one of the current files to match the name of the file you wish to include. If you wanted the first key to instead play **bleeps.mp3** , you would update `audio_files =` to the following:

```python
audio_files = ["bleeps.mp3", "happy.mp3", "beats.mp3", "upbeats.mp3"]
```

If you wanted to include an additional MP3 file called **bloops.mp3** , you would update `audio_files =` to the following:

```auto
audio_files = ["slow.mp3", "happy.mp3", "beats.mp3", "upbeats.mp3", "bloops.mp3"]
```

You can add up to twelve files, one for each key!

# MP3 Playback on RP2040 with CircuitPython

## Pico I2S MP3

 **I2S** , or Inter-IC Sound, is a standard for transmitting digital audio data. It requires at least three connections. The first connection is a clock, called **bit clock** ( **BCLK** , or sometimes written as serial clock or SCK) **.** The second connection, which determines the channel (left or right) being sent, is called **word select** ( **WS** ). When stereo data is sent, WS is toggled so that the left and right channels are sent alternately, one data word at a time. The third connection, which transmits the data, is called **serial data** ( **SD** ).

Typically, there is a **transmitter** device which generates the bit clock, word select signal, and the data, and sends them to a **receiver** device. In this case, your microcontroller acts as the transmitter, and an I2S breakout acts as the receiver. The [MAX98357A](https://www.adafruit.com/product/3006) is an example of an I2S class D amplifier that allows you to connect directly to a speaker such as [this one](https://www.adafruit.com/product/4445).

## I2S and CircuitPython

CircuitPython supports sending I2S audio signals using the `audiobusio` module, making it simple to use the I2S interface with your microcontroller.

In this section, you'll learn how to use CircuitPython to play different types of audio using I2S, including tones, WAV files and MP3 files.

## Necessary Hardware

You'll need the following additional hardware to complete the examples on this page.

### Adafruit I2S 3W Class D Amplifier Breakout - MAX98357A

[Adafruit I2S 3W Class D Amplifier Breakout - MAX98357A](https://www.adafruit.com/product/3006)
Listen to this good news - we now have an all in one digital audio amp breakout board that works incredibly well with the&nbsp;[Raspberry Pi](https://www.adafruit.com/category/105)! If you're looking for an easy and low cost way to get your digital sound files...

In Stock
[Buy Now](https://www.adafruit.com/product/3006)
[Related Guides to the Product](https://learn.adafruit.com/products/3006/guides)
![Angled shot of blue, square-shaped, amplifier breakout with a pre-soldered terminal block.](https://cdn-shop.adafruit.com/640x480/3006-04.jpg)

### Mono Enclosed Speaker with Plain Wires - 3W 4 Ohm

[Mono Enclosed Speaker with Plain Wires - 3W 4 Ohm](https://www.adafruit.com/product/4445)
Listen up! This single&nbsp; 2.8" x 1.2" speaker&nbsp;is&nbsp;the perfect addition to any audio project where you need 4 ohm impedance and 3W or less of power. We particularly like these speakers as they are small and enclosed for good audio volume and quality. This speaker _does..._

In Stock
[Buy Now](https://www.adafruit.com/product/4445)
[Related Guides to the Product](https://learn.adafruit.com/products/4445/guides)
![Enclosed Speaker with wires](https://cdn-shop.adafruit.com/640x480/4445-01.jpg)

### Premium Male/Male Jumper Wires - 20 x 6" (150mm)

[Premium Male/Male Jumper Wires - 20 x 6" (150mm)](https://www.adafruit.com/product/1957)
These Male/Male Jumper Wires are handy for making wire harnesses or jumpering between headers on PCB's. These premium jumper wires are 6" (150mm) long and come in a 'strip' of 20 (2&nbsp;pieces of each of ten rainbow colors). They have 0.1" male header contacts on either...

In Stock
[Buy Now](https://www.adafruit.com/product/1957)
[Related Guides to the Product](https://learn.adafruit.com/products/1957/guides)
![Premium Male/Male Jumper Wires - 20 x 6 (150mm) folded over](https://cdn-shop.adafruit.com/640x480/1957-02.jpg)

## Wiring the MAX98357A

Connect the MAX98357A breakout to your microcontroller as follows.

The bit clock and word select pins must be on consecutive pins! They can be on any pins you like, but they must be in consecutive order, for example, A0 for bit clock and A1 for word select.

- **Pico 3V3** to **breakout VIN**
- **Pico GND** to **breakout GND**
- **Pico GP0** to **breakout BCLK**
- **Pico GP1** to **breakout LRC**
- **Pico GP2** to **breakout DIN**
- **Speaker +** to **screw terminal +**
- **Speaker -** to **screw terminal -**  

![circuitpython_Pico_I2S_MAX98375A_bb.jpg](https://cdn-learn.adafruit.com/assets/assets/000/114/222/medium640/circuitpython_Pico_I2S_MAX98375A_bb.jpg?1660670338)

## I2S Tone Playback

The first example generates one period of a sine wave and then loops it to generate a tone. You can change the volume and the frequency (in Hz) of the tone by changing the associated variables. Inside the loop, you play the tone for one second and stop it for one second.

Update your **code.py** to the following.

Click the **Download Project Bundle** button below to download the necessary libraries and the **code.py** file in a zip file. Extract the contents of the zip file, open the folder that matches your CircuitPython version, and copy the **code.py** file to your **CIRCUITPY** drive.

Your&nbsp; **CIRCUITPY&nbsp;** drive should now look similar to the following image:

![CIRCUITPY](https://adafruit.github.io/Adafruit_Learning_System_Guides/MP3_Playback_RP2040_Pico_I2S_Tone.png )

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

Now you'll hear one second of a 440Hz tone, and one second of silence.

You can try changing the `440` Hz of the tone to produce a tone of a different pitch. Try changing the number of seconds in `time.sleep()` to produce longer or shorter tones.

## I2S WAV File Playback

The second example plays a WAV file. You open the file in a readable format. Then, you play the file and, once finished, print `Done playing!` to the serial console. You can use any [supported wave file](https://learn.adafruit.com/circuitpython-essentials/circuitpython-audio-out#play-a-wave-file).

Update your **code.py** to the following.

Click the **Download Project Bundle** button below to download the necessary libraries and the **code.py** file in a zip file. Extract the contents of the zip file, open the folder that matches your CircuitPython version, and copy the **StreetChicken.wav** file and the **code.py** file to your **CIRCUITPY** drive.

Your **CIRCUITPY** drive should now look similar to the following image:

![CIRCUITPY](https://adafruit.github.io/Adafruit_Learning_System_Guides/MP3_Playback_RP2040_Pico_I2S_WAV.png )

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

Now you'll hear the wave file play, and on completion, print `Done Playing!` to the serial console.

You can play a different WAV file by updating `"StreetChicken.wav"` to be the name of your CircuitPython-compatible WAV file.

You can do other things while the WAV file plays! There is a `pass` in this example where you can include other code, such as code to blink an LED.

## I2S MP3 File Playback

The third example plays an MP3 file. First, you open the file in a readable format. Then you play the MP3 and, once finished, print `Done playing!` to the serial console.

CircuitPython supports any MP3 file, as long as it is the right bit rate and sample rate for your board.

 **Mono** and **stereo** files less than **64kbit/s** work, with sample rates from **8kHz** to **24kHz**.

You can find an example of converting an MP3 file using Audacity in [this guide](https://learn.adafruit.com/microcontroller-compatible-audio-file-conversion). The parameters suggested above may not be exactly what's in the guide, but the concept will be the same.

Update your **code.py** to the following.

Click the **Download Project Bundle** button below to download the necessary libraries and the **code.py** file in a zip file. Extract the contents of the zip file, open the folder that matches your CircuitPython version, and copy the **slow.mp3** file and the **code.py** file to your **CIRCUITPY** drive.

Your **CIRCUITPY** drive should now look similar to the following image:

![CIRCUITPY](https://adafruit.github.io/Adafruit_Learning_System_Guides/MP3_Playback_RP2040_Pico_I2S_MP3.png )

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

Now you'll hear the MP3 play, and on completion, print `Done Playing!` to the serial console.

You can play a different CircuitPython-compatible MP3 by updating `"slow.mp3"` to the name of your MP3 file.

## CircuitPython I2S-Compatible Pin Combinations

I2S audio is supported on specific pins. The good news is, there's a simple way to find out which pins support audio playback.

In the example below, click the **Download Project Bundle** button below to download the necessary libraries and the **code.py** file in a zip file. Extract the contents of the zip file, open the directory **CircuitPython\_Templates/i2s\_find\_pins/** and then click on the directory that matches the version of CircuitPython you're using and copy the contents of that directory to your **CIRCUITPY** drive.

Your **CIRCUITPY** drive should now look similar to the following image:

![CIRCUITPY](https://adafruit.github.io/Adafruit_Learning_System_Guides/CircuitPython_Templates_i2s_find_pins.png )

Then, [connect to the serial console](https://learn.adafruit.com/welcome-to-circuitpython/kattni-connecting-to-the-serial-console) to see a list of pins printed out. This file runs only once, so if you do not see anything in the output, press CTRL+D to reload and run the code again.

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

For details about the I2S API, check out the [CircuitPython docs](https://circuitpython-jake.readthedocs.io/en/latest/shared-bindings/audiobusio/I2SOut.html).


## Featured Products

### Adafruit MacroPad RP2040 Starter Kit - 3x4 Keys + Encoder + OLED

[Adafruit MacroPad RP2040 Starter Kit - 3x4 Keys + Encoder + OLED](https://www.adafruit.com/product/5128)
Strap yourself in, we're launching in T-minus 10 seconds...Destination? A new Class M planet called MACROPAD! M here stands for Microcontroller because this 3x4 keyboard controller features the newest technology from the Raspberry Pi sector: say hello to the RP2040. It's a speedy...

Out of Stock
[Buy Now](https://www.adafruit.com/product/5128)
[Related Guides to the Product](https://learn.adafruit.com/products/5128/guides)
### 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...

In Stock
[Buy Now](https://www.adafruit.com/product/4864)
[Related Guides to the Product](https://learn.adafruit.com/products/4864/guides)
### Adafruit Mono 2.5W Class D Audio Amplifier - PAM8302

[Adafruit Mono 2.5W Class D Audio Amplifier - PAM8302](https://www.adafruit.com/product/2130)
This super small mono amplifier is surprisingly powerful - able to deliver up to 2.5 Watts into 4-8 ohm impedance speakers. Inside the miniature chip is a class D controller, able to run from 2.0V-5.5VDC. Since the amp is a class D, its very efficient (over 90% efficient when driving an...

Out of Stock
[Buy Now](https://www.adafruit.com/product/2130)
[Related Guides to the Product](https://learn.adafruit.com/products/2130/guides)
### Mono Enclosed Speaker with Plain Wires - 3W 4 Ohm

[Mono Enclosed Speaker with Plain Wires - 3W 4 Ohm](https://www.adafruit.com/product/4445)
Listen up! This single&nbsp; 2.8" x 1.2" speaker&nbsp;is&nbsp;the perfect addition to any audio project where you need 4 ohm impedance and 3W or less of power. We particularly like these speakers as they are small and enclosed for good audio volume and quality. This speaker _does..._

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

[Premium Male/Male Jumper Wires - 40 x 6" (150mm)](https://www.adafruit.com/product/758)
Handy for making wire harnesses or jumpering between headers on PCB's. These premium jumper wires are 6" (150mm) 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/758)
[Related Guides to the Product](https://learn.adafruit.com/products/758/guides)
### Full Sized Premium Breadboard - 830 Tie Points

[Full Sized Premium Breadboard - 830 Tie Points](https://www.adafruit.com/product/239)
This is a 'full-size' premium quality breadboard, 830 tie points. Good for small and medium projects. It's 2.2" x 7" (5.5 cm x 17 cm) with a standard double-strip in the middle and two power rails on both sides. You can pull the power rails off easily to make the...

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

## Related Guides

- [Adafruit MacroPad RP2040](https://learn.adafruit.com/adafruit-macropad-rp2040.md)
- [Adafruit PAM8302 - Mono 2.5W Class D Audio Amplifier](https://learn.adafruit.com/adafruit-pam8302-mono-2-5w-class-d-audio-amplifier.md)
- [Wizzy: A Needle Felted Cat](https://learn.adafruit.com/wizzy-a-needle-felted-cat.md)
- [Raspberry Pi Pipboy 3000](https://learn.adafruit.com/raspberry-pi-pipboy-3000.md)
- [PiGlass](https://learn.adafruit.com/piglass-wearable-raspberry-pi-computer.md)
- [An Introduction to RP2040 PIO with CircuitPython](https://learn.adafruit.com/intro-to-rp2040-pio-with-circuitpython.md)
- [Keypad and Matrix Scanning in CircuitPython](https://learn.adafruit.com/key-pad-matrix-scanning-in-circuitpython.md)
- [3D Printed Stand for MacroPad RP2040](https://learn.adafruit.com/3d-printed-stand-for-macropad-rp2040.md)
- [Custom HID Devices in CircuitPython](https://learn.adafruit.com/custom-hid-devices-in-circuitpython.md)
- [Magic Wand](https://learn.adafruit.com/magic-wand.md)
- [MACROPAD Hotkeys](https://learn.adafruit.com/macropad-hotkeys.md)
- [Pocket PiGRRL](https://learn.adafruit.com/pocket-pigrrl.md)
- [Ray Gun Blaster](https://learn.adafruit.com/ray-gun-blaster.md)
- [MacroPad 2FA TOTP Authentication Friend](https://learn.adafruit.com/macropad-2fa-totp-authentication-friend.md)
- [Lucio Blaster 2020 - CircuitPython for Advanced Prop Making](https://learn.adafruit.com/lucio-blaster-2020-circuitpython-advanced-prop-making.md)
- [Cup o' Sound](https://learn.adafruit.com/cup-o-sound.md)
