# Adafruit IO Basics: AirLift

## Overview

![](https://cdn-learn.adafruit.com/assets/assets/000/075/090/medium800/adafruit_io_airlift_io.png?1556653271)

**[Adafruit IO is the easiest way to stream, log, and interact with your data](http://io.adafruit.com).**&nbsp;It's built from the ground up to be easy to use - we do the hard stuff so you can focus on the fun stuff.

If you want to the best way of bringing your project online - **combine** &nbsp; **Adafruit IO and AirLift**!&nbsp;Our ESP32-based AirLift boards and breakouts are the newest way to connect your project to [Adafruit IO, our internet-of-things service for everyone](http://io.adafruit.com)!

**Before you continue with this guide,&nbsp;** you should run through the guide for your connecting specific board or breakout to the Internet. This guide assumes your AirLift hardware is set up, connected to the Internet, and ready to connect to Adafruit IO.

## Why use AirLift?

Having WiFi managed by a separate chip means your code is simpler, you don't have to cache socket data, or compile in & debug an SSL library. With AirLift, you can send basic but powerful socket-based commands over 8MHz SPI for high speed data transfer.&nbsp;The ESP32 can handle all the heavy lifting of connecting to a WiFi network and transferring data from a site, even if its using the latest TLS/SSL encryption (it has root certificates pre-burned in).

[The firmware on board is a slight variant of the Arduino WiFiNINA core, which works great,](https://github.com/adafruit/nina-fw)&nbsp;and **our Adafruit IO Libraries for [CircuitPython](https://github.com/adafruit/Adafruit_CircuitPython_AdafruitIO) and [Arduino](https://github.com/adafruit/Adafruit_IO_Arduino) support AirLift!**

## External AirLift

If you already have a project which uses a popular microcontroller (like the ATMega328 or ATSAMD51), you can easily add WiFi by using an externally connected AirLift module.

### Adafruit AirLift – ESP32 WiFi Co-Processor Breakout Board

[Adafruit AirLift – ESP32 WiFi Co-Processor Breakout Board](https://www.adafruit.com/product/4201)
Give your plain ol' microcontroller project a _lift_ with the Adafruit AirLift - a breakout board that lets you use the powerful ESP32 as a WiFi co-processor. You probably have your favorite microcontroller (like the ATmega328 or ATSAMD51), awesome peripherals and lots of libraries....

In Stock
[Buy Now](https://www.adafruit.com/product/4201)
[Related Guides to the Product](https://learn.adafruit.com/products/4201/guides)
![Top view of Adafruit AirLift Breakout Board.](https://cdn-shop.adafruit.com/640x480/4201-08.jpg)

## AirLift all-in-One Boards

_Don't want to add extra hardware to your project?_&nbsp;Consider grabbing a board which has an ESP32 WiFi co-processor built-in!

### Adafruit Metro M4 Express AirLift (WiFi) - Lite

[Adafruit Metro M4 Express AirLift (WiFi) - Lite](https://www.adafruit.com/product/4000)
Give your next project a lift with _AirLift_ - our witty name for the ESP32 co-processor that graces this Metro M4. You already know about the&nbsp; **Adafruit Metro M4** &nbsp;featuring the&nbsp; **Microchip ATSAMD51** , with it's 120MHz Cortex M4 with...

In Stock
[Buy Now](https://www.adafruit.com/product/4000)
[Related Guides to the Product](https://learn.adafruit.com/products/4000/guides)
![Adafruit Metro M4 Airlift Lite dev board with SAMD51 an ESP32 Wifi Co-processor.](https://cdn-shop.adafruit.com/640x480/4000-08.jpg)

### Adafruit PyPortal - CircuitPython Powered Internet Display

[Adafruit PyPortal - CircuitPython Powered Internet Display](https://www.adafruit.com/product/4116)
 **PyPortal** , our easy-to-use IoT device that allows you to create all the things for the “Internet of Things” in minutes. Make custom touch screen interface GUIs, all open-source, and Python-powered using&nbsp;tinyJSON / APIs to get news, stock, weather, cat photos,...

Out of Stock
[Buy Now](https://www.adafruit.com/product/4116)
[Related Guides to the Product](https://learn.adafruit.com/products/4116/guides)
![Front view of a Adafruit PyPortal - CircuitPython Powered Internet Display with a pyportal logo image on the display. ](https://cdn-shop.adafruit.com/640x480/4116-00.jpeg)

# Adafruit IO Basics: AirLift

## Adafruit IO Setup

 **If you have not already registered an&nbsp;Adafruit IO account,** [visit the registration page and sign up](https://accounts.adafruit.com/users/sign_up).&nbsp;

**Once you have registered an account,** [**navigate** to Adafruit IO and **log into your account**](http://io.adafruit.com). You'll be directed to the Home page.

**Click View AIO Key** on the right-hand sidebar to r **etrieve your Adafruit IO Username and Active Key**.

**Write these down somewhere safe** - you'll need them later!

![](https://cdn-learn.adafruit.com/assets/assets/000/074/705/medium800thumb/sensors_weather_3d_printing_adafruit_io_username_and_password.jpg?1555948268)

# Adafruit IO Basics: AirLift

## CircuitPython

To easily connect AirLift hardware to Adafruit IO using&nbsp; **CircuitPython** , we've written an [Adafruit IO CircuitPython module](https://github.com/adafruit/Adafruit_CircuitPython_AdafruitIO/) to provide simple interaction with the Adafruit IO HTTP and MQTT APIs.

## Install CircuitPython
Some of the CircuitPython compatible boards come with CircuitPython installed. Others are&nbsp;_CircuitPython-ready_, but need to have it installed. As well, you may want to update the version of CircuitPython already installed on your board. The steps are the same for installing and updating.&nbsp;

- To **install (or update) your CircuitPython board**, [follow this page and come back here when you've successfully installed (or updated) CircuitPython.](https://learn.adafruit.com/welcome-to-circuitpython/installing-circuitpython)

## Internet Connect!
Once you have CircuitPython setup and libraries installed, you can get your project connected to the Internet.

To do this, you'll be editing CircuitPython code and will need an editor. We suggest using **Mu** , a lightweight text editor with support for CircuitPython built-in.&nbsp;

**Click the button below to get instructions on how to install the Mu Editor.**

[Install Mu Editor](https://learn.adafruit.com/welcome-to-circuitpython/installing-mu-editor)
 **If you have not yet connected your board to the Internet, follow one of the guides below** and come back when you've successfully connected to the internet:

- **If you have an AirLift All-in-One board** (like the Metro M4 WiFi or PyPortal), [follow this page to connect to the internet](https://learn.adafruit.com/adafruit-pyportal/internet-connect).
- **If you have an externally connected AirLift** , [follow this page to connect to the internet](https://learn.adafruit.com/adafruit-airlift-breakout/internet-connect).

## Create Your settings.toml File

CircuitPython works with WiFi-capable boards to enable you to make projects that have network connectivity. This means working with various passwords and API keys. As of&nbsp;[CircuitPython 8](https://circuitpython.org/downloads), there is support for a&nbsp; **settings.toml** &nbsp;file. This is a file that is stored on your&nbsp; **CIRCUITPY** &nbsp;drive, that contains all of your secret network information, such as your SSID, SSID password and any API keys for IoT services. It is designed to separate your sensitive information from your&nbsp; **code.py** &nbsp;file so you are able to share your code without sharing your credentials.

CircuitPython previously used a&nbsp; **secrets.py&nbsp;** file for this purpose. The&nbsp; **settings.toml&nbsp;** file is quite similar.

## CircuitPython&nbsp; **settings.toml&nbsp;** File

This section will provide a couple of examples of what your&nbsp; **settings.toml&nbsp;** file should look like, specifically for CircuitPython WiFi projects in general.

The most minimal&nbsp; **settings.toml** &nbsp;file must contain your WiFi SSID and password, as that is the minimum required to connect to WiFi. Copy this example, paste it into your&nbsp; **settings.toml** , and update:

- `your_wifi_ssid`
- `your_wifi_password`

```auto
CIRCUITPY_WIFI_SSID = "your_wifi_ssid"
CIRCUITPY_WIFI_PASSWORD = "your_wifi_password"
```

Many CircuitPython network-connected projects on the Adafruit Learn System involve using Adafruit IO. For these projects, you must&nbsp;_also_&nbsp;include your Adafruit IO username and key. Copy the following example, paste it into your settings.toml file, and update:

- `your_wifi_ssid`
- `your_wifi_password`
- `your_aio_username`
- `your_aio_key`

```auto
CIRCUITPY_WIFI_SSID = "your_wifi_ssid"
CIRCUITPY_WIFI_PASSWORD = "your_wifi_password"
ADAFRUIT_AIO_USERNAME = "your_aio_username"
ADAFRUIT_AIO_KEY = "your_aio_key"
```

Some projects use different variable names for the entries in the&nbsp; **settings.toml&nbsp;** file. For example, a project might use&nbsp;`ADAFRUIT_AIO_ID`&nbsp;in the place of&nbsp;`ADAFRUIT_AIO_USERNAME`.&nbsp; **If you run into connectivity issues, one of the first things to check is that the names in the settings.toml file match the names in the code.**

## CircuitPython Library Installation

To interface your AirLift breakout/board with and the Internet - you'll need to install a few CircuitPython libraries on your board.

First make sure you are running the&nbsp;[latest version of Adafruit CircuitPython](https://github.com/adafruit/circuitpython/releases)&nbsp;for your board.

Next you'll need to install the necessary libraries&nbsp;to use the hardware--carefully follow the steps to find and install these libraries from&nbsp;[Adafruit's CircuitPython library bundle](https://github.com/adafruit/Adafruit_CircuitPython_Bundle)&nbsp;matching your version of CircuitPython.&nbsp;

Before continuing - make sure your board's&nbsp; **lib** &nbsp;folder has the following files and folders **&nbsp;** copied over.

- **adafruit\_io**
- **adafruit\_esp32spi**
- **adafruit\_bus\_device**
- **adafruit\_requests.mpy**
- **neopixel.mpy**

## CircuitPython Usage

Copy the following code to your&nbsp; **code.py** &nbsp;file on your microcontroller:

https://github.com/adafruit/Adafruit_CircuitPython_AdafruitIO/blob/main/examples/adafruit_io_http/adafruit_io_simpletest_esp32spi.py

Connect to the serial monitor to see the output. It should look something like the following:

```
code.py output:
Sending 13 to temperature feed...
Data sent!
Retrieving data from temperature feed...
Data from temperature feed:  13
```

 **If the REPL outputs an `AttributeError`&nbsp;instead of running the code -** &nbsp;you'll need to manually configure the AirLift module pin connections.

To do this, **edit the following lines of code** by replacing the pin values of&nbsp;`esp32_cs`, `esp32_ready`, and `esp32_reset`&nbsp;with the pinout from your AirLift module:

```
except AttributeError:
    esp32_cs = DigitalInOut(board.D9)
    esp32_ready = DigitalInOut(board.D10)
    esp32_reset = DigitalInOut(board.D5)
```

 **Congrats** - you've sent a value to an Adafruit IO Feed, and retrieved it back!

## Adafruit IO Usage

While you sent data to Adafruit IO, how do you know that Adafruit IO is receiving this data?

One of the most important places to check is the **Adafruit IO Monitor Page**. This page displays incoming data from your active feeds and any errors which might've occurred.&nbsp;

To do this, log into Adafruit IO and [click here to navigate to the monitor page](https://io.adafruit.com/monitor).

If everything worked correctly, **you should see a random value sent to the temperature feed when the code is run**.

![adafruit_io_brubell_on_Adafruit_IO.png](https://cdn-learn.adafruit.com/assets/assets/000/074/627/medium640/adafruit_io_brubell_on_Adafruit_IO.png?1555697464)

## Next Steps

You've successfully connected your CircuitPython board to Adafruit IO, _now what?_

_Would you like to add a sensor to your project? What about displaying your data on a graph? Control a motor from the Internet? Set the colors of a RGB LED from the Internet? Monitor&nbsp;the temperature and humidity of a room from across the world?_

**To continue your educational journey with Adafruit IO** , [click here to visit the Adafruit IO Basics series for guides about the topics listed and more!](https://learn.adafruit.com/series/adafruit-io-basics)

Need some inspiration for your next project? We have _lots&nbsp;_of Adafruit IO-specific guides on the Adafruit Learning System. [Click here to view more projects and guides for Adafruit IO](https://learn.adafruit.com/category/adafruit-io).

# Adafruit IO Basics: AirLift

## Arduino IO Library

Warning: 

If you're using a non-SAMD board (such as an Adafruit Metro or Arduino Uno) with an AirLift Co-Processor, **you will not be able to use Adafruit IO Arduino with an AirLift Breakout/Shield/FeatherWing** &nbsp;(it's a large library and will not fit on these boards).

**For using these boards securely with Adafruit IO, [we suggest the Adafruit MQTT Library](https://github.com/adafruit/Adafruit_MQTT_Library)** instead of Adafruit IO Arduino. We've [added a usage example for AirLift Co-Processors here](https://github.com/adafruit/Adafruit_MQTT_Library/blob/master/examples/adafruitio_secure_airlift/adafruitio_secure_airlift.ino).

## Installation
Installing Adafruit IO on Arduino requires **four** libraries: **Adafruit's WiFiNINA** ,&nbsp; **Adafruit IO** , **Adafruit MQTT** , and **ArduinoHttpClient**.

**If you have these libraries&nbsp;already installed** &nbsp;- you will need to update them to the versions listed on this page for use with AirLift.

To install the **Adafruit WiFiNINA&nbsp;** library, click the link below to download the library as a zip file:

[Download Adafruit WiFiNINA ZIP ](https://github.com/adafruit/WiFiNINA/archive/master.zip)
To install this library, **navigate to the Add .ZIP Library option** in the **Sketch -\> Include Library** menu and select the zip file from the file browser.

![](https://cdn-learn.adafruit.com/assets/assets/000/075/858/medium800/adafruit_io_Include_Library_and_Sketch_and_Menubar.png?1558534534)

Enter&nbsp; **Arduino HTTP** &nbsp;into the search box, and click&nbsp; **Install** &nbsp;on the&nbsp; **ArduinoHttpClient** &nbsp;library option to&nbsp; **install version 0.4.0 or higher**.

You are going to install the next few libraries using the Arduino&nbsp; **Library Manager**. Navigate to the&nbsp; **Manage Libraries...** &nbsp;option in the&nbsp; **Sketch -\> Include Library&nbsp;** menu.

[![adafruit_io_library_menu.png](https://cdn-learn.adafruit.com/assets/assets/000/034/832/medium800/adafruit_io_library_menu.png?1471361448)](https://learn.adafruit.com/assets/34832)

Enter&nbsp; **Arduino HTTP** &nbsp;into the search box, and click&nbsp; **Install** &nbsp;on the&nbsp; **ArduinoHttpClient** &nbsp;library option to&nbsp; **install version 0.4.0 or higher**.

[![adafruit_io_Library_Manager.png](https://cdn-learn.adafruit.com/assets/assets/000/075/080/medium800/adafruit_io_Library_Manager.png?1556643812)](https://learn.adafruit.com/assets/75080)

Enter&nbsp; **Adafruit MQTT** &nbsp;into the search box, and click&nbsp; **Install** &nbsp;on the&nbsp; **Adafruit MQTT** &nbsp;library option to&nbsp; **install version 1.0.0 or higher**.

[![adafruit_io_Library_Manager.png](https://cdn-learn.adafruit.com/assets/assets/000/075/081/medium800/adafruit_io_Library_Manager.png?1556643895)](https://learn.adafruit.com/assets/75081)

Enter&nbsp; **Adafruit IO Arduino** &nbsp;into the search box, and click&nbsp; **Install** &nbsp;on the&nbsp; **Adafruit IO Arduino** &nbsp;library option to&nbsp; **install version 3.1.0 or higher**.

# Adafruit IO Basics: AirLift

## Usage

Now that we have installed all of the dependencies, we can try to run one of the Adafruit IO example sketches.

Navigate to the&nbsp;`adafruitio_00_publish`&nbsp;sketch by **opening the** &nbsp; **File -\> Examples -\> Adafruit IO Arduino** &nbsp; **menu**.

[![adafruit_io_select_example.png](https://cdn-learn.adafruit.com/assets/assets/000/034/838/medium800/adafruit_io_select_example.png?1471364050)](https://learn.adafruit.com/assets/34838)

Click on the&nbsp;`config.h`&nbsp;tab, and **replace the placeholders with your Adafruit IO info and WiFi connection credentials**.

![](https://cdn-learn.adafruit.com/assets/assets/000/075/082/medium800/adafruit_io_adafruitio_00_publish_-_config_h___Arduino_1_8_8.png?1556644475)

Since we are using AirLift with Adafruit IO Arduino, **make sure to** &nbsp; **_uncomment_ the line&nbsp;`#define USE_AIRLIFT`&nbsp;line in the sketch&nbsp;** so it looks like the following:

```
// uncomment the following line if you are using airlift
#define USE_AIRLIFT
```

_If you do not see this line,_&nbsp; **upgrade** the Adafruit IO Arduino Library to the latest version.

**If you're using an externally connected AirLift module (such as a breakout)**, you'll need to configure your ESP32's pins in the section of `config.h` where the ESP32 pins are defined:

![](https://cdn-learn.adafruit.com/assets/assets/000/075/083/medium800/adafruit_io_adafruitio_00_publish_-_config_h___Arduino_1_8_8.png?1556644967)

 **If you're using an AirLift All-in-One board, you don't need to perform pin configuration** - Adafruit IO does this for you automatically based on the board's ESP pin definitions.

Then, **compile and upload the sketch to your board.**

## Usage
Once the sketch is uploaded, you can now **click the serial monitor icon to view the output of the sketch.**

If everything goes as expected, you should see counter values being sent to Adafruit IO.

- _If you are not connecting to Adafruit IO_, check your WiFi and Adafruit IO credentials in&nbsp; **config.h** &nbsp;and try uploading your sketch again using the process above.

![adafruit_io_Pasted_Image_4_30_19__1_28_PM.png](https://cdn-learn.adafruit.com/assets/assets/000/075/085/medium640/adafruit_io_Pasted_Image_4_30_19__1_28_PM.png?1556645345)

![adafruit_io__dev_cu_usbmodem141211__Adafruit_Metro_M4_AirLift_Lite__SAMD51__.png](https://cdn-learn.adafruit.com/assets/assets/000/075/087/medium640/adafruit_io__dev_cu_usbmodem141211__Adafruit_Metro_M4_AirLift_Lite__SAMD51__.png?1556645669)

 **Congrats** &nbsp;- you've sent a value to an Adafruit IO Feed!

## Adafruit IO Usage

While you sent data to Adafruit IO, how do you know that Adafruit IO is receiving this data?

One of the most important places to check is the **Adafruit IO Monitor Page**. This page displays incoming data from your active feeds and any errors which might've occurred.&nbsp;

To do this, log into Adafruit IO and&nbsp;[navigate to the monitor page.](https://io.adafruit.com/monitor)

If everything worked correctly, **you should see an _incrementing_ value sent to the _counter_ feed while the code is running**.

![adafruit_io_live_data.png](https://cdn-learn.adafruit.com/assets/assets/000/075/088/medium640/adafruit_io_live_data.png?1556645770)

## Next Steps

You've successfully connected your Arduino board to Adafruit IO - so,&nbsp;_now what?_

_Would you like to add a sensor to your project? What about displaying your data on a graph? Control a motor from the internet? Set the colors of a RGB LED from the internet? Monitor&nbsp;the temperature and humidity of a room from across the world?_

**To continue your educational journey with Adafruit IO** , [click here to visit the Adafruit IO Basics series for guides about the topics listed and more!](https://learn.adafruit.com/series/adafruit-io-basics)

Need some inspiration for your next project? We have _lots&nbsp;_of Adafruit IO-specific guides on the Adafruit Learning System. [Click here to view more projects and guides for Adafruit IO](https://learn.adafruit.com/category/adafruit-io).

# Adafruit IO Basics: AirLift

## Adafruit IO FAQ 

### 

 **Possibly** - you can check&nbsp;[IO status on the Adafruit Status page](https://status.adafruit.com/).&nbsp;

### 

Visit [https://io.adafruit.com/support](https://io.adafruit.com/support) and click " **Contact Adafruit IO Support"**

### 

Visit&nbsp;[https://io.adafruit.com/support](https://io.adafruit.com/support)&nbsp;and click " **Contact Adafruit IO Support"**

### 

First, check if the issue you're having already exists on the GitHub repository for Adafruit IO WipperSnapper by [visiting the "Issues" page](https://github.com/adafruit/Adafruit_Wippersnapper_Arduino/issues).

If it does not exist, [please file a new bug report on the GitHub repository for Adafruit IO WipperSnapper.](https://github.com/adafruit/Adafruit_Wippersnapper_Arduino/issues/new?assignees=&amp;labels=&amp;projects=&amp;template=bug_report.md&amp;title=)

### 

There's a&nbsp;[monitor page built-into Adafruit IO](https://io.adafruit.com/monitor)&nbsp;which provides a live view of incoming data and error messages. Keep this page open while you send data to your Adafruit IO devices to monitor data and errors.&nbsp;

### 

Absolutely - the same API that drives our user interface is available to you. [We provide documentation so you can build a library in your favorite language to talk to IO](https://io.adafruit.com/api/docs/#!/v2)

### 

The data your store with IO is yours to manage and control. You can download it all anytime and we will never sell or give it away to another company. We feel strongly enough about this that we put it in [our IoT Bill of Rights](https://www.adafruit.com/iotbor/).

### 

If you have any questions or issues with Adafruit IO, post up in the&nbsp;[Adafruit IO Forums](https://forums.adafruit.com/viewforum.php?f=56)&nbsp;or chat with Adafruit staff and community members in real-time on the&nbsp;[adafruit-io channel on the Adafruit Discord server](https://discord.gg/adafruit).


## Featured Products

### Adafruit Metro M4 Express AirLift (WiFi) - Lite

[Adafruit Metro M4 Express AirLift (WiFi) - Lite](https://www.adafruit.com/product/4000)
Give your next project a lift with _AirLift_ - our witty name for the ESP32 co-processor that graces this Metro M4. You already know about the&nbsp; **Adafruit Metro M4** &nbsp;featuring the&nbsp; **Microchip ATSAMD51** , with it's 120MHz Cortex M4 with...

In Stock
[Buy Now](https://www.adafruit.com/product/4000)
[Related Guides to the Product](https://learn.adafruit.com/products/4000/guides)
### Adafruit AirLift – ESP32 WiFi Co-Processor Breakout Board

[Adafruit AirLift – ESP32 WiFi Co-Processor Breakout Board](https://www.adafruit.com/product/4201)
Give your plain ol' microcontroller project a _lift_ with the Adafruit AirLift - a breakout board that lets you use the powerful ESP32 as a WiFi co-processor. You probably have your favorite microcontroller (like the ATmega328 or ATSAMD51), awesome peripherals and lots of libraries....

In Stock
[Buy Now](https://www.adafruit.com/product/4201)
[Related Guides to the Product](https://learn.adafruit.com/products/4201/guides)
### Adafruit PyPortal - CircuitPython Powered Internet Display

[Adafruit PyPortal - CircuitPython Powered Internet Display](https://www.adafruit.com/product/4116)
 **PyPortal** , our easy-to-use IoT device that allows you to create all the things for the “Internet of Things” in minutes. Make custom touch screen interface GUIs, all open-source, and Python-powered using&nbsp;tinyJSON / APIs to get news, stock, weather, cat photos,...

Out of Stock
[Buy Now](https://www.adafruit.com/product/4116)
[Related Guides to the Product](https://learn.adafruit.com/products/4116/guides)
### USB cable - USB A to Micro-B

[USB cable - USB A to Micro-B](https://www.adafruit.com/product/592)
This here is your standard A to micro-B USB cable, for USB 1.1 or 2.0. Perfect for connecting a PC to your Metro, Feather, Raspberry Pi or other dev-board or microcontroller

Approximately 3 feet / 1 meter long

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

## Related Guides

- [Adafruit PyPortal - IoT for CircuitPython](https://learn.adafruit.com/adafruit-pyportal.md)
- [Adafruit AirLift - ESP32 WiFi Co-Processor Breakout](https://learn.adafruit.com/adafruit-airlift-breakout.md)
- [Adafruit Metro M4 Express AirLift (WiFi)](https://learn.adafruit.com/adafruit-metro-m4-express-airlift-wifi.md)
- [PyPortal IoT Plant Monitor with AWS IoT and CircuitPython](https://learn.adafruit.com/pyportal-iot-plant-monitor-with-aws-iot-and-circuitpython.md)
- [Getting Started with Braille Output for CircuitPython REPL](https://learn.adafruit.com/getting-started-braille-output-circuitpython-repl.md)
- [PyPortal Calculator using the Displayio UI Elements](https://learn.adafruit.com/pyportal-calculator-using-the-displayio-ui-elements.md)
- [Portable PyPortal](https://learn.adafruit.com/portable-pyportal.md)
- [Quickstart: Adafruit IO WipperSnapper ](https://learn.adafruit.com/quickstart-adafruit-io-wippersnapper.md)
- [PyPortal Winamp MP3 Player](https://learn.adafruit.com/pyportal-winamp-mp3-player.md)
- [Smart Mirror with PyPortal](https://learn.adafruit.com/smart-mirror-with-pyportal.md)
- [Quickstart - Raspberry Pi RP2040 with BLE and CircuitPython](https://learn.adafruit.com/quickstart-raspberry-pi-rp2040-with-ble-and-circuitpython.md)
- [PyPortal WFH Busy Sounds Simulator](https://learn.adafruit.com/pyportal-wfh-busy-sounds-simulator.md)
- [PyPortal MQTT Sensor Node/Control Pad for Home Assistant](https://learn.adafruit.com/pyportal-mqtt-sensor-node-control-pad-home-assistant.md)
- [A Floppy Thumb Drive with a Color File Icon Display](https://learn.adafruit.com/a-floppy-thumb-drive-with-a-color-file-icon-display.md)
- [PyPortal Wake-Up Light Alarm Clock](https://learn.adafruit.com/pyportal-wake-up-light.md)
- [Purple Air AQI Display](https://learn.adafruit.com/purple-air-aqi-display.md)
- [Daily UV Index PyPortal Display](https://learn.adafruit.com/pyportal-uv-index.md)
- [PyPortal Halloween Countdown](https://learn.adafruit.com/pyportal-halloween-countdown.md)
