# Adafruit IO Basics: Analog Output

## Overview

![](https://cdn-learn.adafruit.com/assets/assets/000/039/368/medium800thumb/adafruit_io_analog_out.jpg?1487276229)

This guide is part of a series of guides that cover the basics of using Adafruit IO. It will show you how to dim a LED from Adafruit IO using any modern web browser.

If you haven't worked your way through the Adafruit IO feed and dashboard basics guides, you should do that before continuing with this guide so you have a basic understanding of Adafruit IO.

* [Adafruit IO Basics: Feeds](../../../adafruit-io-basics-feeds)
* [Adafruit IO Basics: Dashboards](../../../adafruit-io-basics-dashboards) 

You should go through the setup guides associated with your selected set of hardware, and make sure you have internet connectivity with the device before continuing. The following links will take you to the guides for your selected platform.

* [Adafruit Feather HUZZAH ESP8266 Setup Guide](../../../../adafruit-io-basics-esp8266-arduino)

If you have went through all of the prerequisites for your selected hardware, you are now ready to move on to the Adafruit IO setup steps that are common between all of the hardware choices for this project. Let's get started!

# Adafruit IO Basics: Analog Output

## Adafruit IO Setup

The first thing you will need to do is to login to [Adafruit IO](https://io.adafruit.com) and visit the **Settings** page.

Click the **VIEW AIO KEY** button to retrieve your key.



![](https://cdn-learn.adafruit.com/assets/assets/000/039/358/medium800/adafruit_io_00_keyclick.png?1487271812)

A window will pop up with your Adafruit IO. Keep a copy of this in a safe place. We'll need it later.

![](https://cdn-learn.adafruit.com/assets/assets/000/039/359/medium800/adafruit_io_01_key.png?1487271836)

## Creating the Analog&nbsp;Feed

Next, you will need to create a feed called **Analog**. If you need help getting started with creating feeds on Adafruit IO, check out the&nbsp;[Adafruit IO Feed Basics&nbsp;guide](../../../../adafruit-io-basics-feeds).

![](https://cdn-learn.adafruit.com/assets/assets/000/039/360/medium800/adafruit_io_Screen_Shot_2017-02-16_at_9.24.39_AM.png?1487271895)

## Adding the Slider&nbsp;Block

Next, add a new Slider&nbsp;Block to a new or existing dashboard. Name the block whatever you would like, and set _ **min value to 0** &nbsp;and&nbsp; **max value to 1024** _. Make sure you have selected the **_Analog_** &nbsp;feed as the data source for the slider.

If you need help getting started with Dashboards on Adafruit IO, check out the&nbsp;[Adafruit IO Dashboard Basics guide](../../../../adafruit-io-basics-dashboards).

![](https://cdn-learn.adafruit.com/assets/assets/000/039/362/medium800/adafruit_io_Screen_Shot_2017-02-16_at_2.06.09_PM.png?1487272048)

When you are finished editing the form, click _Create Block_ to add the new block to the dashboard.

![](https://cdn-learn.adafruit.com/assets/assets/000/039/361/medium800/adafruit_io_Screen_Shot_2017-02-16_at_2.06.42_PM.png?1487272035)

Next, we will look at wiring the circuit.

# Adafruit IO Basics: Analog Output

## Arduino Wiring

## Arduino Wiring
You will need the following parts for this tutorial:

* **1x** Adafruit IO compatible Feather
* **2x** jumper wires
* **1x** 560 ohm resistor
* **1x** 10mm LED

You will need to connect the following pins to the LED and resistor:

* Feather **GND** to LED **cathode** (short leg)
* Feather **Pin 5** to one leg of the **560 ohm resistor**
* LED **anode** (long leg) to the second leg of the **560 ohm resistor**

**Note:** Resistors are *not* polarized, so the 560 ohm resistor can be connected to the circuit in either direction.

![](https://cdn-learn.adafruit.com/assets/assets/000/039/338/medium800/adafruit_io_00_wiring.png?1487196059)

Next, we're going to set up our Arduino.

# Adafruit IO Basics: Analog Output

## Arduino Setup

You should go through the setup guides associated with your selected set of hardware, and make sure you have internet connectivity with the device before continuing. The following links will take you to the guides for your selected platform.

* [Adafruit Feather HUZZAH ESP8266 Setup Guide](../../../../adafruit-io-basics-esp8266-arduino)

You will need to make sure you have at least **version 2.3.1** of the Adafruit IO Arduino library installed before continuing.

![](https://cdn-learn.adafruit.com/assets/assets/000/039/365/medium800/adafruit_io_Screen_Shot_2017-02-16_at_2.41.36_PM.png?1487274121)

For this example you will need to open the **adafruitio\_09\_analog_out** example in the **Adafruit IO Arduino** library.

![](https://cdn-learn.adafruit.com/assets/assets/000/039/364/medium800/adafruit_io_Screen_Shot_2017-02-16_at_2.09.21_PM.png?1487272201)

Next, we will look at the network configuration options in the sketch.

# Adafruit IO Basics: Analog Output

## Arduino Network Config

To configure the network settings, click on the **config.h** tab in the sketch. You will need to set your Adafruit IO username in the **IO_USERNAME** define, and your Adafruit IO key in the **IO_KEY** define.

![](https://cdn-learn.adafruit.com/assets/assets/000/039/317/medium800/adafruit_io_03_config.png?1487185264)

## WiFi Config

WiFi is enabled by default in **config.h** so if you are using one of the supported WiFi boards, you will only need to modify the **WIFI_SSID** and **WIFI_PASS** options in the **config.h** tab.

![](https://cdn-learn.adafruit.com/assets/assets/000/039/318/medium800/adafruit_io_04_wifi.png?1487185900)

## FONA Config

If you wish to use the FONA 32u4 Feather to connect to Adafruit IO, you will need to first comment out the WiFi support in **config.h**

![](https://cdn-learn.adafruit.com/assets/assets/000/039/319/medium800/adafruit_io_05_wifi_disable.png?1487186164)

Next, remove the comments from both of the FONA config lines in the FONA section of **config.h** to enable FONA support.

![](https://cdn-learn.adafruit.com/assets/assets/000/039/320/medium800/adafruit_io_06_fona.png?1487186409)

## Ethernet Config

If you wish to use the Ethernet Wing to connect to Adafruit IO, you will need to first comment out the WiFi support in **config.h**

![](https://cdn-learn.adafruit.com/assets/assets/000/039/321/medium800/adafruit_io_05_wifi_disable.png?1487186577)

Next, remove the comments from both of the Ethernet config lines in the Ethernet section of **config.h** to enable Ethernet Wing support.

![](https://cdn-learn.adafruit.com/assets/assets/000/039/322/medium800/adafruit_io_07_ethernet.png?1487186729)

Next, we will look at how the example sketch works.

# Adafruit IO Basics: Analog Output

## Arduino Code

The **adafruitio\_09\_analog_out** example uses **pin 5** by default, and that can be modified by changing the **LED_PIN** define at the top of the sketch. This pin should correspond to a pin on your feather with PWM capability.


```
/************************ Example Starts Here *******************************/

// this should correspond to a pin with PWM capability
#define LED_PIN 5
```

The next chunk of code sets up an Adafruit IO Feed instance for a feed called **analog**.

```
// set up the 'analog' feed
AdafruitIO_Feed *analog = io.feed("analog");
```

In the setup function, we attach a function called **handleMessage** to the **analog** feed that will be called whenever your device receives messages for that feed.

The code will wait until you have a valid connection to Adafruit IO before continuing with the sketch. If you have any issues connecting, check **config.h** for any typos in your username or key.

```
void setup() {

  // start the serial connection
  Serial.begin(115200);

  // wait for serial monitor to open
  while(! Serial);

  // connect to io.adafruit.com
  Serial.print("Connecting to Adafruit IO");
  io.connect();

  // set up a message handler for the 'analog' feed.
  // the handleMessage function (defined below)
  // will be called whenever a message is
  // received from adafruit io.
  analog-&gt;onMessage(handleMessage);

  // wait for a connection
  while(io.status() &lt; AIO_CONNECTED) {
    Serial.print(".");
    delay(500);
  }

  // we are connected
  Serial.println();
  Serial.println(io.statusText());

}
```

Next, we have the main `loop()` function. The first line of the loop function calls `io.run();` this line will need to be present at the top of your loop in every sketch. It helps keep your device connected to Adafruit IO, and processes any incoming data.

```
void loop() {
  // io.run(); is required for all sketches.
  // it should always be present at the top of your loop
  // function. it keeps the client connected to
  // io.adafruit.com, and processes any incoming data.
  io.run();
}
```

The final chunk of code is the **handleMessage** function. This is the function that is called whenever the **analog** feed gets a message.

We use the `data-&gt;toInt()` function to convert the incoming data to an **int**, and set the state of the **LED_PIN** to that value using `analogWrite()`.

```
// this function is called whenever an 'analog' message
// is received from Adafruit IO. it was attached to
// the analog feed in the setup() function above.
void handleMessage(AdafruitIO_Data *data) {

  // convert the data to integer
  int reading = data-&gt;toInt();

  Serial.print("received &lt;- ");
  Serial.println(reading);
  analogWrite(LED_PIN, reading);

}
```

Upload the sketch to your board, and open the Arduino Serial Monitor. Your board should now connect to Adafruit IO.

```
Connecting to Adafruit IO....

Adafruit IO connected.
```

Change the value of the slider on your Adafruit IO dashboard, and you should see something resembling the following in the Arduino Serial Monitor.

```
received &lt;- 940
received &lt;- 290
received &lt;- 230
received &lt;- 110
received &lt;- 0
received &lt;- 90
received &lt;- 320
received &lt;- 630
received &lt;- 840
received &lt;- 1020
```

You should also see your LED change brightness depending on the value you send.

![](https://cdn-learn.adafruit.com/assets/assets/000/039/369/medium800thumb/adafruit_io_analog_out.jpg?1487276255)

# Adafruit IO Basics: Analog Output

## Python Wiring

We're going to use a combination of the Adafruit IO Client Library and Adafruit's CircuitPython to control a Raspberry Pi over Adafruit IO.&nbsp;

### Part: Raspberry Pi 3 - Model B+
quantity: 1
The Raspberry Pi is a small linux board compatible with Adafruit IO projects. 
[Raspberry Pi 3 - Model B+](https://www.adafruit.com/product/3775)

If you're following along with a&nbsp;[Raspberry Pi](https://www.adafruit.com/category/105), we're going to use a T-Cobbler Plus for the IO Basics Projects. This add-on prototyping board lets you easily connect a Raspberry Pi (Raspberry Pi Model Zero, A+, B+, Pi 2, Pi 3) to a solderless breadboard:

### Part: Assembled Pi T-Cobbler Plus
quantity: 1
GPIO Breakout - Pi A+, B+, Pi 2, Pi 3, Zero.
[Assembled Pi T-Cobbler Plus](https://www.adafruit.com/product/2028)

Want to create an automatic fish-feeder, a door-lock system with vibration-feedback, or maybe you want to just chain a bunch of lights and motors together and control them with Adafruit IO?

_You'll need a few PWM outputs._

The Raspberry Pi is limited to one PWM output. While we could use this PWM output for the servo, we're going to use the [Adafruit 16-Channel 12-bit PWM/Servo driver](https://www.adafruit.com/product/815). This board can be used to control up to 16 PWM outputs. This means you can have a bunch of servos, DC motors, LED lights, or even a combination of both.

### Part: Adafruit 16-Channel 12-bit PWM/Servo Driver
quantity: 1
Adafruit PCA9685 Breakout.
[Adafruit 16-Channel 12-bit PWM/Servo Driver](https://www.adafruit.com/product/815)

![](https://cdn-learn.adafruit.com/assets/assets/000/058/728/medium800/adafruit_io_resized-for-learn.png?1533739465)

You will need to make the following connections between the Pi and the PCA9685:

- **Pi 3.3V** to **PCA9685 VCC**
- **Pi GND** to **PCA9685 GND**
- **Pi SDA** to **PCA9685 SDA**
- **Pi SCL** to **PCA9685 SCL**

Make the remaining connections:

- **PCA9685 PWM Pin (on channel 15)&nbsp;**to one leg of the&nbsp; **560 ohm resistor**
- **Pi GND&nbsp;** to&nbsp; **LED Cathode&nbsp;** (_short_ LED leg)
- **LED Anode** (_l__ong LED leg)&nbsp;_to the other leg of the&nbsp; **560 ohm resistor**
  - **note:&nbsp;** resistors are&nbsp;_not&nbsp;_polarized, so the 560 ohm resistor can be connected to the circuit in either direction.

Next, we're going to set up our Pi.

# Adafruit IO Basics: Analog Output

## Python Setup

Warning: 

If you're following along with a Raspberry Pi, Beaglebone or any other supported small linux computer, we'll use a special library called&nbsp;[**adafruit\_blinka**](https://pypi.org/project/Adafruit-Blinka/)&nbsp;([named after Blinka, the CircuitPython mascot](https://www.adafruit.com/?q=blinka)) to provide the layer that translates the CircuitPython hardware API to whatever library the Linux board provides. It's CircuitPython, on Pi!

If you haven't set up Blinka and the Adafruit IO Python Library yet on your Raspberry Pi, follow our guide:

- [Blinka and Adafruit IO Setup](https://learn.adafruit.com/adafruit-io-basics-digital-input/python-setup)

# Enable I2C

We use two pins on the Pi (SDA/SCL) to communicate over I2c with the&nbsp;PCA9685. You only have to do this step&nbsp;_once_ per Raspberry Pi, the I2C interface is disabled by default.

- [Enabling I2C](https://learn.adafruit.com/adafruits-raspberry-pi-lesson-4-gpio-setup/configuring-i2c)

Once you're done with this and have rebooted, verify you have the SPI devices with the command:

`sudo i2cdetect -y 1`

If your PCA9685 Breakout is wired up correctly, it'll show up at 0x40:

![](https://cdn-learn.adafruit.com/assets/assets/000/058/729/medium800/adafruit_io_i2cdetect.png?1533740692)

## Installing the CircuitPython-PCA9685 Library

You'll also need to install a library to communicate with the PWM breakout. Since we're using Adafruit Blinka (CircuitPython), we can install CircuitPython libraries straight to our Raspberry Pi. In this case, we're going to&nbsp;install the CircuitPython-PCA9685 library.

Run the following command to **install the CircuitPython-PCA9685 library** :

`pip3 install adafruit-circuitpython-PCA9685`

# Adafruit IO Basics: Analog Output

## Python Code

Before you run the code, you'll need to&nbsp;set `ADAFRUIT_IO_KEY` and `ADAFRUIT_IO_USERNAME` to the key and username associated with your Adafruit IO account.&nbsp;

```
# Set to your Adafruit IO username.
# (go to https://accounts.adafruit.com to find your username)
ADAFRUIT_IO_USERNAME = 'YOUR_USERNAME'

# Create an instance of the REST client.
aio = Client(ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY)
```

The _analog\_output&nbsp;_example uses the PCA9685's channel 15 by default. If you wish to change it, you can modify the `PCA_CHANNEL`&nbsp;variable at the top of the code to correspond with a different PWM channel of the PCA9685.

```
# Set the PCA channel to use.
PCA_CHANNEL = 15
```

Inside the `while True` loop, we grab the analog feed value and compare it to the previous analog feed value.

We wan't the LED's brightness to remain set to the previous feed value, unless changed.

To do this, we first check it's a new value (the values are not equal). Then, we print that we've received a new value, map the feed range to a write-able value range, and set the PCA's channel to this value.&nbsp;If we don't receive a new value, we simply store the previous value in the `prev_read` variable.

```
while True:
    # grab the `analog` feed value
    analog_read = aio.receive(analog.key)
    if (analog_read.value != prev_read):
        print('received &lt;- ', analog_read.value)
        # map the analog value from 0 - 1023 to 0 - 65534
        analog_value = map_range(int(analog_read.value), 0, 1024, 0, 65534)
        # set the LED to the mapped feed value
        pca.channels[PCA_CHANNEL].duty_cycle = int(analog_value)
    prev_read = analog_read.value
```

Run the code by entering the following in your terminal:

`python3 analog_output.py`

Change the value of the slider on your Adafruit IO dashboard, and you should see something resembling the following in the terminal:

```
$ python3 analog-out.py
received &lt;-  300
received &lt;-  500
received &lt;-  100
```

You should also see your LED change brightness depending on the value you send.

## Code
https://github.com/adafruit/io-client-python/blob/master/examples/basics/analog_output.py

# Adafruit IO Basics: Analog Output

## Adafruit IO FAQ

## Encountering an issue with your Adafruit IO Arduino Project?

If you're having an issue compiling, connecting, or troubleshooting your project, check this page first.

_Don't see your issue?_&nbsp;&nbsp;[Post up on the Adafruit IO Forum with your issue](https://forums.adafruit.com/viewforum.php?f=56).

### **I encounter the following error when compiling my sketch:**

**`  fatal error: Adafruit_MQTT.h: No such file or directory, `** `#include "Adafruit_MQTT.h"`

The Adafruit IO Arduino library is dependent on our Adafruit IO MQTT Library.

To resolve this error, from the Arduino IDE, navigate to the **Manage Libraries...** option in the **Sketch -\> Include Library** menu.

![adafruit_io_library_menu.png](https://cdn-learn.adafruit.com/assets/assets/000/065/260/medium640/adafruit_io_library_menu.png?1541529617)

To resolve this error, from the Arduino IDE, navigate to the **Manage Libraries...** option in the **Sketch -\> Include Library** menu.

![adafruit_io_mqtt_install.png](https://cdn-learn.adafruit.com/assets/assets/000/065/259/medium640/adafruit_io_mqtt_install.png?1541529632)

### 

Your board is not connecting to Adafruit IO, but why? Let's find out:

**First** , check in&nbsp;`config.h`&nbsp;that you have the correct&nbsp;`IO_USERNAME`,&nbsp;`IO_KEY`,&nbsp;`WIFI_SSID`, and&nbsp;`WIFI_PASS`&nbsp;are set correctly.&nbsp;

**Next** , we're going to modify the while loop which waits for an IO connection in your sketch. Change the line in the status check loop from&nbsp;`Serial.println(.);`to&nbsp;`Serial.println(io.statusText());`

`// wait for a connection`  
`while(io.status() < AIO_CONNECTED) {`  
`Serial.println(io.statusText());`  
`delay(500);`  
`}`

Verify and re-upload the sketch. If you're receiving a&nbsp; **Network disconnected&nbsp;** error message, the board is not able to talk to the internet. Re-check your hardware, connections, and router settings.&nbsp;

If it's still not showing&nbsp; **Adafruit IO connected** ,&nbsp;check the&nbsp;[IO status on the Adafruit Status page](https://status.adafruit.com/)&nbsp;to make sure the service is online.

### 

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

### 

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;


## Featured Products

### Raspberry Pi 5 - 4 GB RAM

[Raspberry Pi 5 - 4 GB RAM](https://www.adafruit.com/product/5812)
The Raspberry Pi 5&nbsp;is the newest Raspberry Pi computer, and the Pi Foundation knows you can always make a good thing _better_! And what could make the Pi 5 better than the 4? How about a&nbsp;_faster_ processor, USB 3.0 ports, and an updated Gigabit Ethernet chip with PoE...

In Stock
[Buy Now](https://www.adafruit.com/product/5812)
[Related Guides to the Product](https://learn.adafruit.com/products/5812/guides)
### Adafruit ESP32-S2 TFT Feather - 4MB Flash, 2MB PSRAM, STEMMA QT

[Adafruit ESP32-S2 TFT Feather - 4MB Flash, 2MB PSRAM, STEMMA QT](https://www.adafruit.com/product/5300)
We've got a new machine here at Adafruit, it can uncover your deepest desires. Don't believe me? I'll turn it on right now to prove it to you! What, you want unlimited mozzarella sticks? OK well, that's not something we can provide. But we can provide your...

Out of Stock
[Buy Now](https://www.adafruit.com/product/5300)
[Related Guides to the Product](https://learn.adafruit.com/products/5300/guides)
### Diffused Red 5mm LED (25 pack)

[Diffused Red 5mm LED (25 pack)](https://www.adafruit.com/product/299)
Need some indicators? We are big fans of these diffused red LEDs, in fact we use them exclusively in our kits. They are fairly bright so they can be seen in daytime, and from any angle. They go easily into a breadboard and will add that extra zing to your project.

- Pack of 25...

In Stock
[Buy Now](https://www.adafruit.com/product/299)
[Related Guides to the Product](https://learn.adafruit.com/products/299/guides)
### Half-Size Breadboard with Mounting Holes

[Half-Size Breadboard with Mounting Holes](https://www.adafruit.com/product/4539)
This cute 3.2″ × 2.1″ (82 × 53mm) solderless half-size breadboard has four bus lines&nbsp;and 30 rows of pins, our favorite size of solderless breadboard for projects. You get a whoppin' **400 tie points**! [Plug in...](http://adafruit.com/feather)

In Stock
[Buy Now](https://www.adafruit.com/product/4539)
[Related Guides to the Product](https://learn.adafruit.com/products/4539/guides)
### Adafruit 16-Channel 12-bit PWM/Servo Driver - I2C interface

[Adafruit 16-Channel 12-bit PWM/Servo Driver - I2C interface](https://www.adafruit.com/product/815)
You want to make a cool robot, maybe a hexapod walker, or maybe just a piece of art with a lot of moving parts. Or maybe you want to drive a lot of LEDs with precise PWM output. Then you realize that your microcontroller has a limited number of PWM outputs! What now? You could give up OR you...

In Stock
[Buy Now](https://www.adafruit.com/product/815)
[Related Guides to the Product](https://learn.adafruit.com/products/815/guides)
### Adafruit Pi T-Cobbler Plus Kit Breakout for 2x20 Raspberry Pi

[Adafruit Pi T-Cobbler Plus Kit Breakout for 2x20 Raspberry Pi](https://www.adafruit.com/product/1989)
The Raspberry Pi A+/B+/Pi 2/Pi 3/Zero has landed on the Maker World like a 40-GPIO pinned, quad-USB ported, credit card sized bomb of DIY joy. And while you can use most of our great Model B accessories by hooking up our [downgrade cable,](https://www.adafruit.com/product/1986)...

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

[Breadboarding wire bundle](https://www.adafruit.com/product/153)
75 flexible stranded core wires with stiff ends molded on in red, orange, yellow, green, blue, brown, black and white. These are a major improvement over the "box of bent wires" that are sometimes sold with breadboards, and faster than stripping your own solid core wires. Makes...

In Stock
[Buy Now](https://www.adafruit.com/product/153)
[Related Guides to the Product](https://learn.adafruit.com/products/153/guides)
### Adafruit IO+ 1 Year Subscription Card

[Adafruit IO+ 1 Year Subscription Card](https://www.adafruit.com/product/3980)
It's the Internet of the Things!&nbsp;[Adafruit IO+](https://io.adafruit.com/plus) is the easiest way to stream, log, and interact with your data. Whether you're interesting in&nbsp;datalogging or communicating with your microcontroller over the web, Adafruit IO is our cloud...

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

## Related Guides

- [Adafruit ESP32-S2 TFT Feather](https://learn.adafruit.com/adafruit-esp32-s2-tft-feather.md)
- [Adafruit IO Basics: Feeds](https://learn.adafruit.com/adafruit-io-basics-feeds.md)
- [Ikea Vindriktning Hack with QT Py ESP32-S3 and Adafruit IO](https://learn.adafruit.com/ikea-vindriktning-hack-with-qt-py-esp32-s3-and-adafruit-io.md)
- [Pico W PiCowBell Case](https://learn.adafruit.com/pico-w-picowbell-case.md)
- [Integrating Color Sensors with itsaSNAP and HomeKit](https://learn.adafruit.com/integrating-color-sensors-with-itsasnap-and-homekit.md)
- [How to Add a New Board to WipperSnapper](https://learn.adafruit.com/how-to-add-a-new-board-to-wippersnapper.md)
- [Raspberry Pi Wifi-Controlled Cat Laser Toy](https://learn.adafruit.com/raspberry-pi-wifi-controlled-cat-laser-toy.md)
- [Using Piezo Buzzers with WipperSnapper](https://learn.adafruit.com/using-piezo-buzzers-with-wippersnapper.md)
- [Feather TFT STEMMA Case](https://learn.adafruit.com/feather-tft-stemma-case.md)
- [Adafruit IO Basics: Analog Input](https://learn.adafruit.com/adafruit-io-basics-analog-input.md)
- [Quickstart: Adafruit IO WipperSnapper ](https://learn.adafruit.com/quickstart-adafruit-io-wippersnapper.md)
- [Adafruit 16 Channel Servo Driver with Raspberry Pi](https://learn.adafruit.com/adafruit-16-channel-servo-driver-with-raspberry-pi.md)
- [itsaSNAP Apple Health Status Board](https://learn.adafruit.com/itssnap-apple-fitness-status-board.md)
- [Mini Weather Station ESP32-S3 TFT](https://learn.adafruit.com/mini-weather-station-esp32-s2-tft.md)
- [Using Zapier with Adafruit IO](https://learn.adafruit.com/using-zapier-with-adafruit-io.md)
