# TensorFlow Lite for Circuit Playground Bluefruit Quickstart

## Overview

https://youtu.be/ocvcrPplNH4

Machine learning has come to the 'edge' - small microcontrollers that can run a very miniature version of TensorFlow Lite to do ML computations.

But you don't need super complex hardware to start developing your own TensorFlow models! Using our beginner board, the **Circuit Playground Bluefruit** you can build & test various examples that run on the nRF52840 chip + all the cool sensors built in!

# Parts

You'll need at least a Circuit Playground Bluefruit

### Circuit Playground Bluefruit - Bluetooth® Low Energy

[Circuit Playground Bluefruit - Bluetooth® Low Energy](https://www.adafruit.com/product/4333)
 **Circuit Playground Bluefruit** is our third board in the Circuit Playground series, another step towards a perfect introduction to electronics and programming. We've taken the popular Circuit Playground Express and made it even better! Now the main chip is an nRF52840...

Out of Stock
[Buy Now](https://www.adafruit.com/product/4333)
[Related Guides to the Product](https://learn.adafruit.com/products/4333/guides)
![shot of a Black woman's neon-green manicured hand holding up a Circuit Playground Bluefruit glowing rainbow LEDs.](https://cdn-shop.adafruit.com/640x480/4333-11.jpg)

Many of the projects work a lot better, with graphical output, when you add on a TFT Gizmo!

### Circuit Playground TFT Gizmo - Bolt-on Display + Audio Amplifier

[Circuit Playground TFT Gizmo - Bolt-on Display + Audio Amplifier](https://www.adafruit.com/product/4367)
Extend and expand your Circuit Playground projects with a bolt on TFT Gizmo that lets you add a lovely color display in a sturdy and reliable fashion. This PCB looks just like a round TFT breakout but has permanently affixed M3 standoffs that act as mechanical and electrical...

In Stock
[Buy Now](https://www.adafruit.com/product/4367)
[Related Guides to the Product](https://learn.adafruit.com/products/4367/guides)
![Hand pressing buttons on circuit playground, then turning over to show TFT gizmo display an image of a friendly robot or snake](https://cdn-shop.adafruit.com/product-videos/640x480/4367-05.jpg)

# TensorFlow Lite for Circuit Playground Bluefruit Quickstart

## Setup For Compiling Examples

We're going to be using the popular Arduino IDE to compile and load code. Start by following the PyBadge setup guide to

1. [Install the latest desktop Arduino IDE](https://learn.adafruit.com/adafruit-pybadge/setup)
2. [Install Adafruit SAMD board support package](https://learn.adafruit.com/adafruit-pybadge/using-with-arduino-ide) (If programming a SAMD board like the Edge/PyBadge)
3. [Install Adafruit nRF52 board support package](https://learn.adafruit.com/adafruit-circuit-playground-bluefruit/arduino-support-setup) (If programming an nRF52 board like the Circuit Playground Bluefruit)
4. [Install all the Arcada Libraries (yes there's a lot of them!)](https://learn.adafruit.com/adafruit-pybadge/arcada-libraries)

# TensorFlow Libraries

Now install the `Arduino TensorFlow library 1.15.0-ALPHA` with the library manager

Make sure you **don't pick the _pre-compiled_ release version**

**If you see 'precompiled' in the name, install the non-precompiled version from the dropdown**

Warning: 

![](https://cdn-learn.adafruit.com/assets/assets/000/084/237/medium800/adafruit_products_image.png?1573778823)

 **&nbsp;** Next, install **Adafruit TensorFlow Lite**

![](https://cdn-learn.adafruit.com/assets/assets/000/084/196/medium800/adafruit_products_image.png?1573771859)

And finally, for the speech demos, grab the Adafruit **Zero PDM** library

![](https://cdn-learn.adafruit.com/assets/assets/000/084/380/medium800/adafruit_products_image.png?1573943273)

# Select Board

Almost ready! Before we're ready to compile some examples!

Plug in the board into your computer with a known-good data/sync cable. Select the right board in the Tools download

## For PyBadge/EdgeBadge
![](https://cdn-learn.adafruit.com/assets/assets/000/084/197/medium800/adafruit_products_image.png?1573772178)

For some examples you will want to set&nbsp; **Optimize** to **Fastest** &nbsp; and set **CPU Speed** to 180MHz (overclocking). This will give 6-10x speedup. For the first few examples, it isn't necessary. Make sure to select **USB Stack: TinyUSB**

## For Circuit Playground Bluefruit

You can use the default settings:

![](https://cdn-learn.adafruit.com/assets/assets/000/085/625/medium800/adafruit_products_image.png?1575942568)

# TensorFlow Lite for Circuit Playground Bluefruit Quickstart

## Sine Wave Demo

![](https://cdn-learn.adafruit.com/assets/assets/000/085/628/medium800thumb/bluefruit_ezgif-2-4d21c5180bf9.jpg?1575944223)

This is the "hello world" demo of TensorFlow Lite. It has a simple model that has been trained to generate a sine wave when a linear input is given. It's a good way to verify you have a working toolchain!

If you want to load demo this immediately to your Circuit Playground Bluefruit with TFT Gizmo, here is the UF2 file which you can 'drag-n-drop' onto your **BOOT** diskdrive to load the example ([follow the instructions here on how to load UF2 files if you've never done it before](https://learn.adafruit.com/adafruit-circuit-playground-bluefruit/circuitpython))

[CPB_TF_SineWave_Gizmo.UF2](https://cdn-learn.adafruit.com/assets/assets/000/085/626/original/CPB_TF_SineWave_Gizmo.UF2?1575943788)
# Serial plotter sine wave demo compile & upload

Let's start with the plain Arduino TensorFlow demo. **Don't forget you have to perform all the steps in the previous page for installing Arduino IDE, Adafruit nRF52 support, libraries, and board/port selection!**

![](https://cdn-learn.adafruit.com/assets/assets/000/083/178/medium800/adafruit_products_image.png?1572322596)

Compile & upload this example!

![](https://cdn-learn.adafruit.com/assets/assets/000/083/179/medium800/adafruit_products_image.png?1572322632)

Upon success, you may see the LED on the board pulsing. The best way to see the output is to select the **Serial Plotter**

![](https://cdn-learn.adafruit.com/assets/assets/000/083/180/medium800/adafruit_products_image.png?1572322716)

You'll see a sine wave on the plotter!

![](https://cdn-learn.adafruit.com/assets/assets/000/083/181/medium800/adafruit_products_image.png?1572322751)

If you want to see a more sinusoidal output go to **arduino\_constants.cpp**

and change

`const int kInferencesPerCycle = 1000;`

to

`const int kInferencesPerCycle = 200;`

Then re-upload

![](https://cdn-learn.adafruit.com/assets/assets/000/083/182/medium800/adafruit_products_image.png?1572322825)

# Arcada display output sine demo compile & upload

Arcada is our library for handling displays and input - we have so many different boards and displays, we need a unifying library that would handle displays, filesystems, buttons, etc. For many boards, you don't need to do anything special to figure out the pinouts or part numbers!

Load up the **Adafruit\_TFLite-\>hello\_world\_arcada example**

![](https://cdn-learn.adafruit.com/assets/assets/000/083/183/medium800/adafruit_products_image.png?1572323049)

You can upload this sketch to your board and you'll get an animated wave on the screen.

The majority of the work is in this file that initializes the display on the first inference, then draws a ball on every successful inference. The curve of the ball creates the sine wave!

https://github.com/adafruit/Adafruit_TFLite/blob/master/examples/hello_world_arcada/arduino_output_handler.cpp

# TensorFlow Lite for Circuit Playground Bluefruit Quickstart

## Customized Wave Demo

The sine wave demo is great to do initial experimentation with training new simple single input-\>output models.

Google TensorFlow has a great guide here

[TensorFlow Lite Microcontroller Build/Convert Guide](https://www.tensorflow.org/lite/microcontrollers/build_convert)
The detailed part of the tutorial is in this colab script. Colab is great because its fully hosted, runs in any web-browser without using your CPU to do the training!

# Re-creating the Default Sine Wave Model

Visit the colab script here:

[create_sine_model.ipynb](https://colab.research.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/lite/micro/examples/hello_world/train/train_hello_world_model.ipynb)
And **run all** the script!

![adafruit_products_image.png](https://cdn-learn.adafruit.com/assets/assets/000/084/367/medium640/adafruit_products_image.png?1574137033)

It may take a few minutes. When its complete you'll get an array of data at the bottom:

![](https://cdn-learn.adafruit.com/assets/assets/000/084/368/medium800/adafruit_products_image.png?1573854906)

Grab that text starting with

`unsigned char sine_model_quantized_tflite[] = {`

and ending with

`unsigned int sine_model_quantized_tflite_len = 2640;`

(the number may vary)

```python
unsigned char sine_model_quantized_tflite[] = {
  0x18, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x00, 0x00, 0x0e, 0x00,
  0x18, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x14, 0x00,
  0x0e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, 0x0a, 0x00, 0x00,
  0xb8, 0x05, 0x00, 0x00, 0xa0, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
  ....more here....
  0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
  0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0a, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00,
  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x03, 0x00, 0x00, 0x00
};
unsigned int sine_model_quantized_tflite_len = 2640;
```

Now visit the **hello\_world\_arcada** sketch and fine the **sine\_model\_data** tab:

![](https://cdn-learn.adafruit.com/assets/assets/000/084/369/medium800/adafruit_products_image.png?1573856205)

And paste that output from the notebook, replacing the

`unsigned char sine_model_quantized_tflite[] = {`

down to

`const int g_sine_model_data_len = 2640;`

![](https://cdn-learn.adafruit.com/assets/assets/000/084/503/medium800/adafruit_products_image.png?1574055115)

![](https://cdn-learn.adafruit.com/assets/assets/000/084/504/medium800/adafruit_products_image.png?1574055187)

Danger: 

Recompile and upload to your badge or Circuit Playground Bluefruit, you should get the exact same sine wave demo!

![](https://cdn-learn.adafruit.com/assets/assets/000/084/599/medium800thumb/adafruit_products_Machine_Learning_Monday_-_Adding_TFLite_File_Loading_support.jpg?1574136122)

OK maybe not so exciting. Lets try changing the model.

# Creating a Cosine Wave Model

Let's get _wild and crazy_ now, by making a cosine wave model. Find the line in the script where we create the `y_values` from the `x_values`

![](https://cdn-learn.adafruit.com/assets/assets/000/084/505/medium800/adafruit_products_image.png?1574055375)

And change it to a **cos** function!

![](https://cdn-learn.adafruit.com/assets/assets/000/084/507/medium800/adafruit_products_image.png?1574055408)

Run the colab script from this point down (or the whole thing) to get a brand new `unsigned char sine_model_quantized_tflite` array&nbsp; and follow the steps you did before to replace the model array in the **hello\_world** sketch with your new model. Re-upload to now get cosine wave output, which looks like the plot above

![](https://cdn-learn.adafruit.com/assets/assets/000/084/600/medium800thumb/adafruit_products_Machine_Learning_Monday_-_Adding_TFLite_File_Loading_support.jpg?1574136248)

# Loading Models From Internal Storage

The PyBadge/EdgeBadge/Circuit Playground Bluefruit have 2MB of internal storage. We can use that to store TensorFlow models, so that we don't have to go through the recompilation step above. Instead, the model is loaded from that storage flash, we can read/write to the flash over USB by dragging-and-dropping, just like a USB key!

Upload the **hello\_world\_arcada** sketch. If you have a PyBadge/EdgeBadge, this time make sure to select **TinyUSB** as the USB stack since that will activate mass storage support. You don't have to specifically select TinyUSB for nRF52 (e.g. Circuit Playground Bluefruit)

![adafruit_products_image.png](https://cdn-learn.adafruit.com/assets/assets/000/084/597/medium640/adafruit_products_image.png?1574136611)

Now when you upload, on reset you'll get a new disk drive appearing on your computer, it'll probably be name CIRCUITPY but you can rename it if you like.

![adafruit_products_image.png](https://cdn-learn.adafruit.com/assets/assets/000/084/598/medium640/adafruit_products_image.png?1574136591)

Download this models zip file and drag the two .tflite files to CIRCUITPY

![adafruit_products_image.png](https://cdn-learn.adafruit.com/assets/assets/000/084/602/medium640/adafruit_products_image.png?1574136644)

[sin_and_cos_models.zip](https://cdn-learn.adafruit.com/assets/assets/000/084/601/original/sin_and_cos_models.zip?1574136361)
Rename one of the files to **model.tflite** - when this file is available to read, this will tell our sketch to load the model from disk instead of from memory!

Once you've renamed the file, click the **reset** button, you should get an alert like this:

Once you've renamed the file, click the **reset** button, you should get an alert like this. Press the **A** button on the badge or Circuit Playground Bluefruit (its the left button) to begin the model inference run.

![adafruit_products_image.png](https://cdn-learn.adafruit.com/assets/assets/000/084/603/medium640/adafruit_products_image.png?1574136535)

Once you've proved that you're running one of the files, try renaming the _other_ model file to **model.tflite** and reset. That way you can prove that its running from the disk.

https://www.youtube.com/watch?v=1zuT8Q6Zx3g

You can go back to the colab script you ran, and look in the **Files** tab to find the `sine_model_quantized.tflite` file that is converted in the last stage. You can download that file directly.

Try creating new **tflite** files that model different functions!

![adafruit_products_image.png](https://cdn-learn.adafruit.com/assets/assets/000/084/604/medium640/adafruit_products_image.png?1574136917)

# TensorFlow Lite for Circuit Playground Bluefruit Quickstart

## Gesture Demo

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

The PyBadge has a built-in accelerometer (LIS3DH) which you can use to detect tilt and motion. The accelerometer outputs 3 axes of acceleration data, and we can use that to train and infer gestures using TensorFlow!

If you want to load this demo immediately to your CircuitPlayground Bluefruit with TFT Gizmo here is a UF2 file, which you can 'drag-n-drop' onto your CPLAYBOOT diskdrive to load the example ([follow the instructions here on how to load UF2 files if you've never done it before](https://learn.adafruit.com/tensorflow-lite-for-microcontrollers-kit-quickstart/tron-demo#enter-bootloader-mode-6-2))

[CPB_Gizmo_Magic_Wand.UF2](https://cdn-learn.adafruit.com/assets/assets/000/085/631/original/CPB_Gizmo_Magic_Wand.UF2?1575947695)
# Serial out gesture demo compile & upload

Let's start with the plain Arduino TensorFlow demo. **Don't forget you have to perform all the steps in the previous page for installing Arduino IDE, Adafruit nRF52 support, libraries, and board/port selection!**

We adapted the default gesture demo to use the LIS3DH, so you _cannot_ use the example in the Arduino TensorFlowLite library Instead, use the one in `Adafruit TensorFlow Lite` called `magic_wand`

![](https://cdn-learn.adafruit.com/assets/assets/000/084/202/medium800/adafruit_products_image.png?1573772891)

Compile & upload this example!

![](https://cdn-learn.adafruit.com/assets/assets/000/084/203/medium800/adafruit_products_image.png?1573772991)

Upon success, you may see the LED on the board pulsing. The best way to see the output is to select the **Serial Monitor**

![](https://cdn-learn.adafruit.com/assets/assets/000/084/206/medium800/adafruit_products_image.png?1573773154)

You'll see steaming data coming out on the Serial Monitor. This is the 3 axis accelerometer data. We output it so that you can have some more debugging data which can be really handy when training/debugging gestures. You can also plot it with the Serial Plotter if you like (close the Monitor first)

Move and twist the badge to see the red/green/blue lines change.

![](https://cdn-learn.adafruit.com/assets/assets/000/084/207/medium800/adafruit_products_image.png?1573773250)

Close the Plotter and re-open the monitor to see the streaming data again. This time, **With the Playground NEOPIXEL Ring facing you**** , and the USB port pointing to the ceiling** perform one of three gestures:

## Wing

This gesture is a **W** starting at your top left, going down, up, down up to your top right

When that gesture is detected you'lll see the front NeoPixels turn yellow, and the following print out on the Serial Monitor:

Warning: 

![](https://cdn-learn.adafruit.com/assets/assets/000/084/208/medium800/adafruit_products_image.png?1573773544)

## Ring

This gesture is a **O** starting at top center, then moving clockwise in a circle to the right, then down, then left and back to when you started in the top center

When that gesture is detected you'll see the front NeoPixels turn purple, and the following print out on the Serial Monitor:

![](https://cdn-learn.adafruit.com/assets/assets/000/084/209/medium800/adafruit_products_image.png?1573774447)

## Slope

This gesture is an **_L_** starting at your top right, moving diagonally to your bottom left, then straight across to bottom right.

When that gesture is detected you'll see the front NeoPixels turn light blue, and the following print out on the Serial Monitor:

![](https://cdn-learn.adafruit.com/assets/assets/000/084/212/medium800/adafruit_products_image.png?1573774596)

# Arcada display output gesture demo compile & upload

Arcada is our library for handling displays and input - we have so many different boards and displays, we need a unifying library that would handle displays, filesystems, buttons, etc. For many boards, you don't need to do anything special to figure out the pinouts or part numbers!

Load up the **Adafruit\_TFLite-\>magic\_wand\_arcada example**

![](https://cdn-learn.adafruit.com/assets/assets/000/084/213/medium800/adafruit_products_image.png?1573774679)

You can upload this sketch to your board. After upload it will show up on your computer as a disk drive called CIRCUITPY (unless you changed it)

![](https://cdn-learn.adafruit.com/assets/assets/000/084/218/medium800/adafruit_products_image.png?1573775268)

Click this button to download the gesture images and audio clips

[Circuit Playground Bluefruit Gesture Images](https://github.com/adafruit/Adafruit_TFLite/tree/master/examples/magic_wand_arcada/cplay_files)
Navigate through the zip file to `examples\magic_wand_arcada\cplay_files` then drag the files directly onto the **CIRCUITPY** drive like so:

![](https://cdn-learn.adafruit.com/assets/assets/000/085/630/medium800/bluefruit_image.png?1575947319)

Click **reset** on the Bluefruit to restart, and you should get the graphics displaying so that you can run the demo untethered!

![](https://cdn-learn.adafruit.com/assets/assets/000/085/632/medium800thumb/bluefruit_ezgif-2-6ed45601b27a.jpg?1575947919)

Setup and configuration of the accelerometer and screen is done in the **accelerometer\_handler**

https://github.com/adafruit/Adafruit_TFLite/blob/master/examples/magic_wand_arcada/arduino_accelerometer_handler.cpp

While the LED/Display output is done in the **output\_handler.cpp**

https://github.com/adafruit/Adafruit_TFLite/blob/master/examples/magic_wand_arcada/arduino_output_handler.cpp

# TensorFlow Lite for Circuit Playground Bluefruit Quickstart

## Micro Speech Demo

https://youtu.be/ocvcrPplNH4

The Circuit Playground Bluefruit has a built-in microphone which you can use to detect audio and speech. The mic outputs monophonic digital sound waves, and we can use that to train and infer gestures using TensorFlow!

If you want to load this demo immediately to your CPB, here is a UF2 file, which you can 'drag-n-drop' onto your CPLAYBOOT diskdrive to load the example ([follow the instructions here on how to load UF2 files if you've never done it before](https://learn.adafruit.com/tensorflow-lite-for-microcontrollers-kit-quickstart/tron-demo#enter-bootloader-mode-6-2))

[Circuit_Playground_Bluefruit_YesNo.UF2](https://cdn-learn.adafruit.com/assets/assets/000/085/863/original/Circuit_Playground_Bluefruit_YesNo.UF2?1576449754)
# Micro speech demo compile & upload

**Don't forget you have to perform all the steps in the previous page for installing Arduino IDE, Adafruit nRF52 support, libraries, and board/port selection!**

We adapted the default speech demo to use various kinds of audio input, so you _cannot_ use the example in the Arduino TensorFlowLite library Instead, use the one in `Adafruit TensorFlow Lite` called `micro_speech_arcada`

![](https://cdn-learn.adafruit.com/assets/assets/000/084/360/medium800/adafruit_products_image.png?1573850404)

You can upload this sketch to your board. After upload it will show up on your computer as a disk drive called CIRCUITPY (unless you changed it)

![](https://cdn-learn.adafruit.com/assets/assets/000/084/363/medium800/adafruit_products_image.png?1573851247)

Click this button to download the detection/info images

[Circuit Playground MicroSpeech files](https://github.com/adafruit/Adafruit_TFLite/tree/master/examples/micro_speech_arcada/gizmo_files)
Navigate through the zip file to `examples\micro_speech_arcada\gizmo_files` then drag the files directly onto the **CIRCUITPY** drive like so:

![](https://cdn-learn.adafruit.com/assets/assets/000/084/364/medium800/adafruit_products_image.png?1573851473)

Click **reset** on the Playground to restart, and you should get the graphics displaying so that you can run the demo untethered!

![](https://cdn-learn.adafruit.com/assets/assets/000/085/864/medium800thumb/bluefruit_p.jpg?1576454114)

Setup and configuration of the microphone and screen is done in the **audio\_provider**

https://github.com/adafruit/Adafruit_TFLite/blob/master/examples/micro_speech_arcada/arduino_audio_provider.cpp

While the LED/Display/audio output is done in the **command\_responder.cpp**

https://github.com/adafruit/Adafruit_TFLite/blob/master/examples/micro_speech_arcada/arduino_command_responder.cpp


## Featured Products

### Circuit Playground Bluefruit - Bluetooth® Low Energy

[Circuit Playground Bluefruit - Bluetooth® Low Energy](https://www.adafruit.com/product/4333)
 **Circuit Playground Bluefruit** is our third board in the Circuit Playground series, another step towards a perfect introduction to electronics and programming. We've taken the popular Circuit Playground Express and made it even better! Now the main chip is an nRF52840...

Out of Stock
[Buy Now](https://www.adafruit.com/product/4333)
[Related Guides to the Product](https://learn.adafruit.com/products/4333/guides)
### Circuit Playground TFT Gizmo - Bolt-on Display + Audio Amplifier

[Circuit Playground TFT Gizmo - Bolt-on Display + Audio Amplifier](https://www.adafruit.com/product/4367)
Extend and expand your Circuit Playground projects with a bolt on TFT Gizmo that lets you add a lovely color display in a sturdy and reliable fashion. This PCB looks just like a round TFT breakout but has permanently affixed M3 standoffs that act as mechanical and electrical...

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

[AdaBox Subscription](https://www.adafruit.com/adabox_get_started)
Subscription
[Buy Now](https://www.adafruit.com/adabox_get_started)
[Related Guides to the Product](https://learn.adafruit.com/products/3067/guides)
### Adafruit Circuit Playground Bluefruit Express Starter Kit

[Adafruit Circuit Playground Bluefruit Express Starter Kit](https://www.adafruit.com/product/4504)
If you missed out on ADABOX 014, its not too late for you to pick up the parts necessary to build many of the projects! This kit pack doesn't come with tissue paper or the nifty extras, but it does have all the electronic goodies you need  
  
This project pack features...

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

## Related Guides

- [Adafruit Circuit Playground Bluefruit](https://learn.adafruit.com/adafruit-circuit-playground-bluefruit.md)
- [Adafruit Circuit Playground TFT Gizmo](https://learn.adafruit.com/adafruit-tft-gizmo.md)
- [Circuit Playground Bluefruit Pumpkin with Lights and Sounds ](https://learn.adafruit.com/pumpkin-with-circuit-playground-bluefruit.md)
- [AdaBox 014](https://learn.adafruit.com/adabox014.md)
- [Circuit Playground-O-Phonor](https://learn.adafruit.com/circuit-playground-o-phonor.md)
- [CLUE Metal Detector in CircuitPython](https://learn.adafruit.com/clue-metal-detector-circuitpython.md)
- [Bluetooth TV Zapper](https://learn.adafruit.com/bluetooth-tv-zapper.md)
- [Flapping Halloween Vampire Bat](https://learn.adafruit.com/flapping-halloween-vampire-bat.md)
- [PyLeap device enabled - In Rainbows](https://learn.adafruit.com/pyleap-device-enabled-in-rainbows.md)
- [CircuitPython BLE Advertising Beacons](https://learn.adafruit.com/circuitpython-ble-advertising-beacons.md)
- [PyLeap MP3 Playback for Circuit Playground Bluefruit](https://learn.adafruit.com/pyleap-mp3-playback-for-cpb.md)
- [Sound Reactive Sunflower Baby Crib Mobile with Bluetooth Control](https://learn.adafruit.com/sound-reactive-sunflower-baby-crib-mobile-with-bluetooth-control.md)
- [Wirelessly Code your Bluetooth Device with CircuitPython](https://learn.adafruit.com/wirelessly-code-your-bluetooth-device-with-circuitpython.md)
- [Circuit Playground TFT Gizmo Dreidel](https://learn.adafruit.com/circuit-playground-tft-gizmo-dreidel.md)
- [MagicLight Bulb Color Mixer with Circuit Playground Bluefruit](https://learn.adafruit.com/magiclight-bulb-mixer.md)
- [PyLeap WAV Playback for Circuit Playground Bluefruit](https://learn.adafruit.com/pyleap-wav-playback-for-cpb.md)
