# CircuitPython with Jupyter Notebooks

## Overview

![](https://cdn-learn.adafruit.com/assets/assets/000/057/034/medium800/circuitpython_Untitled-3.png?1530650231)

Jupyter lets you create interactive notebooks containing code, text, and rich media that you can share with your friends.

We created a Jupyter Notebook package (called a Kernel) for you to **run CircuitPython code directly from a Jupyter interactive notebook.**

That means your code lives in your web-browser and executes on the CircuitPython hardware through a serial USB link.

We're going to learn how to combine Jupyter with [CircuitPython](https://learn.adafruit.com/welcome-to-circuitpython?view=all) to create interactive notebooks for your hardware.

## What's a Jupyter Notebook?
![](https://cdn-learn.adafruit.com/assets/assets/000/055/801/medium800/circuitpython_jupyterpreview.png?1529529122 Jupyter Notebooks via https://jupyter.org/)

> #### The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.

This is great news for people who are already comfortable with Jupyter, but also for educators, developers and workshop-organizers.

In this learn guide, we're going to walk through installing Jupyter Notebook, installing the Jupyter CircuitPython kernel, and uploading Jupyter Notebook examples.

# CircuitPython with Jupyter Notebooks

## Installing on Mac and Linux

The installation process for Jupyter and the CircuitPython kernel is _a bit lengthy_, but it's not difficult. If you don't already have Jupyter installed, you'll need to install it before we install the kernel.&nbsp;

Primary: 

# Installing Jupyter
### Install Jupyter with Anaconda
 **Don't have a Python installation on your computer?** If you're new to all this, the Jupyter Project recommends installing [Anaconda](https://www.continuum.io/downloads), which installs Python, the Jupyter Notebook, and other commonly used packages for scientific computing and data science.

First, navigate to the [Anaconda downloads page](https://www.continuum.io/downloads), select your platform (Windows, Mac, Linux), and **download the installer including Python 3.6+**.

![](https://cdn-learn.adafruit.com/assets/assets/000/055/287/medium800/circuitpython_Downloads_-_Anaconda-1.png?1528734030)

Install the version of Anaconda you downloaded by following the instructions in the installation executable.&nbsp;

## Install Jupyter with PIP
Info: 

 **If you have a Python installation already on your computer,** you may want to use the Python Package Manager ([pip](https://pip.pypa.io/en/stable/)) instead of Anaconda.&nbsp;

If you're not sure which Python version is installed, you can check by running:

```auto
python3 --version
```

Next, let's ensure we also have the latest version of the Python Package Manager. We can do this by running:

```auto
pip3 install --upgrade pip
```

Install the Jupyter Notebook:

```auto
pip3 install jupyter
```

## Starting the Notebook Server
Now that we have Jupyter installed, let's start the notebook server.

On MacOS or Linux, we can use the Terminal.

Let's launch the Jupyter Notebook server by opening either Command Prompt or Terminal and typing:

```auto
jupyter notebook
```

If your installation went well, you'll see information about the notebook server in your command line:

![](https://cdn-learn.adafruit.com/assets/assets/000/055/448/medium800/circuitpython_jupyter-notebook-command.png?1529090791)

Your web browser will automatically open to the **Jupyter Notebook Dashboard.**

![](https://cdn-learn.adafruit.com/assets/assets/000/055/290/medium800/circuitpython_jupyter-notebook-dashboard.png?1528735168)

The Notebook Dashboard displays a list of notebooks, files, and folders in the location on your computer from where the notebook server was started.

We're going to spend more time with the Dashboard later in this guide.

# Installing the CircuitPython Kernel
Jupyter manages its programming language support through the installation of&nbsp; **kernels**.

By default, the Jupyter Notebook will have the Python programming language installed. We're going to install the CircuitPython Kernel which is a [wrapper](https://jupyter-client.readthedocs.io/en/stable/wrapperkernels.html)&nbsp;which allows CircuitPython's REPL to communicate with Jupyter's code cells.

If you have a [Git client installed](https://learn.adafruit.com/windows-tools-for-the-electrical-engineer?view=all#git-plus-command-line-tools), clone the CircuitPython kernel by running the following in your terminal:

```auto
git clone https://github.com/adafruit/circuitpython_kernel.git
```

Alternatively, you can download the latest release of the _circuitpython\_kernel_ from GitHub as a .zip file and unzip it.

[Download Latest CircuitPython_Kernel Version](https://github.com/adafruit/circuitpython_kernel/archive/master.zip)
![](https://cdn-learn.adafruit.com/assets/assets/000/056/829/medium800/circuitpython_release.png?1530543423)

In your terminal or command prompt, navigate to the folder directory:

```auto
cd circuitpython_kernel/
```

Install the Kernel by running:

```auto
python3 setup.py install
```

Finally, let's install the CircuitPython Kernel into Jupyter:

```auto
python3 -m circuitpython_kernel.install
```

Info: 

The kernel&nbsp;_should_ be installed, but let's verify that by running:

![](https://cdn-learn.adafruit.com/assets/assets/000/056/830/medium800/circuitpython_jupyter-kernelspec-list.png?1530543830)

If **circuitpython** appears as an available kernel, the installation was successful.&nbsp;

# CircuitPython with Jupyter Notebooks

## Installing on Windows

 **Don't have a Python installation on your computer?** If you're new to all this, the Jupyter Project recommends installing [Anaconda](https://www.continuum.io/downloads), which installs Python, the Jupyter Notebook, and other commonly used packages for scientific computing and data science.

![](https://cdn-learn.adafruit.com/assets/assets/000/056/810/medium800/circuitpython_anaconda.png?1530534400)

You will need to know if you are running 32-bit WIndows or 64-bit Windows.&nbsp;To find out if your computer is running a 32-bit or 64-bit version of Windows in Windows 7,&nbsp; Open **System** by clicking the **Start button** , right-clicking **Computer** , and then clicking **Properties**. On Windows 10, type **about** in the search box on your taskbar, and then select **About your PC**.&nbsp;Look under&nbsp; **PC** &nbsp;for&nbsp; **System type** &nbsp;to see if you're running a 32-bit or 64-bit version of Windows.&nbsp;

Select the proper download for your system (32-bit or 64-bit). The file will download, probably into your **Downloads** folder. You can start the installation by clicking the downloaded file icon in the browser or using File Explorer, going to the **Downloads** folder and double clicking the file with a name like **Anaconda3-5.2.0-Windows-x86\_64.exe**. You'll see the installation run:

![](https://cdn-learn.adafruit.com/assets/assets/000/056/811/medium800/circuitpython_anaconda2.png?1530534990)

Click **Next** then **All Users** (if you have administrative privileges, otherwise click **Just me** ).

The installer will ask where to put the installation. Unless you have a specific place, accept the default which is&nbsp; **C:\ProgramData\Anaconda3** or similar by clicking **Next**.

You'll see the screen below.

![](https://cdn-learn.adafruit.com/assets/assets/000/056/812/medium800/circuitpython_anaconda3.png?1530535233)

It is recommended you keep the **Advanced Options** the way the installer wants them unless you have been told by an instructor otherwise or have other Python software installed and are knowledgeable about multiple installations. Click **Install**.

Anaconda will now install, it'll take a few minutes depending on your system speed. You may see some windows open and close, that is typical.

When done, the installer will show **Completed**. Click **Next**.

The installer will ask if you want to install the free, open source editor Microsoft VSCode. You will need administrator privileges if you want to install this. Or you can skip. If you are more of a power user, **Install** is good. If you are not the admin of the machine, click **Skip**.

The installer will then show you this screen:

![](https://cdn-learn.adafruit.com/assets/assets/000/056/813/medium800/circuitpython_anaconda4.png?1530536345)

If you want to learn more, keep the check boxes clicked. Click **Finish**.

On Windows 10, you'll have new **Start Menu** items under **Anaconda**. Click the **Start Menu** , then scroll down to **Anaconda** then expand by clicking **Anaconda** and you'll see several items.

![](https://cdn-learn.adafruit.com/assets/assets/000/056/814/medium800/circuitpython_jupyter.png?1530536746)

 **Anaconda Prompt** works like a Windows command window (an interactive prompt). It uses Windows (DOS-like) type commands, not Unix/Linux commands.

Clicking **Jupyter Notebook** will open a command prompt window and a browser window with Jupyter.

![](https://cdn-learn.adafruit.com/assets/assets/000/056/815/medium800/circuitpython_jupyter2.png?1530536998)

# Installing the CircuitPython Kernel

Kernels are the main logic groups inside Jupyter. The default Windows installation only installs Python 3. We'll need to get a bit more code for the CircuitPython notebook.

First we need to download the latest kernel file from the Adafruit GitHub website.

Click the button below or in your web browser, go to&nbsp;**[https://github.com/adafruit/circuitpython\_kernel](https://github.com/adafruit/circuitpython_kernel)**

[Download the latest CircuitPython_Kernnel from GitHub](https://github.com/adafruit/circuitpython_kernel/archive/master.zip)
Save the file in your Windows **Documents** folder.

![](https://cdn-learn.adafruit.com/assets/assets/000/057/015/medium800/circuitpython_x1.png?1530645797)

Next use your Windows File Explorer to go to the **Documents** &nbsp;folder.

Double-click the **circuitpython\_kernel-master.zip** file. Copy the directory in the ZIP file named **circuitpython\_kernel-master** into the **Documents** folder ("unzipping it" so we can use the files).

Now the files for the kernel are in your user's **Documents** &nbsp;folder in the c **ircuitpython\_kernel-master** &nbsp;directory.

Run Anaconda Prompt by going to **Start Button** -\> **Anaconda** -\> **Anaconda Prompt**. You'll get the terminal like window below:

![](https://cdn-learn.adafruit.com/assets/assets/000/056/824/medium800/circuitpython_ap1.png?1530541436)

You will probably have another username besides Mike. Note what that username is as you'll need it in the next steps.

Type the following commands in Anaconda Prompt:

`cd \Users\yourusername\Documents\circuitpython_kernel-master`

Your prompt (the part which is before the typing area) should show that you are in the directory. If you do not see that you are in the **circuitpython\_kernel-master** directory, double check your typing and try again.

![](https://cdn-learn.adafruit.com/assets/assets/000/057/029/medium800/circuitpython_z1.png?1530649345)

If all is ok, then we'll start installing!

Type:

`python setup.py install`

![](https://cdn-learn.adafruit.com/assets/assets/000/057/032/medium800/circuitpython_z5.png?1530649885)

You'll get a lot of output and hopefully it should show success. if there is an error about something not found, ensure you are in the directory with all the code from the ZIP file. If there is an error about epylint (like above), that's ok right now, your install should still work ok.

After the **setup.py** installs, type:

`python -m circuitpython_kernel.install`

and you should see the text:

![](https://cdn-learn.adafruit.com/assets/assets/000/057/030/medium800/circuitpython_z2.png?1530649618)

Time to verify everything is ok! Type in the prompt window:

`jupyter kernelspec list`

which should print:

![](https://cdn-learn.adafruit.com/assets/assets/000/057/031/medium800/circuitpython_z3.png?1530649689)

If you see both **circuitpython** and **python3** , you're set.

# CircuitPython with Jupyter Notebooks

## Using Jupyter Notebooks

We included some examples to get you started with using Jupyter Notebooks with the [Circuit Playground Express](https://www.adafruit.com/product/3333)&nbsp;since it has lots of inputs and outputs to play with as is.&nbsp;

# Mac or Linux

You can start a Jupyter notebook by running the following in a terminal

```auto
jupyter notebook
```

# Windows

First, ensure there are no Jupyter terminal windows open (use the Ctrl-C key in the window to close one if you have one open. We'll start a new copy of Jupyter:

**Start Button -\> Anaconda -\> Anaconda Prompt**

The Anaconda command terminal will open. we need to go where the files were unzipped:

You'll have the **(base) C:\Users\_yourusername_\>** prompt.

Type the following:

`cd Downloads\CPK\circuitpython_kernel-master`

There type `jupyter notebook`

# Load up the Example Folder

OK no matter what you're running, you should have a screen like the one below on your Anaconda prompt window and the same Jupyter screen below as the mac/linux users.

![](https://cdn-learn.adafruit.com/assets/assets/000/056/831/medium800/circuitpython_jn.png?1530543987)

If you started this from the directory we were using earlier (_circuitpython-kernel_), you'll see an&nbsp;_examples/&nbsp;_folder:

![](https://cdn-learn.adafruit.com/assets/assets/000/056/994/medium800/circuitpython_Pasted_Image_7_3_18__1_21_PM.png?1530638504)

 **If you don't see this folder,** &nbsp;click the upload button on the Notebook Dashboard

![](https://cdn-learn.adafruit.com/assets/assets/000/056/991/medium800/circuitpython_Pasted_Image_7_3_18__1_12_PM.png?1530638010)

Navigate to the folder for _circuitpython-kernel (_or _circuitpython-kernel-master_) you cloned or downloaded earlier. Navigate to the examples folder. Then, click upload on the imported notebook on your dashboard.&nbsp;

Locate the **CPX\_Blinka.ipynb** notebook but **don't** click it yet!

![](https://cdn-learn.adafruit.com/assets/assets/000/056/992/medium800/circuitpython_resized_notebook.png?1530638199)

# Plug In The CircuitPython Board
At this point, you'll want to plug in your board and verify it shows up as a mountable drive called&nbsp; **CIRCUITPY**

![circuitpython_CIRCUITPY-DISK.png](https://cdn-learn.adafruit.com/assets/assets/000/055/303/medium640/circuitpython_CIRCUITPY-DISK.png?1528753069)

If you don't see the **CIRCUITPY&nbsp;** drive, [install CircuitPython on your board](https://learn.adafruit.com/welcome-to-circuitpython/installing-circuitpython).

Warning: 

# Launch the CPX Blinka Example

OK now we're ready.

Click on&nbsp; **CPX\_Blinka.ipynb&nbsp;** to launch the Jupyter Notebook and the CircuitPython Kernel.&nbsp;

![circuitpython_blinka-click.png](https://cdn-learn.adafruit.com/assets/assets/000/055/302/medium640/circuitpython_blinka-click.png?1528753025)

Make sure your notebook is running the **CircuitPython** &nbsp;kernel by clicking _change kernel -\> CircuitPython:_

![](https://cdn-learn.adafruit.com/assets/assets/000/056/989/medium800/circuitpython_upload.png?1530636833)

When you launch notebooks using the CircuitPython-Kernel, it'll search the serial ports on your computer and connect to your Adafruit CircuitPython board.&nbsp;

![](https://cdn-learn.adafruit.com/assets/assets/000/057/014/medium800/circuitpython_kernelrepl.png?1530645708)

The **CPX\_Blinka** notebook should open. We're going to use the notebook and learn about Jupyter in the process.

The first cell should be highlighted. Each of these cells hold media (like pictures, equations, or rich text) or code, executable by your CircuitPython board. Click&nbsp; **run&nbsp;** in the toolbar or press **shift+enter** to run the cell:

![](https://cdn-learn.adafruit.com/assets/assets/000/055/304/medium800thumb/circuitpython_2018-06-11_18-00-35.jpg?1528754563)

As you go use the&nbsp; **run** command to move&nbsp;the cells, you should see the Circuit Playground's LED turn on when the cell containing&nbsp;`cpx_led.value = True` is executed:

 **Congrats - you just ran your first Jupyter Notebook!**

_Want to try another example?_ Navigate to the Notebook Dashboard and navigate to the&nbsp;_examples/_ folder.

Next, we'll learn how to create our own Jupyter Notebook.

## Troubleshooting
### 

Open your terminal to view the errors from the kernel. If the problem persists, copy the output from the terminal and [file an issue on the GitHub Repository for this project](https://github.com/adafruit/circuitpython_kernel/issues).

### 

There's an issue with your serial connection which is preventing the kernel from opening a serial connection with your board. Make sure your drivers are installed correctly and the CircuitPython board is displayed as&nbsp; **CIRCUITPY** drive in file explorer.

# CircuitPython with Jupyter Notebooks

## Creating Jupyter Notebooks

Let's walk through creating a new Jupyter Notebook using the CircuitPython Kernel.

## Creating a CircuitPython Jupyter Notebook
Warning: 

To create a new Jupyter Notebook for use with the circuitpython kernel, navigate to the Notebook Dashboard and click&nbsp; **New -\> Notebook -\> CircuitPython&nbsp;**

![](https://cdn-learn.adafruit.com/assets/assets/000/055/305/medium800thumb/circuitpython_newnotebook.jpg?1528755209)

Your notebook should connect to your board using the CircuitPython kernel. You can verify this by checking two things on the toolbar: the&nbsp;_Trusted_ and CircuitPython badges should display

![](https://cdn-learn.adafruit.com/assets/assets/000/056/995/medium800/circuitpython_trusted.png?1530638558)

## Navigating Jupyter Notebooks
All Jupyter Notebooks contain three areas: menu, toolbar, and the code cells

![](https://cdn-learn.adafruit.com/assets/assets/000/055/307/medium800/circuitpython_New_CircuitPython_Notebook-tour-ui.png?1528755653)

The M **enu** contains actions on the notebook and the kernel. You can add/remove cells, restart the kernel, and perform file operations, all from the menubar.&nbsp;

The **toolbar** has buttons for common actions within the notebook. You can switch cell modes (between code/text), run/restart cells, and save the Notebook state.&nbsp;

 **Cells** are text-input fields which can be executed (the code gets sent to the kernel) and display output. They're the interactive part of Jupyter, and a bit different from any other software out there. There are three different types of cells, we'll cover into the first two in this guide:

- Code Cells
- Markdown Cells
- Raw Cells

## Jupyter Modes
Like the Vim Editor, there are two different keyboard input modes in Jupyter which control whether you're controlling the notebook (**command mode)** or editing the code (**edit mode)&nbsp;**within a cell.

![](https://cdn-learn.adafruit.com/assets/assets/000/055/408/medium800thumb/circuitpython_switchmodes.jpg?1528906024)

 **Command Mode** &nbsp;allows you to perform notebook actions such as switching cell-type (code to markdown), executing code on the kernel, stopping the kernel and inserting cells. You can get into command mode by pressing&nbsp;the&nbsp; **enter&nbsp;key** , the cell will turn blue (green on newer versions of Jupyter).

To enter&nbsp; **edit mode** , press the escape key on your keyboard. The cell's border will turn blue and you're able to type into the text-box of the cell (multi-line code _is_ supported).&nbsp;

## Using Cells
_Want to write some CircuitPython code?&nbsp;_You'll need a code cell. You'll be able to execute the code cell using the run button on the toolbar or by pressing **shift+enter**

To create new code cell, click&nbsp; **Insert -\> Insert Cell Below&nbsp;** (or Above)

![](https://cdn-learn.adafruit.com/assets/assets/000/055/407/medium800thumb/circuitpython_codecellinsert.jpg?1528905770)

Code Cells are also capable of returning errors from the CircuitPython REPL so you'll know when your code is broken.

![](https://cdn-learn.adafruit.com/assets/assets/000/055/406/medium800thumb/circuitpython_syntaxerror.jpg?1528905653)

_Want to document your progress by adding text, images, rich media, or even equations?&nbsp;_ You'll want to use a Markdown Cell.&nbsp;&nbsp;

You can switch to a markdown cell by clicking the&nbsp;_cell selection_&nbsp;dropdown on the toolbar and clicking _Markdown_

![](https://cdn-learn.adafruit.com/assets/assets/000/055/404/medium800thumb/circuitpython_cells2.jpg?1528905465)

Not familiar with the features of Markdown? [Check out the&nbsp;_Working with Markdown Cells_ example notebook](https://nbviewer.jupyter.org/github/jupyter/notebook/blob/master/docs/source/examples/Notebook/Working%20With%20Markdown%20Cells.ipynb)

## Managing Notebooks
![](https://cdn-learn.adafruit.com/assets/assets/000/055/403/medium800thumb/circuitpython_Kapture_2018-06-13_at_11.55.25.jpg?1528905337)

Finished writing in your notebook? Even if you've closed the tab where you're working in, the notebook is still running.

From your dashboard, navigate to the&nbsp; **Running&nbsp;** tab. You'll see your active notebooks, click&nbsp; **Shutdown&nbsp;** to shut the kernel down.

Now that we've learned about creating and editing a Jupyter Notebook, we're going to learn how to share it with others.&nbsp;

## Troubleshooting the Kernel
If your notebook is unresponsive, _don't disconnect your board just yet.&nbsp;_Code sometimes fails or freezes. Luckily, Jupyter Notebooks have controls for kernels built in so you can stop any errors/infinite loops you encounter.

First, we can interrupt the kernel's code execution by clicking&nbsp; **kernel -\> interrupt**. This'll retain the program execution state and variables which may have been created earlier.&nbsp;

![](https://cdn-learn.adafruit.com/assets/assets/000/055/391/medium800/circuitpython_interrupt_kernel.png?1528837860)

_Still frozen?&nbsp;_Try restarting your kernel. There are three options for this:

![](https://cdn-learn.adafruit.com/assets/assets/000/055/392/medium800/circuitpython_kernel_reset.png?1528838132)

- **Restart:** Restarts the kernel and loses state (variables, etc). The board resets its connection with the kernel. The output from the previous run will be retained along with the cells.
- **Restart & Clear Output:** You can also restart (as explained above) and clear the output of your cells. The code/markdown within the cell will be retained.
- **Restart & Run All:&nbsp;** Restarts the kernel, loses variable states, reconnects the board, and runs all cells.&nbsp;

Still no luck? Having a critical issue?

You can&nbsp; **reconnect** (this will re-establish a connection with the board) or **shutdown&nbsp;** the kernel (however, all variables will be lost if you choose this).

![](https://cdn-learn.adafruit.com/assets/assets/000/055/393/medium800/circuitpython_reconnect_shutdown.png?1528838740)

# CircuitPython with Jupyter Notebooks

## Sharing Jupyter Notebooks

Ready to share your notebook with the world?&nbsp;We're going to highlight a few different options for sharing it with anyone.

## Sharing Locally
You can export to a variety of formats from within the notebook by navigating to&nbsp; **File -\> Download As**. You'll want to export your notebook as a Jupyter Interactive Notebook (`.ipynb`&nbsp;file format) if you'd like the person you're sharing it with to interact with the notebook.

![](https://cdn-learn.adafruit.com/assets/assets/000/055/416/medium800thumb/circuitpython_export-notebook.jpg?1528909260)

# Sharing Online
Want the other person to preview your notebook before opening it? There are a few options for giving the other person a chance to view it online before downloading the file, we like using GitHub and nbviewer.

## GitHub&nbsp;
Have a GitHub account? If you drop a Jupyter notebook (`.ipynb`) file in your repository, it'll be automatically rendered directly in the browser. It works for&nbsp;both public and private repositories.

![](https://cdn-learn.adafruit.com/assets/assets/000/055/415/medium800/circuitpython_githosting.png?1528907914)

[Here's an example of our _CPX\_Blinka.ipynb_ rendered on GitHub on the official CircuitPython\_Kernel repository](https://github.com/adafruit/circuitpython_kernel/blob/master/examples/CPX_Blinka.ipynb)

## nbviewer
The [nbviewer](https://nbviewer.jupyter.org/) is a Jupyter notebook viewer service hosted by Jupyter. Just give it a URL and it'll render it instantly!

It's the simplest way of having your notebook rendered online.

![](https://cdn-learn.adafruit.com/assets/assets/000/055/411/medium800thumb/circuitpython_nbviewer.jpg?1528907760)

While neither of these two methods of sharing notebooks will _run_ CircuitPython code, but they can be uploaded to a users' local Jupyter installation.


## Related Guides

- [Adafruit Feather M0 Express](https://learn.adafruit.com/adafruit-feather-m0-express-designed-for-circuit-python-circuitpython.md)
- [Adafruit Metro M0 Express](https://learn.adafruit.com/adafruit-metro-m0-express.md)
- [Adafruit Trinket M0](https://learn.adafruit.com/adafruit-trinket-m0-circuitpython-arduino.md)
- [Adafruit Circuit Playground Express](https://learn.adafruit.com/adafruit-circuit-playground-express.md)
- [Adafruit Metro M4 Express featuring ATSAMD51](https://learn.adafruit.com/adafruit-metro-m4-express-featuring-atsamd51.md)
- [Introducing ItsyBitsy M0 Express](https://learn.adafruit.com/introducing-itsy-bitsy-m0.md)
- [Adafruit Feather M4 Express](https://learn.adafruit.com/adafruit-feather-m4-express-atsamd51.md)
- [A Logger for CircuitPython](https://learn.adafruit.com/a-logger-for-circuitpython.md)
- [LED Matrix Scoreboard](https://learn.adafruit.com/led-matrix-scoreboard.md)
- [No-Touch Hand Wash Timer for Circuit Playground Express and CLUE](https://learn.adafruit.com/no-touch-hand-wash-timer-for-cpx-and-clue.md)
- [Best Beginner Boards for Teachers](https://learn.adafruit.com/best-beginner-boards-for-teachers.md)
- [Crickit Powered Minerva Owl Robot](https://learn.adafruit.com/crickit-powered-owl-robot.md)
- [Gemma Color Touch Pendant Necklace](https://learn.adafruit.com/gemma-color-touch-pendant-necklace.md)
- [USB Foot Switch Controller in CircuitPython](https://learn.adafruit.com/usb-foot-switch-circuit-python.md)
- [Tappy Robotic Hand](https://learn.adafruit.com/robotic-tapping-hand-with-cpx.md)
- [Chilled Drinkibot](https://learn.adafruit.com/chilled-drinkibot.md)
- [Capacitive Touch Pulsing Heart](https://learn.adafruit.com/3d-printed-heart-capacitive-touch.md)
- [NeoPixel LED Mickey Ears](https://learn.adafruit.com/neopixel-led-mickey-ears.md)
- [Make It Hot or Cold](https://learn.adafruit.com/make-it-hot-or-cold.md)
- [Paper-Craft Crystal Gem Lantern](https://learn.adafruit.com/paper-craft-crystal-gem-lantern.md)
- [Neon LED Signs](https://learn.adafruit.com/led-neon-signs.md)
- [Glowing Lotus Flower - Electronic Origami for Beginners](https://learn.adafruit.com/glowing-lotus-flower-electronic-origami-for-beginners.md)
