# USB Foot Switch Controller in CircuitPython

## Overview

https://www.youtube.com/watch?v=gzG1hSg30aY

## USB Circuit Python Controllers

In this guide, we'll build a USB foot switch controller. This can be used as an addition to your keyboard or as a way to free up your hands. I'm using it to do overhead photography so I can trigger the camera and use my hands at the same time.

It’s powered by Adafruit’s Trinket M0 which is a tiny microcontroller that can run CircuitPython. Just connect over USB and load it as a flash drive. All of the code and libraries are accessible on the drive so you can make small edits and iterate quickly. The Adafruit HID library simulates USB devices so it can send keypress just like a mouse and keyboard.

![](https://cdn-learn.adafruit.com/assets/assets/000/052/021/medium800/3d_printing_hero-nofoot-b.jpg?1521165655)

## Prerequisite Guides

If your new to electronics and soldering, I&nbsp;suggest walking through the following guides to get the basics. The Adafruit Excellent guide to soldering will walk you through process of learning how to use a soldering iron to make solid electrical connections.

- [Adafruit Guide to Excellent Soldering](../../../adafruit-guide-excellent-soldering?view=all)
- [Welcome to CircuitPython](../../../welcome-to-circuitpython)
- [Collin's Lab: Soldering](../../../collins-lab-soldering)

![](https://cdn-learn.adafruit.com/assets/assets/000/051/979/medium800/3d_printing_parts.jpg?1521058699)

## Electronic Components

The Trinket M0 and Foot Switch are the main electronic components used in this project.

### Part: Trinket M0
quantity: 1
Adafruit Trinket M0 with CircuitPython
[Trinket M0](https://www.adafruit.com/product/3500)

### Part: Micro Switch
quantity: 1
Premium Zippy 3-Terminal
[Micro Switch](https://www.adafruit.com/product/817)

## Hardware and Supplies

Just a few screws, wires and some handy supplies.&nbsp;

### Part: M2.5 x .45 x 5mm
quantity: 4
Metric Flat Head Phillips Machine Screws
[M2.5 x .45 x 5mm](https://www.albanycountyfasteners.com/2-5-MM-x-45-Phillips-Flat-Head-Machine-Screw-p/1011-1002.htm)

### Part: #4-40 x 5/8"
quantity: 2
Imperial Flat Head Phillips Machine Screws
[#4-40 x 5/8"](https://www.albanycountyfasteners.com/Phillips-Pan-Head-Machine-Screw-Stainless-4-40-p/470000.htm)

### Part: 26AWG Wire
quantity: 1
Silicone Cover Stranded-Core Wire - 25ft
[26AWG Wire](https://www.adafruit.com/product/2517)

### Part: Solder Wire
quantity: 1
Solder Spool - 1/4 lb SAC305 RoHS lead-free / 0.031" rosin-core - 0.25 lb / 100 g
[Solder Wire](https://www.adafruit.com/product/734)

### Part: Heat Shrink Tubing
quantity: 1
Multi-Colored Heat Shrink Pack - 3/32" + 1/8" + 3/16" Diameters
[Heat Shrink Tubing](https://www.adafruit.com/product/1649)

### Part: Spring Kit
quantity: 1
Spring Kit
[Spring Kit](https://amzn.to/3N2IBnD)

## Cool Tools!

These help make the project a smooth building experience. You don't need them all of them, but I recommend them.

### Part: Wire Strippers
quantity: 1
Hakko Professsional Quality 20-30 AWG Wire Strippers - CSP-30-1
[Wire Strippers](https://www.adafruit.com/product/527)

### Part: Wire Cutters
quantity: 1
Flush diagonal cutters - CHP170
[Wire Cutters](https://www.adafruit.com/product/152)

### Part: Soldering Iron
quantity: 1
Adjustable 30W 110V soldering iron - XY-258 110V
[Soldering Iron](https://www.adafruit.com/product/180)

### Part: Panavise
quantity: 1
Panavise Jr. - PV-201
[Panavise](https://www.adafruit.com/product/151)

### Part: Helping Third Hands
quantity: 1
Helping Third Hand Magnifier W/Magnifying Glass Tool - MZ101
[Helping Third Hands](https://www.adafruit.com/product/291)

### Part: Ultimaker 2+
quantity: 1
3D Printer
[Ultimaker 2+](https://www.adafruit.com/product/2673)

![](https://cdn-learn.adafruit.com/assets/assets/000/052/066/medium800/3d_printing_hero-foot-upright.jpg?1521247376)

# USB Foot Switch Controller in CircuitPython

## Circuit Diagram

## Circuit&nbsp;Diagram

This provides a visual reference for wiring of the components. They aren't true to scale, just meant to be used as reference. Generic micro switches follow a standard pin out with visible markings on the body of the switch. Here's each label markings:

- (C1) – "common ground".
- (NO2) – "normally open".
- (NC3) – "normally closed".

![](https://cdn-learn.adafruit.com/assets/assets/000/051/932/medium800/3d_printing_circuit-diagram.png?1520823415)

## Wired Connections

Just two wired connections are needed for this circuit, which makes it very easy!

- (C 1) **Common** from micro switch to **Ground** on **Trinket M0**
- NO 2) **Normally open** from micro switch to **#0** on on **Trinket M0**

# USB Foot Switch Controller in CircuitPython

## CircuitPython

Danger: 

[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. The trinket M0 is the second board that comes pre-loaded with CircuitPython. Simply copy and edit files on the **CIRCUITPY** drive to iterate.

Warning: 

If you've already plugged your board into your computer, you should see a drive called **CIRCUITPY**. The drive will contain a few files. If you want to make a 'backup' of the current firmware on the device, drag-off and save the **CURRENT.UF2** file. Other that that you can ignore the **index.htm** and **info\_uf2.txt** files. They cannot be deleted and are only for informational purposes.

**If you have already plugged in your board, start by ejecting or "safely remove" the CIRCUITPY drive**. This is a good practice to get into. Always eject before unplugging or resetting your board!

## Set up CircuitPython Quick Start!
Follow this quick step-by-step for super-fast Python power :)

Info: The PyRuler, which is a Trinket embedded in a ruler, [has its own Learn Guide](https://learn.adafruit.com/adafruit-pyruler).

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

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

![adafruit_products_TrinketUF2.png](https://cdn-learn.adafruit.com/assets/assets/000/049/514/medium640/adafruit_products_TrinketUF2.png?1513888251)

Plug your Trinket into your computer using a known-good USB cable.

**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.**

Double-click the small **Reset** button next to the Trinket M0 name printed on your board, and you will see the Dotstar RGB LED turn green. If it turns red, check the USB cable, try another USB port, etc. **Note:** The little LED below the USB connector will be red - this is ok!

![adafruit_products_TrinketBootloader.jpg](https://cdn-learn.adafruit.com/assets/assets/000/049/519/medium640/adafruit_products_TrinketBootloader.jpg?1513892986)

If double-clicking doesn't work the first time, try again. Sometimes it can take a few tries to get the rhythm right!

You will see a new disk drive appear called **TRINKETBOOT**.

&nbsp;

&nbsp;

&nbsp;

Drag the **adafruit\_circuitpython\_etc.uf2** file to **TRINKETBOOT**

![adafruit_products_TrinketTRINKETBOOT.png](https://cdn-learn.adafruit.com/assets/assets/000/049/520/medium640/adafruit_products_TrinketTRINKETBOOT.png?1513895566)

![adafruit_products_TrinketDragUF2toTRINKETBOOT.png](https://cdn-learn.adafruit.com/assets/assets/000/049/522/medium640/adafruit_products_TrinketDragUF2toTRINKETBOOT.png?1513895614)

The red LED will flash. Then, the **TRINKETBOOT** drive will disappear and a new disk drive called **CIRCUITPY** will appear.

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

![adafruit_products_TrinketCIRCUITPY.png](https://cdn-learn.adafruit.com/assets/assets/000/049/524/medium640/adafruit_products_TrinketCIRCUITPY.png?1513896363)

## Further Information
For more detailed info on installing CircuitPython, check out [Installing CircuitPython](../../../../welcome-to-circuitpython/installing-circuitpython).

## Trinket Default Zip Install
Trinket M0 is limited on space. As you begin working on projects, you may run out of space. Operating systems can create hidden files that take up space. To prevent these files from being added to your Trinket, [we suggest installing the Trinket Default Zip.](../../../../adafruit-trinket-m0-circuitpython-arduino/downloads)

 **Click the link above to download the default zip.**

&nbsp;

Download and save it to your desktop, or wherever is handy!

![adafruit_products_TrinketDefaultZipFile.png](https://cdn-learn.adafruit.com/assets/assets/000/049/531/medium640/adafruit_products_TrinketDefaultZipFile.png?1513903366)

If you haven't already, **plug your Trinket into your computer using a known-good USB cable.**

&nbsp;

Make sure your **CIRCUITPY** drive appears.

![adafruit_products_TrinketCIRCUITPYDrive.png](https://cdn-learn.adafruit.com/assets/assets/000/049/536/medium640/adafruit_products_TrinketCIRCUITPYDrive.png?1513904089)

Once downloaded, **double-click the file to extract the contents.**

![adafruit_products_TrinketDefaultZipExtracted.png](https://cdn-learn.adafruit.com/assets/assets/000/049/537/medium640/adafruit_products_TrinketDefaultZipExtracted.png?1513904143)

Double click newly extracted folder to open it.

![adafruit_products_TrinketOpenDefaultZipFolder.png](https://cdn-learn.adafruit.com/assets/assets/000/049/534/medium640/adafruit_products_TrinketOpenDefaultZipFolder.png?1513903863)

To load the files that will keep the system from adding hidden files to your drive, highlight these three files:

**.fseventsd**

**.metadata\_never\_index**

**.Trashes**

&nbsp;

Drag them to your **CIRCUITPY** drive. If it asks to replace any, say yes!

![adafruit_products_TrinketDragThreeFiles.png](https://cdn-learn.adafruit.com/assets/assets/000/049/541/medium640/adafruit_products_TrinketDragThreeFiles.png?1513914023)

If you'd like to **reset your Trinket to the same files it shipped with** , you can do that with these files. **If you changed main.py, and you want to keep your changes, back up main.py first.**

Highlight all the files in this folder. Drag them all to your CIRCUITPY drive.

If it asks to replace anything, say yes.

![adafruit_products_TrinketDragDefaultZipContents.png](https://cdn-learn.adafruit.com/assets/assets/000/049/538/medium640/adafruit_products_TrinketDragDefaultZipContents.png?1513904345)

# USB Foot Switch Controller in CircuitPython

## Software

## Download Project Bundle
Once you've installed the latest version of CircuitPython onto your board, you'll need to grab the code, libraries and any assets included with the project.

Click the **&nbsp;download project bundle&nbsp;** button below to get the code, libraries and assets all in one!

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

## Upload Code, Libraries and Assets

Unzip the project bundle and upload the files to the&nbsp; **CIRCUITPY** &nbsp;drive.

Your&nbsp; **CIRCUITPY&nbsp;** drive should look like this after you've uploaded the code, libraries and assets.

![](https://cdn-learn.adafruit.com/assets/assets/000/108/845/medium800/3d_printing_circuitpy-drive.jpg?1644438788)

## List of USB HID Keycodes

The long list of available keyboard characters are listed in the webpage linked below. Most of the characters are for USA keyboard only. Function keys and modifiers can be used but only some special characters are not supported.

[USB HID Keycode List Cheatsheet](http://circuitpython.readthedocs.io/projects/hid/en/latest/api.html#adafruit-hid-keycode-keycode)
# USB Foot Switch Controller in CircuitPython

## 3D Printing

## What If I Don't Have A 3D Printer?

Not to worry! You can use a 3D printing service such as&nbsp;[3DHubs](https://www.3dhubs.com/)&nbsp;or&nbsp;[MakeXYZ](https://www.makexyz.com/)&nbsp;to have a local 3D printer operator 3D print and ship you parts to you. This is a great way to get your&nbsp;parts 3D printed by local makers. You could also try checking out your local Library or search for a Maker Space.

![](https://cdn-learn.adafruit.com/assets/assets/000/051/980/medium800/3d_printing_3d-parts.jpg?1521058753)

## Slice Settings

These parts have been tested and 3D printed on an Ultimaker 2+ and 3 using PLA filament. The parts were sliced using CURA 3.x with the following slice settings.

- 220C extruder temp
- 65c bed temp
- 0.2 layer height
- 0.38 line width
- 2 Wall Line Count – 0.4 nozzle
- 20% infill
- 70mm/s print speed

![3d_printing_cura-slice.png](https://cdn-learn.adafruit.com/assets/assets/000/051/994/medium640/3d_printing_cura-slice.png?1521120843)

Danger: 

## Support Material / Overhangs

The **top cover** requires support material. The overhang angles on the support material can be increased to 60 degrees which will use less material and reduce the printing time. Features on the sides of the **top cover** part are 60 degrees so they don't need any supports.

![3d_printing_Screen_Shot_2018-03-20_at_10.40.20_PM.png](https://cdn-learn.adafruit.com/assets/assets/000/052/358/medium640/3d_printing_Screen_Shot_2018-03-20_at_10.40.20_PM.png?1521600059)

## Design Source Files

The spool holder carousel assembly was designed in Fusion 360.&nbsp;This can be downloaded in different formats like STEP, SAT and more.

[Download Trinket Foot Switch CAD Source](https://cdn-learn.adafruit.com/assets/assets/000/138/156/original/Trinket_Foot_Switch_CAD_Source.zip?1751890633)
[Down QT Py Foot Switch CAD Source](https://cdn-learn.adafruit.com/assets/assets/000/138/155/original/CAD_Source.zip?1751890198)
## 3D Printed Parts

All of the parts are 3D printed with FDM type 3D printers using various colored filaments. All of the parts are separated into pieces to make 3D printing easier. Assembly is pretty easy and&nbsp;straight forward. Use the links below to&nbsp;download the STLs files.

[Download STLs on Thingiverse](https://www.thingiverse.com/thing:2829107)
[Download STLs on Pinshape](https://pinshape.com/items/43801-3d-printed-usb-foot-switch)
## Design Source Files

The enclosure assembly was designed in Fusion 360.&nbsp;This can be downloaded in different formats like STEP, SAT and more. Electronic components like the board, displays, connectors and more can be downloaded from our Fusion 360 CAD parts github repo.

[Download Adafruit CAD Parts on Github](https://github.com/adafruit/Adafruit_CAD_Parts)
# USB Foot Switch Controller in CircuitPython

## Switch

## Wires for Micro Switch

We'll need two pieces of wires to connect the micro switch to the Adafruit Trinket M0. These can be about 10 cm in length. I'm using [30AWG silicone covered wires](https://www.adafruit.com/product/2051) in this project.

![3d_printing_switch-wires-10cm.jpg](https://cdn-learn.adafruit.com/assets/assets/000/051/995/medium640/3d_printing_switch-wires-10cm.jpg?1521121312)

## Wire Strippers

In order to connect the wires to the electrical leads and pins on the components, we'll need to strip the ends to expose the bare metal wire. Use wire strippers to remove a bit of insulation from the tips.

![3d_printing_switch-wires-stripping.jpg](https://cdn-learn.adafruit.com/assets/assets/000/051/996/medium640/3d_printing_switch-wires-stripping.jpg?1521121392)

## Tinning Wires

To prevent the strands of wires from fraying when soldering, we can add a small amount of solder to fuse them. I'm used third helping hands tools to hold the wires in place which makes soldering more conformable.

![3d_printing_switch-wires-tinning.jpg](https://cdn-learn.adafruit.com/assets/assets/000/051/997/medium640/3d_printing_switch-wires-tinning.jpg?1521121422)

## Tinning Micro Switch

We can do the same process for the leads on the micro switch. Since we'll only be using two of the leads, we only need to tin the NO3(Normally Open) and C1(Common) labeled leads.

![3d_printing_switch-tinning.jpg](https://cdn-learn.adafruit.com/assets/assets/000/051/998/medium640/3d_printing_switch-tinning.jpg?1521121478)

## Wiring Micro Switch

Now we can attach the wires from the Trinket M0 to the micro switch by heating up the leads and placing the wires&nbsp; down onto them. I used a Panavise Jr to hold the micro switch steady while soldering.

![3d_printing_switch-wiring.jpg](https://cdn-learn.adafruit.com/assets/assets/000/051/999/medium640/3d_printing_switch-wiring.jpg?1521121511)

## Wired Micro Switch

Now we have a wired micro switch, nice work! Double check your solder joints and make sure the wires a fully connected and for any shorts.

![3d_printing_switch-to-trinket.jpg](https://cdn-learn.adafruit.com/assets/assets/000/052/000/medium640/3d_printing_switch-to-trinket.jpg?1521121544)

# USB Foot Switch Controller in CircuitPython

## Trinket M0

## Trinket Tinning

We'll need to connect the wires from the micro switch to the pins on the Trinket M0. I like to add a bit of solder to the pins and then insert the wires.

![3d_printing_trinket-tinning.jpg](https://cdn-learn.adafruit.com/assets/assets/000/052/001/medium640/3d_printing_trinket-tinning.jpg?1521121595)

## Wiring Trinket M0

Solder the C1(common) wire to the ground (G) labeled pin and NO3(normally open) wire to pin number 0.&nbsp;

![3d_printing_trinket-wiring.jpg](https://cdn-learn.adafruit.com/assets/assets/000/052/002/medium640/3d_printing_trinket-wiring.jpg?1521121619)

## Wired Trinket M0 and Micro Switch

Now our micro switch is connected to the Trinket M0, high five! Now we can start putting our circuit into the 3D printed enclosure. Before we get started, let's double check our work and make sure we have solid connections.

![3d_printing_trinket-switch-wired.jpg](https://cdn-learn.adafruit.com/assets/assets/000/052/003/medium640/3d_printing_trinket-switch-wired.jpg?1521121639)

# USB Foot Switch Controller in CircuitPython

## Assembly

## Hardware for Micro Switch

First up we'll need to get that micro switch secured to the mounting bracket. We have two long screws that will be inserted through the body of the switch and into the holes of the mounting bracket.

![3d_printing_switch-screws.jpg](https://cdn-learn.adafruit.com/assets/assets/000/052/004/medium640/3d_printing_switch-screws.jpg?1521121695)

## Secure Micro Switch to Bracket

Grab the two parts and line up the holes so ones on the micro switch are matching with the bracket. The actuator of the switch should face away from the 'L' shape of the bracket.

![3d_printing_switch-fasten-screws.jpg](https://cdn-learn.adafruit.com/assets/assets/000/052/006/medium640/3d_printing_switch-fasten-screws.jpg?1521121757)

## Micro Switch Bracket

Here's a better view of the orientation. Note how the C1(common) lead is parallel with surface of the 'L' bracket .&nbsp;

![3d_printing_switch-mounted.jpg](https://cdn-learn.adafruit.com/assets/assets/000/052/005/medium640/3d_printing_switch-mounted.jpg?1521121727)

## Installing Bracket

Next we'll work on mounting the bracket to the base part. We'll need two short M2.5 machine screws to secure the parts together.

![3d_printing_switch-mount-screws.jpg](https://cdn-learn.adafruit.com/assets/assets/000/052/007/medium640/3d_printing_switch-mount-screws.jpg?1521121802)

## Installed Bracket

Place the bracket over the center of the base with the micro switch facing away from the circular post. Line up the mounting holes and insert machine screws. Fasten the screws until they're fully tightened with the two parts jointed and flush.

![3d_printing_switch-mount-fasten.jpg](https://cdn-learn.adafruit.com/assets/assets/000/052/008/medium640/3d_printing_switch-mount-fasten.jpg?1521121832)

## Tap Mounting Holes

We'll need to secure the Trinket M0 to the base with machine screws. It's easier if the screws are pre-fastened into the Trinket first. You may need to tap the mounting holes with the screws.

![3d_printing_trinket-tap-screw.jpg](https://cdn-learn.adafruit.com/assets/assets/000/052/015/medium640/3d_printing_trinket-tap-screw.jpg?1521121905)

## Secure Trinket M0

Place the Trinket M0 over the four standoffs on the base with the USB port facing the cut opening. Line up the holes on and fasten the machine secures until fully tightened.

![3d_printing_trinket-installed-b.jpg](https://cdn-learn.adafruit.com/assets/assets/000/052/017/medium640/3d_printing_trinket-installed-b.jpg?1521121966)

## Install Top Cover

All that's left todo now is to install the top cover. Grab the parts and line up the hinges with each other, you'll notice the top has extrusion while the base has dimpled features. Firmly press the parts together until the hinges click into place. They should join together nicely.&nbsp;

![3d_printing_top-install.jpg](https://cdn-learn.adafruit.com/assets/assets/000/052/018/medium640/3d_printing_top-install.jpg?1521121998)

## USB Port

Squeeze the top and base together to test out the micro switch. The hinges should be frictionless. The USB port is accessible through the open and the top accommodates for microUSB cables.

![3d_printing_usb-port.jpg](https://cdn-learn.adafruit.com/assets/assets/000/052/019/medium640/3d_printing_usb-port.jpg?1521122026)


## Featured Products

### Adafruit Trinket M0 - for use with CircuitPython & Arduino IDE

[Adafruit Trinket M0 - for use with CircuitPython & Arduino IDE](https://www.adafruit.com/product/3500)
The&nbsp;Adafruit Trinket M0 may be small, but do not be fooled by its size! It's a tiny microcontroller board, built around the Atmel ATSAMD21, a little chip with _a lot_ of power. We wanted to design a microcontroller board that was small enough to fit into any project, and low...

Out of Stock
[Buy Now](https://www.adafruit.com/product/3500)
[Related Guides to the Product](https://learn.adafruit.com/products/3500/guides)
### Micro Switch - Premium Zippy 3-Terminal

[Micro Switch - Premium Zippy 3-Terminal](https://www.adafruit.com/product/817)
Micro-switches are often found in arcade buttons and joysticks but they're also really handy in any kind of mechatronics project or when you need a basic sensor. They are always 'tactile' (clicky feeling), and 'momentary' (the switch closes when pressed, then snaps open...

No Longer Stocked
[Buy Now](https://www.adafruit.com/product/817)
[Related Guides to the Product](https://learn.adafruit.com/products/817/guides)

## Related Guides

- [Adafruit Trinket M0](https://learn.adafruit.com/adafruit-trinket-m0-circuitpython-arduino.md)
- [Kaleidoscope Eyes (Trinket-Powered NeoPixel LED Ring Goggles)](https://learn.adafruit.com/kaleidoscope-eyes-neopixel-led-goggles-trinket-gemma.md)
- [Building the Assistive Technology Ultimate Remote](https://learn.adafruit.com/building-the-assistive-technology-ultimate-remote.md)
- [Building CircuitPython](https://learn.adafruit.com/building-circuitpython.md)
- [CircuitPython Hardware: SSD1306 OLED Display](https://learn.adafruit.com/micropython-hardware-ssd1306-oled-display.md)
- [Porting an Arduino library to CircuitPython: VL6180X Distance Sensor](https://learn.adafruit.com/porting-an-arduino-library-to-circuitpython-vl6180x-distance-sensor.md)
- [Watchmen's Sister Night NeoPixel Goggles](https://learn.adafruit.com/watchmen-sister-night-circuitpython-neopixel-goggles.md)
- [Using Servos With CircuitPython and Arduino](https://learn.adafruit.com/using-servos-with-circuitpython.md)
- [3D Printed LED Fire Horns](https://learn.adafruit.com/3d-printed-led-fire-horns.md)
- [CircuitPython Hardware: PCA9685 PWM & Servo Driver](https://learn.adafruit.com/micropython-hardware-pca9685-pwm-and-servo-driver.md)
- [Trinket Ultrasonic Rangefinder](https://learn.adafruit.com/trinket-ultrasonic-rangefinder.md)
- [NeoPixel LED Mickey Ears](https://learn.adafruit.com/neopixel-led-mickey-ears.md)
- [Build your own NeXT with a virtual machine](https://learn.adafruit.com/build-your-own-next-with-a-virtual-machine.md)
- [Zelda: Breath of the Wild – 3D Printed Guardian Sword with NeoPixel LEDs](https://learn.adafruit.com/breath-of-the-wild-guardian-sword-led-3d-printed.md)
- [Clockwork Goggles](https://learn.adafruit.com/gemma-m0-clockwork-goggles.md)
- [Trinket / Gemma IR Control](https://learn.adafruit.com/trinket-gemma-ir-remote-control.md)
