# Tiny Pod - BLE Rotary Encoder for iWatch

## Overview

https://youtu.be/tMeLb2OPE0o

## Build a Media Controller

Turn an old Apple Watch into a mini iPod! Use BLE on a Feather ESP32 S3 with an ANO rotary encoder wheel to control the watch interface. The encoder wheel is reminiscent of the [original clicking scroll wheel interface on the first iPods](https://gizmodo.com/a-visual-history-of-the-ipod-click-wheel-r-i-p-1632640054)

![3d_printing_hero-pod.jpg](https://cdn-learn.adafruit.com/assets/assets/000/133/822/medium640/3d_printing_hero-pod.jpg?1732636574)

![3d_printing_hero-ano-board.jpg](https://cdn-learn.adafruit.com/assets/assets/000/133/825/medium640/3d_printing_hero-ano-board.jpg?1732640379)

This project features the ANO rotary encoder wheel. It’s got four directional buttons and a center button for scrolling and clicking. It’s essentially a wireless USB controller that pairs with an Apple Watch over BLE. It’s inspired by [The Tiny Pod project we saw online](https://thetinypod.com/), to make an open source and hackable version!

![3d_printing_ano-scroll.gif](https://cdn-learn.adafruit.com/assets/assets/000/133/848/medium640thumb/3d_printing_ano-scroll.jpg?1732652321)

## ESP32-S3 BLE with CircuitPython

Powered by the Adafruit Feather ESP32-S3, it’s got Wifi, BLE and on board battery charging, perfect for making portable IOT and BLE projects.

The ANO Rotary encoder breakout connects over STEMMA QT, making it easy to plug and play with the Adafruit Feather.

With Apple’s watchOS, you can enable the Voiceover accessibility feature to allow pairing keyboard devices over BLE. This allows you to scroll through the elements on screen and select items using the directional buttons and center click wheel.

&nbsp;

![3d_printing_hero-pod-connect.jpg](https://cdn-learn.adafruit.com/assets/assets/000/133/823/medium640/3d_printing_hero-pod-connect.jpg?1732639926)

![3d_printing_hero-board.jpg](https://cdn-learn.adafruit.com/assets/assets/000/133/824/medium640/3d_printing_hero-board.jpg?1732640340)

## Parts
![](https://cdn-learn.adafruit.com/assets/assets/000/133/827/medium800/3d_printing_parts.jpg?1732640598)

### Adafruit ESP32-S3 Feather with STEMMA QT / Qwiic

[Adafruit ESP32-S3 Feather with STEMMA QT / Qwiic](https://www.adafruit.com/product/5323)
The ESP32-S3 has arrived in Feather format - and what a great way to get started with this powerful new chip from Espressif! With dual 240 MHz cores, WiFi and BLE support, and native USB, this Feather is great for powering your IoT projects.

That's right - it's the new...

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

### ANO Directional Navigation and Scroll Wheel Rotary Encoder

[ANO Directional Navigation and Scroll Wheel Rotary Encoder](https://www.adafruit.com/product/5001)
This funky user interface element is reminiscent of the [original clicking scroll wheel interface on the first iPods](https://gizmodo.com/a-visual-history-of-the-ipod-click-wheel-r-i-p-1632640054). It's a fancy mechanical kit but has an intuitiveness that is hard to argue with -...

Out of Stock
[Buy Now](https://www.adafruit.com/product/5001)
[Related Guides to the Product](https://learn.adafruit.com/products/5001/guides)
![Angled shot of ANM rotary encoder.](https://cdn-shop.adafruit.com/640x480/5001-00.jpg)

### Adafruit ANO Rotary Navigation Encoder to I2C Stemma QT Adapter

[Adafruit ANO Rotary Navigation Encoder to I2C Stemma QT Adapter](https://www.adafruit.com/product/5740)
The ANO rotary encoder wheel is a funky user interface element, reminiscent of the [original clicking scroll wheel interface on the first iPods](https://gizmodo.com/a-visual-history-of-the-ipod-click-wheel-r-i-p-1632640054). It's a nifty kit, but the pin-out is a little odd...

In Stock
[Buy Now](https://www.adafruit.com/product/5740)
[Related Guides to the Product](https://learn.adafruit.com/products/5740/guides)
![Overhead video of a blue-manicured finger manipulating a rotary encoder connected to a 4-digit LED segment display. ](https://cdn-shop.adafruit.com/product-videos/640x480/5740-04.jpg)

### STEMMA QT / Qwiic JST SH 4-Pin Cable - 50mm Long

[STEMMA QT / Qwiic JST SH 4-Pin Cable - 50mm Long](https://www.adafruit.com/product/4399)
This 4-wire cable is&nbsp;50mm / 1.9" 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...>

In Stock
[Buy Now](https://www.adafruit.com/product/4399)
[Related Guides to the Product](https://learn.adafruit.com/products/4399/guides)
![Angled of of JST SH 4-Pin Cable.](https://cdn-shop.adafruit.com/640x480/4399-00.jpg)

### Breadboard-friendly SPDT Slide Switch

[Breadboard-friendly SPDT Slide Switch](https://www.adafruit.com/product/805)
These nice switches are perfect for use with breadboard and perfboard projects. They have 0.1" spacing and snap in nicely into a solderless breadboard. They're easy to switch no matter what size fingers you have, but not so easy that they'll get flipped by accident. Work great as...

Out of Stock
[Buy Now](https://www.adafruit.com/product/805)
[Related Guides to the Product](https://learn.adafruit.com/products/805/guides)
![Small, black, SPDT slide switch.](https://cdn-shop.adafruit.com/640x480/805-03.jpg)

### Lithium Ion Polymer Battery - 3.7v 500mAh

[Lithium Ion Polymer Battery - 3.7v 500mAh](https://www.adafruit.com/product/1578)
Lithium-ion polymer (also known as 'lipo' or 'lipoly') batteries are thin, light, and powerful. The output ranges from 4.2V when completely charged to 3.7V. This battery has a capacity of 500mAh for a total of about 1.9 Wh. If you need a larger (or smaller!) battery, <a...></a...>

Out of Stock
[Buy Now](https://www.adafruit.com/product/1578)
[Related Guides to the Product](https://learn.adafruit.com/products/1578/guides)
![Angled shot of a Lithium Ion Polymer Battery 3.7V 500mAh with JST-PH connector.](https://cdn-shop.adafruit.com/640x480/1578-03.jpg)

### Part: 44mm Apple Watch Series 5 
quantity: 1
New or Used
[44mm Apple Watch Series 5 ](https://www.bhphotovideo.com/c/used/1506021/)

### Part: M2.5x5mm Screws
quantity: 6
M2.5x5mm Screws
[M2.5x5mm Screws](https://amzn.to/3OsdkM9)

### Part: M2x5mm Screws
quantity: 2
M2x5mm Screws
[M2x5mm Screws](https://amzn.to/3ZplEmg)

![](https://cdn-learn.adafruit.com/assets/assets/000/133/826/medium800/3d_printing_hero-pod-music.jpg?1732640417)

# Tiny Pod - BLE Rotary Encoder for iWatch

## Circuit Diagram

## Circuit Diagram

The diagram below provides a general visual reference for wiring of the components once you get to the&nbsp; **Assembly** page. This diagram was created using the software package [Fritzing](http://fritzing.org/download/).

## Adafruit Library for Fritzing

Adafruit uses the Adafruit's Fritzing parts library to create circuit diagrams for projects. You can download the library or just grab individual parts. Get the library and parts from [GitHub - Adafruit Fritzing Parts](https://github.com/adafruit/Fritzing-Library/tree/master/parts).

![](https://cdn-learn.adafruit.com/assets/assets/000/133/828/medium800/3d_printing_tinyPod-diagram.jpg?1732640753)

## Wired Connections

- The ANO rotary encoder is soldered to the PCB with STEMMA Stemma QT Adapter
- The slide switch is connected to the **EN** and **GND** pins on the Feather
- The Lipo battery plugs into the Battery port

# Tiny Pod - BLE Rotary Encoder for iWatch

## Watch Setup

## Enable Voice Over

Go to Settings and then Accessibility. Now go to the VoiceOver sub menu.

**Wait to enable Voice Over until the keyboard is paired via Bluetooth.**

[https://support.apple.com/guide/watch/use-a-bluetooth-keyboard-apd006574536/11.0/watchos/11.0](https://support.apple.com/guide/watch/use-a-bluetooth-keyboard-apd006574536/11.0/watchos/11.0)

Set the modifier key to "caps lock". The Up button on the ANO encoder is setup to start up the keyboard with caps lock key.

Setup 3 button press with the Crown button to turn VoiceOver On/Off: [https://support.apple.com/guide/watch/the-accessibility-shortcut-apda74993b58/watchos](https://support.apple.com/guide/watch/the-accessibility-shortcut-apda74993b58/watchos)

![3d_printing_watch-vo.jpg](https://cdn-learn.adafruit.com/assets/assets/000/133/843/medium640/3d_printing_watch-vo.jpg?1732648256)

## Navigation buttons

The scroll wheel scrolls either up or down, left and right arrows do the same, center button is used for double tap to select and down button reads out the characters.

## Pair Keyboard

Inside the VoiceOver settings, tap on the Keyboard sub menu. Under **Device** , tap on the CIRCUITPY device to pair.

## Disconnect Keyboard

If you need to disconnect/forget the Feather from BLE, you can hold down the center select button on the encoder while power cycle the Feather.&nbsp;

If you're connected to the repl you'll see "Last BLE bonding deleted, restarting.." and then the board reboots.&nbsp;

![3d_printing_watch-keyboard.jpg](https://cdn-learn.adafruit.com/assets/assets/000/133/844/medium640/3d_printing_watch-keyboard.jpg?1732648754)

![3d_printing_watch-connected.jpg](https://cdn-learn.adafruit.com/assets/assets/000/133/845/medium640/3d_printing_watch-connected.jpg?1732648882)

![](https://cdn-learn.adafruit.com/assets/assets/000/133/852/medium800thumb/3d_printing_nav-loop.jpg?1732652123)

# Tiny Pod - BLE Rotary Encoder for iWatch

## Code

Once you've finished setting up your Feather ESP32-S3 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.

![3d_printing_hero-code.jpg](https://cdn-learn.adafruit.com/assets/assets/000/133/846/medium640/3d_printing_hero-code.jpg?1732649532)

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

## Upload the Code and Libraries to the Feather ESP32-S3

After downloading the Project Bundle, plug your Feather ESP32-S3 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 Feather ESP32-S3's **CIRCUITPY** drive.

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

Your Feather ESP32-S3 **CIRCUITPY** drive should look like this after copying the **lib** folder and the **code.py** file.

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

## How the CircuitPython Code Works

At the top of the code are user modifiable keycodes. The defaults match the [documented keycodes](https://support.apple.com/guide/watch/use-a-bluetooth-keyboard-apd006574536/11.0/watchos/11.0) in the Apple Watch documentation. The code uses the caps lock key as the modifier key.

```python
# ios modifier
mod = Keycode.CAPS_LOCK
#  keycodes
KBD_CODES = [
    [Keycode.SPACE], # center
    [mod], # up
    [Keycode.LEFT_ARROW], # left
    [Keycode.DOWN_ARROW], # down
    [Keycode.RIGHT_ARROW], # right
]
```

## I2C

The seesaw ANO rotary encoder is instantiated over I2C.

```python
i2c = board.STEMMA_I2C()
seesaw = seesaw.Seesaw(i2c, addr=0x49)

seesaw_product = (seesaw.get_version() >> 16) & 0xFFFF
print(f"Found product {seesaw_product}")
if seesaw_product != 5740:
    print("Wrong firmware loaded?  Expected 5740")

buttons = []
button_names = ["Select", "Up", "Left", "Down", "Right"]
button_states = []

for s in range(1, 6):
    seesaw.pin_mode(s, seesaw.INPUT_PULLUP)
    pin = digitalio.DigitalIO(seesaw, s)
    pin_state = False
    buttons.append(pin)
    button_states.append(pin_state)

encoder = rotaryio.IncrementalEncoder(seesaw)
last_position = 0
```

## Erase Bonding

If you find you need to forget BLE pairing on the Feather, you can hold down the center button the encoder and reboot the board. If the board detects that that button is being held down before the loop, it will delete all BLE bonding and reset.

```python
if not buttons[0].value and button_states[0] is False:
    button_states[0] = True
    try:
        import _bleio
        time.sleep(2)
        _bleio.adapter.erase_bonding()
        time.sleep(2)
        print("Last BLE bonding deleted, restarting..")
        time.sleep(2)
        microcontroller.reset()
    except Exception: # pylint: disable=broad-except
        pass
```

## Start BLE

The BLE HID services are established and the BLE connection is advertised.

```python
#  BLE HID setup
hid = HIDService()
#  keyboard & mouse HID setup
kbd = Keyboard(hid.devices)

advertisement = ProvideServicesAdvertisement(hid)
advertisement.appearance = 961
scan_response = Advertisement()
scan_response.complete_name = "CircuitPython HID"
ble = adafruit_ble.BLERadio()

if not ble.connected:
    print("advertising")
    ble.start_advertising(advertisement, scan_response)
else:
    print("already connected")
    print(ble.connections)
time.sleep(2)
```

## The Loop

In the loop, the encoder sends the right arrow command when turned to the right and sends the left arrow command when turned to the left. The up, down, left, right and center buttons send the keycodes listed in the&nbsp;`KBD_CODES`&nbsp;array.

```auto
while True:
	#  check for BLE connection
    while not ble.connected:
        pass
	#  while BLE connected
    while ble.connected:
        position = encoder.position
        if position != last_position:
            #  if the encoder is turned to the right
            if position > last_position:
                kbd.send(Keycode.RIGHT_ARROW)
            #  if the encoder is turned to the left
            if position < last_position:
                kbd.send(Keycode.LEFT_ARROW)
		    #  reset encoder position
            last_position = position
            print(f"Position: {position}")
        for b in range(5):
            if not buttons[b].value and button_states[b] is False:
                button_states[b] = True
                if b != 0:
                    kbd.press(*KBD_CODES[b])
                    print(*KBD_CODES[b])
                else:
                    kbd.press(mod)
                    kbd.press(*KBD_CODES[b])
                print(f"{button_names[b]} button pressed")
            if buttons[b].value and button_states[b] is True:
                button_states[b] = False
                kbd.release_all()
                print(f"{button_names[b]} button released")
	#  if BLE disconnects, begin advertising again
    ble.start_advertising(advertisement)
```

# Tiny Pod - BLE Rotary Encoder for iWatch

## 3D Printing

## 3D Printed Parts

STL files for 3D printing will need to be oriented for print using either FDM or SLS machines.

Parts were built with Translucent Clear PLA filament.

Original design source files may be downloaded using the links below.

![3d_printing_parts-3d.jpg](https://cdn-learn.adafruit.com/assets/assets/000/133/829/medium640/3d_printing_parts-3d.jpg?1732640919)

[Edit Design](https://a360.co/3ZakidG)
[Download STEP and f3z Files](https://cdn-learn.adafruit.com/assets/assets/000/133/849/original/ANO-Pod-STEP-f3z.zip?1732651190)
[Download STLs files](https://cdn-learn.adafruit.com/assets/assets/000/133/850/original/STLs.zip?1732651251)
## Slice with Settings for PLA material&nbsp;

The parts were sliced using CURA using the slice settings below.

- PLA filament 200c extruder
- 0.2 layer height
- 10% gyroid infill
- 60mm/s print speed
- 60c heated bed

![3d_printing_slice.jpg](https://cdn-learn.adafruit.com/assets/assets/000/133/830/medium640/3d_printing_slice.jpg?1732642447)

## Download Modular TinyPod 3D Files

Use the files below to make the modular version of the enclosure.

[Modular_TinyPod_STLs.zip](https://cdn-learn.adafruit.com/assets/assets/000/133/945/original/Modular_TinyPod_STLs.zip?1733366192)
[Modular_TinyPod_STLs.zip](https://cdn-learn.adafruit.com/assets/assets/000/133/946/original/Modular_TinyPod_STLs.zip?1733366201)
# Tiny Pod - BLE Rotary Encoder for iWatch

## Assembly

## Solder Slide Switch

Measure wires for the slide switch to reach the cutouts on the case, about 25mm long.

![3d_printing_board-switch-solder.jpg](https://cdn-learn.adafruit.com/assets/assets/000/133/831/medium640/3d_printing_board-switch-solder.jpg?1732642539)

## ANO Rotary Breakout and Encoder Wheel

Install the rotary wheel to the ANO STEMMA QT breakout by orienting pins in the correct the holes.

Solder all of the pins on the ANO rotary encoder wheel to the ANO STEMMA QT breakout.

Connect a 50mm long STEMMA cable to the right STEMMA port as shown.

![3d_printing_ano-solder-stemma.jpg](https://cdn-learn.adafruit.com/assets/assets/000/133/832/medium640/3d_printing_ano-solder-stemma.jpg?1732642670)

## Mount Lipo Battery

Thread the battery wire through the cutout on the case. Align the battery lid part to the snaps on each side of the case.

![3d_printing_lipo-thread.jpg](https://cdn-learn.adafruit.com/assets/assets/000/133/833/medium640/3d_printing_lipo-thread.jpg?1732646713)

![3d_printing_lipo-lid.jpg](https://cdn-learn.adafruit.com/assets/assets/000/133/834/medium640/3d_printing_lipo-lid.jpg?1732646806)

## Connect battery to Feather

Plug the battery into the Feather before mounting the board to the case.&nbsp;

Align the USB C port on the Feather to the cutout on the case.

Use M2.5x5mm screws on the screws holes near the USB C port.

Finish mounting the Feather board with M2x5mm screws on the smaller screw holes.

## Press Fit the Slide Switch

Angle the slide switch and press fit into the cutout on the side of the case.

![3d_printing_lipo-connect.jpg](https://cdn-learn.adafruit.com/assets/assets/000/133/835/medium640/3d_printing_lipo-connect.jpg?1732646940)

![3d_printing_board-switch-mount.jpg](https://cdn-learn.adafruit.com/assets/assets/000/133/836/medium640/3d_printing_board-switch-mount.jpg?1732647042)

## Connect ANO rotary

Plug the STEMMA cable into the port on the Feather.

Align the ANO board with the Adafruit logo pointing up and the through hole pins pointing down towards the USB C port as shown.

The ANO rotary board mounts to the standoffs with M2.5x5mm screws.

![3d_printing_ano-stemma.jpg](https://cdn-learn.adafruit.com/assets/assets/000/133/837/medium640/3d_printing_ano-stemma.jpg?1732647256)

![3d_printing_ano-mount.jpg](https://cdn-learn.adafruit.com/assets/assets/000/133/838/medium640/3d_printing_ano-mount.jpg?1732647290)

## Attach Watch

Align the Apple Watch crown and button to the cutouts on the case.

The screen lid press fits onto the snaps on the side of the case.

![3d_printing_watch-mount.jpg](https://cdn-learn.adafruit.com/assets/assets/000/133/839/medium640/3d_printing_watch-mount.jpg?1732647537)

![3d_printing_watch-lid.jpg](https://cdn-learn.adafruit.com/assets/assets/000/133/840/medium640/3d_printing_watch-lid.jpg?1732647604)

## Attach ANO lid

Align the cutout on the case lid to the ANO and press fit on the snaps on each &nbsp;side of the case.

![3d_printing_ano-lid.jpg](https://cdn-learn.adafruit.com/assets/assets/000/133/841/medium640/3d_printing_ano-lid.jpg?1732647675)

## Complete!
![](https://cdn-learn.adafruit.com/assets/assets/000/133/851/medium800thumb/3d_printing_nav-loop.jpg?1732652078)


## Featured Products

### Adafruit ESP32-S3 Feather with STEMMA QT / Qwiic

[Adafruit ESP32-S3 Feather with STEMMA QT / Qwiic](https://www.adafruit.com/product/5323)
The ESP32-S3 has arrived in Feather format - and what a great way to get started with this powerful new chip from Espressif! With dual 240 MHz cores, WiFi and BLE support, and native USB, this Feather is great for powering your IoT projects.

That's right - it's the new...

In Stock
[Buy Now](https://www.adafruit.com/product/5323)
[Related Guides to the Product](https://learn.adafruit.com/products/5323/guides)
### ANO Directional Navigation and Scroll Wheel Rotary Encoder

[ANO Directional Navigation and Scroll Wheel Rotary Encoder](https://www.adafruit.com/product/5001)
This funky user interface element is reminiscent of the [original clicking scroll wheel interface on the first iPods](https://gizmodo.com/a-visual-history-of-the-ipod-click-wheel-r-i-p-1632640054). It's a fancy mechanical kit but has an intuitiveness that is hard to argue with -...

Out of Stock
[Buy Now](https://www.adafruit.com/product/5001)
[Related Guides to the Product](https://learn.adafruit.com/products/5001/guides)
### Adafruit ANO Rotary Navigation Encoder to I2C Stemma QT Adapter

[Adafruit ANO Rotary Navigation Encoder to I2C Stemma QT Adapter](https://www.adafruit.com/product/5740)
The ANO rotary encoder wheel is a funky user interface element, reminiscent of the [original clicking scroll wheel interface on the first iPods](https://gizmodo.com/a-visual-history-of-the-ipod-click-wheel-r-i-p-1632640054). It's a nifty kit, but the pin-out is a little odd...

In Stock
[Buy Now](https://www.adafruit.com/product/5740)
[Related Guides to the Product](https://learn.adafruit.com/products/5740/guides)
### STEMMA QT / Qwiic JST SH 4-Pin Cable - 50mm Long

[STEMMA QT / Qwiic JST SH 4-Pin Cable - 50mm Long](https://www.adafruit.com/product/4399)
This 4-wire cable is&nbsp;50mm / 1.9" 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...>

In Stock
[Buy Now](https://www.adafruit.com/product/4399)
[Related Guides to the Product](https://learn.adafruit.com/products/4399/guides)
### Breadboard-friendly SPDT Slide Switch

[Breadboard-friendly SPDT Slide Switch](https://www.adafruit.com/product/805)
These nice switches are perfect for use with breadboard and perfboard projects. They have 0.1" spacing and snap in nicely into a solderless breadboard. They're easy to switch no matter what size fingers you have, but not so easy that they'll get flipped by accident. Work great as...

Out of Stock
[Buy Now](https://www.adafruit.com/product/805)
[Related Guides to the Product](https://learn.adafruit.com/products/805/guides)
### Lithium Ion Polymer Battery - 3.7v 500mAh

[Lithium Ion Polymer Battery - 3.7v 500mAh](https://www.adafruit.com/product/1578)
Lithium-ion polymer (also known as 'lipo' or 'lipoly') batteries are thin, light, and powerful. The output ranges from 4.2V when completely charged to 3.7V. This battery has a capacity of 500mAh for a total of about 1.9 Wh. If you need a larger (or smaller!) battery, <a...></a...>

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

## Related Guides

- [ANO Directional Navigation and Scroll Wheel Rotary Encoder and Breakout](https://learn.adafruit.com/ano-rotary-encoder.md)
- [Adafruit ESP32-S3 Feather](https://learn.adafruit.com/adafruit-esp32-s3-feather.md)
- [Adafruit ANO Rotary Encoder to I2C Adapter](https://learn.adafruit.com/adafruit-ano-rotary-navigation-encoder-to-i2c-stemma-qt-adapter.md)
- [ESP32-S3 BLE RS-232 Controller](https://learn.adafruit.com/esp32-s3-ble-rs232-controller.md)
- [Introducing Adafruit Feather](https://learn.adafruit.com/adafruit-feather.md)
- [ESP32-S3 BLE iOS Media Controller](https://learn.adafruit.com/esp32-s3-ble-ios-media-controller.md)
- [How to Add a New Board to WipperSnapper](https://learn.adafruit.com/how-to-add-a-new-board-to-wippersnapper.md)
- [Networking in CircuitPython](https://learn.adafruit.com/networking-in-circuitpython.md)
- [NeoPixel Rotary Fidget](https://learn.adafruit.com/neopixel-rotary-fidget.md)
- [Using the CircuitPython Extension for Visual Studio Code](https://learn.adafruit.com/using-the-circuitpython-extension-for-visual-studio-code.md)
- [Circle of Fifths Euclidean Synth with synthio and CircuitPython](https://learn.adafruit.com/circle-of-fifths-euclidean-synth-with-synthio-and-circuitpython.md)
- [Grill Thermometer Dashboard](https://learn.adafruit.com/grill-thermometer-dashboard.md)
- [TFT Spirit Board](https://learn.adafruit.com/tft-spirit-board.md)
- [Ultrasonic Ruler](https://learn.adafruit.com/ultrasonic-ruler.md)
- [ Faz-Wrench - Five Nights at Freddy's](https://learn.adafruit.com/faz-wrench.md)
- [Purple People Eater](https://learn.adafruit.com/purple-people-eater.md)
