# MIDI Breath Controller

## Overview

![](https://cdn-learn.adafruit.com/assets/assets/000/142/537/medium800thumb/sensors_midiBreathHeroGif.jpg?1771871491)

Deep breathing isn't only for mindfulness, it's for sending MIDI CC messages too. You can build a MIDI breath controller with a BMP585 air pressure sensor. This particular sensor has a port that you can attach a tube to for targeted pressure readings. In this scenario, the sensor is attached to a QT Py RP2040 running CircuitPython code that maps a pressure reading range to MIDI CC message values.

Use the rotary encoder to switch which MIDI CC message is sent from the controller. The NeoPixel LED light acts as an indicator.

![](https://cdn-learn.adafruit.com/assets/assets/000/142/538/medium640thumb/sensors_encoder.jpg?1771871623)

https://youtu.be/gOc8D0mvBQw

## Parts
### Adafruit QT Py RP2040

[Adafruit QT Py RP2040](https://www.adafruit.com/product/4900)
What a cutie pie! Or is it... a QT Py?&nbsp;This diminutive dev board comes with one of our new favorite chip, the RP2040. It's been made famous in the new [Raspberry Pi Pico](https://www.adafruit.com/pico) _and_ our [Feather...](http://www.adafruit.com/product/4884)

In Stock
[Buy Now](https://www.adafruit.com/product/4900)
[Related Guides to the Product](https://learn.adafruit.com/products/4900/guides)
![Video of hand holding a QT Py PCB in their hand. An LED glows rainbow colors.](https://cdn-shop.adafruit.com/product-videos/640x480/4900-06.jpg)

### Adafruit BMP585 Ported I2C / SPI Temperature and Pressure Sensor

[Adafruit BMP585 Ported I2C / SPI Temperature and Pressure Sensor](https://www.adafruit.com/product/6413)
Bosch has been a leader in barometric pressure sensors, from the&nbsp;[BMP085](https://www.adafruit.com/product/391).&nbsp;[BMP180](https://www.adafruit.com/product/1603),&nbsp;[BMP280](https://www.adafruit.com/product/2651),&nbsp;<a...></a...>

In Stock
[Buy Now](https://www.adafruit.com/product/6413)
[Related Guides to the Product](https://learn.adafruit.com/products/6413/guides)
![BMP585 temperature and pressure sensor breakout board.](https://cdn-shop.adafruit.com/640x480/6413-00.jpg)

### Adafruit I2C Stemma QT Rotary Encoder Breakout with Encoder

[Adafruit I2C Stemma QT Rotary Encoder Breakout with Encoder](https://www.adafruit.com/product/5880)
Rotary encoders are soooo much fun! Twist em this way, then twist them that way. Unlike potentiometers, they go all the way around and often have little detents for tactile feedback. But, if you've ever tried to add encoders to your project you know that they're a real challenge to...

Out of Stock
[Buy Now](https://www.adafruit.com/product/5880)
[Related Guides to the Product](https://learn.adafruit.com/products/5880/guides)
![Angled Shot of the I2C Stemma QT Rotary Encoder Breakout with Encoder.](https://cdn-shop.adafruit.com/640x480/5880-00.jpg)

### Potentiometer Knob - Soft Touch T18 - White

[Potentiometer Knob - Soft Touch T18 - White](https://www.adafruit.com/product/2047)
_Oh say can you see_  
_By the knob's early light..._

Sorry - we thought that was clever. &nbsp;And while it wasn't really, this potentiometer knob definitely is. &nbsp;It's a...

In Stock
[Buy Now](https://www.adafruit.com/product/2047)
[Related Guides to the Product](https://learn.adafruit.com/products/2047/guides)
![Group Shot of the Various Color Options to the Potentiometer Knob - Soft Touch T18 - White.](https://cdn-shop.adafruit.com/640x480/2047-07.jpg)

#### Two Stemma QT Cables
### STEMMA QT / Qwiic JST SH 4-pin Cable - 100mm Long

[STEMMA QT / Qwiic JST SH 4-pin Cable - 100mm Long](https://www.adafruit.com/product/4210)
This 4-wire cable is a little over 100mm / 4" long and fitted with JST-SH female 4-pin connectors on both ends. Compared with the chunkier JST-PH these are 1mm pitch instead of 2mm, but still have a nice latching feel, while being easy to insert and remove.

<a...></a...>

Out of Stock
[Buy Now](https://www.adafruit.com/product/4210)
[Related Guides to the Product](https://learn.adafruit.com/products/4210/guides)
![Angled shot of STEMMA QT / Qwiic JST SH 4-pin Cable.](https://cdn-shop.adafruit.com/640x480/4210-00.jpg)

### USB Type A to Type C Cable - approx 1 meter / 3 ft long

[USB Type A to Type C Cable - approx 1 meter / 3 ft long](https://www.adafruit.com/product/4474)
As technology changes and adapts, so does Adafruit. This&nbsp;&nbsp; **USB Type A to Type C** cable will help you with the transition to USB C, even if you're still totin' around a USB Type A hub, computer or laptop.

USB C is the latest industry-standard connector for...

In Stock
[Buy Now](https://www.adafruit.com/product/4474)
[Related Guides to the Product](https://learn.adafruit.com/products/4474/guides)
![Angled shot of a coiled black, USB-C to USB-A cable.](https://cdn-shop.adafruit.com/640x480/4474-02.jpg)

McMaster-Carr sells food grade tubing that works really well for this project:

### Part: Odor-Resistant Soft Rubber Tubing for Food and Beverage
quantity: 1
1/8" inner diameter, 1/4" outer diameter
[Odor-Resistant Soft Rubber Tubing for Food and Beverage](https://www.mcmaster.com/catalog/132/159/9372N7)

# MIDI Breath Controller

## Circuit Diagram

![](https://cdn-learn.adafruit.com/assets/assets/000/142/320/medium800/sensors_midiBreathControlFritzing_bb.png?1770751582)

All of the electronics connect together with STEMMA QT cables.

Plug the **BMP585 sensor** into the STEMMA QT port on the **QT Py RP2040**. Then, plug the **seesaw rotary encoder** into the other side of the **BMP585 sensor**.

# MIDI Breath Controller

## 3D Printing

![](https://cdn-learn.adafruit.com/assets/assets/000/142/516/medium800/sensors_edited_P1490398.jpg?1771854218)

You can 3D print all of the case parts for this project. The files can be downloaded directly below:&nbsp;

[MIDI-Breath-Controller-CAD.zip](https://cdn-learn.adafruit.com/assets/assets/000/142/540/original/MIDI-Breath-Controller-CAD.zip?1771876144)
The mouthpiece fits snuggly onto the end of the tube.

![](https://cdn-learn.adafruit.com/assets/assets/000/142/533/medium640/sensors_edited_P1490437.jpg?1771871157)

The QT Py tray is secured inside of the enclosure with screws. There is a cutout in the enclosure for the USB C port on the QT Py.

![](https://cdn-learn.adafruit.com/assets/assets/000/142/518/medium640/sensors_edited_P1490405.jpg?1771854521)

The small peg is inserted into the side of the case to diffuse the NeoPixel on the rotary encoder. For maximum effect, print it in clear filament.

![](https://cdn-learn.adafruit.com/assets/assets/000/142/517/medium640/sensors_edited_P1490402.jpg?1771854412)

# MIDI Breath Controller

## Install 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 running on your board.

[Download the latest version of CircuitPython for this board via circuitpython.org](https://circuitpython.org/board/adafruit_qtpy_rp2040/)
 **Click the link above to download the latest CircuitPython UF2 file.**

Save it wherever is convenient for you.

![install_circuitpython_on_rp2040_RP2040_UF2_downloaded.jpg](https://cdn-learn.adafruit.com/assets/assets/000/101/655/medium640/install_circuitpython_on_rp2040_RP2040_UF2_downloaded.jpg?1618943202)

![](https://cdn-learn.adafruit.com/assets/assets/000/101/680/medium800/adafruit_products_QTRP_buttons.jpg?1618956837)

To enter the bootloader, hold down the **BOOT/**** BOOTSEL button**(highlighted in red above), and while continuing to hold it (don't let go!), press and release the**reset button**(highlighted in red or blue above).&nbsp;**Continue to hold the BOOT/BOOTSEL button until the RPI-RP2 drive appears!**

If the drive does not appear, release all the buttons, and then repeat the process above.

You can also start with your board unplugged from USB, press and hold the BOOTSEL button (highlighted in red above), continue to hold it while plugging it into USB, and wait for the drive to appear before releasing the button.

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

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

&nbsp;

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

![install_circuitpython_on_rp2040_RP2040_bootloader_drive.jpg](https://cdn-learn.adafruit.com/assets/assets/000/101/656/medium640/install_circuitpython_on_rp2040_RP2040_bootloader_drive.jpg?1618943666)

![install_circuitpython_on_rp2040_RP2040_drag_UF2.jpg](https://cdn-learn.adafruit.com/assets/assets/000/101/657/medium640/install_circuitpython_on_rp2040_RP2040_drag_UF2.jpg?1618943674)

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

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

![install_circuitpython_on_rp2040_RP2040_CIRCUITPY.jpg](https://cdn-learn.adafruit.com/assets/assets/000/101/658/medium640/install_circuitpython_on_rp2040_RP2040_CIRCUITPY.jpg?1618943864)

## Safe Mode

You want to edit your **code.py** or modify the files on your **CIRCUITPY** drive, but find that you can't. Perhaps your board has gotten into a state where **CIRCUITPY** is read-only. You may have turned off the **CIRCUITPY** drive altogether. Whatever the reason, safe mode can help.

Safe mode in CircuitPython does not run any user code on startup, and disables auto-reload. This means a few things. First, safe mode _bypasses any code in_ **boot.py** (where you can set **CIRCUITPY** read-only or turn it off completely). Second, _it does not run the code in_ **code.py**. And finally, _it does not automatically soft-reload when data is written to the_ **CIRCUITPY** _drive_.

Therefore, whatever you may have done to put your board in a non-interactive state, safe mode gives you the opportunity to correct it without losing all of the data on the **CIRCUITPY** drive.

### Entering Safe Mode
To enter safe mode when using CircuitPython, plug in your board or hit reset (highlighted in red above). Immediately after the board starts up or resets, it waits 1000ms. On some boards, the onboard status LED (highlighted in green above) will blink yellow during that time. If you press reset during that 1000ms, the board will start up in safe mode. It can be difficult to react to the yellow LED, so you may want to think of it simply as a slow double click of the reset button. (Remember, a fast double click of reset enters the bootloader.)

### In Safe Mode

If you successfully enter safe mode on CircuitPython, the LED will intermittently blink yellow three times.

If you connect to the serial console, you'll find the following message.

```terminal
Auto-reload is off.
Running in safe mode! Not running saved code.

CircuitPython is in safe mode because you pressed the reset button during boot. Press again to exit safe mode.

Press any key to enter the REPL. Use CTRL-D to reload.
```

You can now edit the contents of the **CIRCUITPY** drive. Remember, _your code will not run until you press the reset button, or unplug and plug in your board, to get out of safe mode._

## Flash Resetting UF2

If your board ever gets into a really _weird_ state and CIRCUITPY doesn't show up as a disk drive after installing CircuitPython, try loading this 'nuke' UF2 to RPI-RP2. 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 loading this UF2, follow the steps above to re-install CircuitPython.

[Download flash erasing "nuke" UF2](https://cdn-learn.adafruit.com/assets/assets/000/101/659/original/flash_nuke.uf2?1618945856)
# MIDI Breath Controller

## Code the Controller

Once you've finished setting up your QT Py RP2040 with CircuitPython, you can access the code and necessary libraries by downloading the Project Bundle.

To do this, click on the **Download Project Bundle** button in the window below. It will download to your computer as a zipped folder.

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

## Upload the Code and Libraries to the QT Py RP2040

After downloading the Project Bundle, plug your QT Py RP2040 into the computer's USB port with a known good USB data+power cable. You should see a new flash drive appear in the computer's File Explorer or Finder (depending on your operating system) called **CIRCUITPY**. Unzip the folder and copy the following items to the QT Py RP2040's **CIRCUITPY** drive.

- **lib** folder
- **code.py**

Your QT Py RP2040 **CIRCUITPY** drive should look like this after copying the **lib** folder&nbsp;and **code.py** file:

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

## How the CircuitPython Code Works

At the top of the code are some user parameters that you can edit:

- `SEALEVELPRESSURE_HPA` - the default sea level pressure
- `change_sense` - the difference between pressure readings that needs to be detected before it sends a new MIDI message
- `low_press` - the low range of the pressure readings
- `high_press` - the high range of the pressure readings

You can update the `low_press` and `high_press` values depending on the pressure readings that you get from your use of the pressure sensor.

```python
SEALEVELPRESSURE_HPA = 1013.25
change_sense = 0.1 # change sensitivity
low_press = 995 # lowest pressure reading range
high_press = 1032 # highest pressure reading range
```

### I2C Devices

Next, the I2C devices are instantiated. First, the BMP585 sensor and then the seesaw rotary encoder, switch and onboard NeoPixel.

```python
i2c = board.STEMMA_I2C()
bmp = BMP5XX.over_i2c(i2c)
bmp.sea_level_pressure = SEALEVELPRESSURE_HPA

seesaw = seesaw.Seesaw(i2c, addr=0x36)
seesaw.pin_mode(24, seesaw.INPUT_PULLUP)
button = digitalio.DigitalIO(seesaw, 24)
encoder = rotaryio.IncrementalEncoder(seesaw)
pixel = neopixel.NeoPixel(seesaw, 6, 1)
pixel.brightness = 0.2
```

### MIDI and Lists

A MIDI object is created to use USB MIDI out. Two lists are used:

- `messages` - this list has the ControlChange (CC) message numbers
- `colors` - this list has the associated colors for the NeoPixel on the rotary encoder. These colors change along with the CC message.

```python
midi = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=0)
# CC message channels
# last index is place holder for Channel Pressure message type
messages = [1, 2, 7, 64, 0]
# neopixel colors to associate with CC messages
colors = [(255, 0, 0), (0, 255, 0), (0, 0, 255),
          (255, 255, 0), (255, 0, 255)]
```

### States and Variables

A few states and variables are used throughout the loop. `pressure` holds the pressure reading from the BMP585. `mod_val1` and `mod_val2` hold the modulation values that are sent as a part of the MIDI CC message. `effect_index` tracks the MIDI CC message from the messages list. `last_position` tracks the previous position for the rotary encoder. `button_state` is the state of the button for debouncing.

Finally, right before the loop, the NeoPixel on the rotary encoder is lit up with the color that corresponds with the default MIDI CC message.

```python
pressure = 0
mod_val1 = 0
mod_val2 = 0
effect_index = 0
last_position = 0
button_state = False
pixel.fill(colors[effect_index])
```

### The Loop

In the loop, the rotary encoder position is tracked. Turning the encoder changes the `effect_index` value. This value changes the NeoPixel color and what MIDI CC message type is sent.

```python
while True:
    position = -encoder.position
    if position != last_position:
        # encoder changes midi CC message type
        if position &gt; last_position:
            effect_index = (effect_index + 1) % len(messages)
        else:
            effect_index = (effect_index - 1) % len(messages)
        pixel.fill(colors[effect_index])
        last_position = position
```

### Panic Button

If you press the button the rotary encoder, then the MIDI panic command is sent. That command turns off all notes. It also sends a sustain command that turns sustain off. When the button is pressed, the NeoPixel turns white.

```python
if not button.value and not button_state:
        pixel.fill((255, 255, 255))
        # button press sends MIDI panic
        panic = ControlChange(123, 0)
        midi.send(panic)
        # and turns sustain off
        sus_off = ControlChange(64, 0)
        midi.send(sus_off)
        button_state = True
    if button.value and button_state:
        # reset neopixel to CC msg color
        pixel.fill(colors[effect_index])
        button_state = False
```

### Under Pressure

When a pressure reading is ready from the BMP585, it's checked against the previous pressure reading. If the difference between the two values is greater than the&nbsp;`change_sense` value, the reading is mapped to a MIDI CC value between `0` and `127`.

The mapped value is sent as part of the MIDI CC message. The message type is determined by the value of `effect_index`, which is used as the index value in the `messages` list. The following CC message types are in the list:

1. Modulation (1)
2. Breath Controller (2)
3. Volume (7)
4. Sustain (64)
5. ChannelPressure

You can add additionally message types to the messages list to use. In testing, these felt like the most effective to pair with breath control.

```python
if bmp.data_ready:
        # get pressure reading
        pressure = bmp.pressure
        # if the pressure has changed enough
        # (adjust change_sense value at top to inc or dec)
        if abs(pressure - mod_val2) &gt; change_sense:
            # map pressure reading to CC range
            mod_val1 = round(simpleio.map_range(pressure, low_press, high_press, 0, 127))
            #  updates previous value to hold current value
            mod_val2 = pressure
            # MIDI data has to be sent as an integer
            modulation = int(mod_val1)
            # possible midi messages determined by effect_index value:
            # 1: modulation
            # 2: breath controller
            # 7: volume
            # 64: sustain
            # ChannelPressure(modulation)
            if effect_index &lt; 4:
                # prep CC message with CC number and value as mapped pressure reading
                modWheel = ControlChange(messages[effect_index], modulation)
            else:
                # prep Channel Pressure message with value as mapped pressure reading
                modWheel = ChannelPressure(modulation)
            # CC message is sent
            midi.send(modWheel)
            # print(modWheel)
            # delay to settle MIDI data
            time.sleep(0.001)
```

# MIDI Breath Controller

## Assembly

Insert the QT Py into the mount by flexing the back of the mount.

![](https://cdn-learn.adafruit.com/assets/assets/000/142/519/medium640/sensors_edited_P1490388.jpg?1771854740)

Connect the QT Py, BMP585 and rotary encoder together with STEMMA QT cables.

![](https://cdn-learn.adafruit.com/assets/assets/000/142/520/medium640/sensors_edited_P1490390.jpg?1771854766)

Start by mounting the BMP585 to the front of the case with M2.5 screws and nuts.

![](https://cdn-learn.adafruit.com/assets/assets/000/142/521/medium640/sensors_edited_P1490411.jpg?1771854812)

Attach M2.5 stand-offs and nuts to the rotary encoder.

![](https://cdn-learn.adafruit.com/assets/assets/000/142/522/medium640/sensors_edited_P1490415.jpg?1771855498)

Attach the rotary encoder to the enclosure with M2.5 screws for the stand-offs and the nut for the rotary encoder.

![](https://cdn-learn.adafruit.com/assets/assets/000/142/523/medium640/sensors_edited_P1490418.jpg?1771855521)

Insert M3 screws into the two mounting holes on the QT Py mount.

![](https://cdn-learn.adafruit.com/assets/assets/000/142/524/medium640/sensors_edited_P1490421.jpg?1771855556)

Secure the QT Py to the M3 mounting holes inside the enclosure.

![](https://cdn-learn.adafruit.com/assets/assets/000/142/525/medium640/sensors_edited_P1490422.jpg?1771855576)

Insert the NeoPixel diffuser into the cutout on the case.

![](https://cdn-learn.adafruit.com/assets/assets/000/142/526/medium640/sensors_edited_P1490424.jpg?1771855604)

Put the lid on top of the case. It has a track that the case edge pops into.

![](https://cdn-learn.adafruit.com/assets/assets/000/142/527/medium640/sensors_edited_P1490425.jpg?1771856389)

You can add a knob to the rotary encoder to use it a bit easier.

Push the tubing into the cutout for the BMP585 sensor.

![](https://cdn-learn.adafruit.com/assets/assets/000/142/528/medium640/sensors_edited_P1490427.jpg?1771856419)

Insert the other end of the tube into the mouthpiece.

![](https://cdn-learn.adafruit.com/assets/assets/000/142/534/medium640/sensors_edited_P1490435.jpg?1771871197)

That completes the assembly!

![](https://cdn-learn.adafruit.com/assets/assets/000/142/535/medium640/sensors_edited_P1490429.jpg?1771871222)

# MIDI Breath Controller

## Use

https://youtu.be/gOc8D0mvBQw

Connect the controller to your computer with a USB C cable. Then, open up your DAW or other software that takes in MIDI.

Use the rotary encoder to select the MIDI CC message that you want to send.

![](https://cdn-learn.adafruit.com/assets/assets/000/142/539/medium640thumb/sensors_encoder.jpg?1771871940)

After selecting your MIDI CC message, you can start controlling your virtual synthesizers with air.

![](https://cdn-learn.adafruit.com/assets/assets/000/142/532/medium640thumb/sensors_midiBreathHeroGif.jpg?1771867896)

## Customize the Code

You can change the pressure sensitivity range from the BMP585 sensor at the top of the code:

```python
low_press = 970
high_press = 1012
```

You can change the MIDI CC message and the associated NeoPixel color by editing the `messages` and the `colors` arrays right before the loop.

```python
# CC message channels
# last index is place holder for Channel Pressure message type
messages = [1, 2, 7, 64, 0]
# neopixel colors to associate with CC messages
colors = [(255, 0, 0), (0, 255, 0), (0, 0, 255),
          (255, 255, 0), (255, 0, 255)]
```


## Featured Products

### Adafruit QT Py RP2040

[Adafruit QT Py RP2040](https://www.adafruit.com/product/4900)
What a cutie pie! Or is it... a QT Py?&nbsp;This diminutive dev board comes with one of our new favorite chip, the RP2040. It's been made famous in the new [Raspberry Pi Pico](https://www.adafruit.com/pico) _and_ our [Feather...](http://www.adafruit.com/product/4884)

In Stock
[Buy Now](https://www.adafruit.com/product/4900)
[Related Guides to the Product](https://learn.adafruit.com/products/4900/guides)
### Adafruit BMP585 Ported I2C / SPI Temperature and Pressure Sensor

[Adafruit BMP585 Ported I2C / SPI Temperature and Pressure Sensor](https://www.adafruit.com/product/6413)
Bosch has been a leader in barometric pressure sensors, from the&nbsp;[BMP085](https://www.adafruit.com/product/391).&nbsp;[BMP180](https://www.adafruit.com/product/1603),&nbsp;[BMP280](https://www.adafruit.com/product/2651),&nbsp;<a...></a...>

In Stock
[Buy Now](https://www.adafruit.com/product/6413)
[Related Guides to the Product](https://learn.adafruit.com/products/6413/guides)
### Adafruit I2C Stemma QT Rotary Encoder Breakout with Encoder

[Adafruit I2C Stemma QT Rotary Encoder Breakout with Encoder](https://www.adafruit.com/product/5880)
Rotary encoders are soooo much fun! Twist em this way, then twist them that way. Unlike potentiometers, they go all the way around and often have little detents for tactile feedback. But, if you've ever tried to add encoders to your project you know that they're a real challenge to...

Out of Stock
[Buy Now](https://www.adafruit.com/product/5880)
[Related Guides to the Product](https://learn.adafruit.com/products/5880/guides)
### STEMMA QT / Qwiic JST SH 4-pin Cable - 100mm Long

[STEMMA QT / Qwiic JST SH 4-pin Cable - 100mm Long](https://www.adafruit.com/product/4210)
This 4-wire cable is a little over 100mm / 4" long and fitted with JST-SH female 4-pin connectors on both ends. Compared with the chunkier JST-PH these are 1mm pitch instead of 2mm, but still have a nice latching feel, while being easy to insert and remove.

<a...></a...>

Out of Stock
[Buy Now](https://www.adafruit.com/product/4210)
[Related Guides to the Product](https://learn.adafruit.com/products/4210/guides)
### USB Type A to Type C Cable - approx 1 meter / 3 ft long

[USB Type A to Type C Cable - approx 1 meter / 3 ft long](https://www.adafruit.com/product/4474)
As technology changes and adapts, so does Adafruit. This&nbsp;&nbsp; **USB Type A to Type C** cable will help you with the transition to USB C, even if you're still totin' around a USB Type A hub, computer or laptop.

USB C is the latest industry-standard connector for...

In Stock
[Buy Now](https://www.adafruit.com/product/4474)
[Related Guides to the Product](https://learn.adafruit.com/products/4474/guides)
### Potentiometer Knob - Soft Touch T18 - White

[Potentiometer Knob - Soft Touch T18 - White](https://www.adafruit.com/product/2047)
_Oh say can you see_  
_By the knob's early light..._

Sorry - we thought that was clever. &nbsp;And while it wasn't really, this potentiometer knob definitely is. &nbsp;It's a...

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

## Related Guides

- [Adafruit QT Py RP2040](https://learn.adafruit.com/adafruit-qt-py-2040.md)
- [Adafruit I2C QT Rotary Encoder](https://learn.adafruit.com/adafruit-i2c-qt-rotary-encoder.md)
- [Adafruit BMP580, BMP581, and BMP585 - Temperature and Pressure Sensor](https://learn.adafruit.com/adafruit-bmp580-bmp581-and-bmp585-temperature-and-pressure-sensor.md)
- [NeoPixel Novelty Cufflinks with Scrolling Text](https://learn.adafruit.com/neopixel-novelty-cufflinks-with-scrolling-text.md)
- [Lemon Mechanical Keypad](https://learn.adafruit.com/qtpy-lemon-mechanical-keypad-macropad.md)
- [MIDI for Makers](https://learn.adafruit.com/midi-for-makers.md)
- [IBM PC Keyboard to USB HID with CircuitPython](https://learn.adafruit.com/ibm-pc-keyboard-to-usb-hid-with-circuitpython.md)
- [Toddler Timer](https://learn.adafruit.com/toddler-timer.md)
- [Light Up your Costume with Noods](https://learn.adafruit.com/light-up-your-costume-with-noods.md)
- [LEGO Set Lighting](https://learn.adafruit.com/lego-set-lighting.md)
- [Adafruit I2S Amplifier BFF](https://learn.adafruit.com/i2s-amplifier-bff.md)
- [Knobby Sequencer](https://learn.adafruit.com/knobby-sequencer.md)
- [USB Rotary Media Dial](https://learn.adafruit.com/usb-rotary-media-dial.md)
- [SNES Mouse to USB HID with CircuitPython](https://learn.adafruit.com/snes-mouse-to-usb-hid-with-circuitpython.md)
- [CircuitPython MIDI to CV Skull](https://learn.adafruit.com/circuitpython-midi-to-cv-skull.md)
- [Three Button Foot Switch](https://learn.adafruit.com/three-button-foot-switch.md)
- [USB MIDI Host2Host](https://learn.adafruit.com/usb-midi-host2host.md)
- [NeoPixel Menorah](https://learn.adafruit.com/neopixel-menorah.md)
