# Adafruit IO Basics: Servo

## Overview

![](https://cdn-learn.adafruit.com/assets/assets/000/039/588/medium800thumb/adafruit_io_servo.jpg?1487708489)

This guide is part of a series of guides that cover the basics of using Adafruit IO. It will show you how to wirelessly control a servo from Adafruit IO.

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: Servo

## 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/579/medium800/adafruit_io_00_keyclick.png?1487686537)

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/580/medium800/adafruit_io_01_key.png?1487686574)

## Creating the Servo&nbsp;Feed

Next, you will need to create a feed called **Servo**. 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/581/medium800/adafruit_io_Screen_Shot_2017-02-21_at_9.15.49_AM.png?1487686596)

## 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 180** _. Make sure you have selected the **_Servo_** &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/582/medium800/adafruit_io_Screen_Shot_2017-02-21_at_9.17.30_AM.png?1487686685)

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/583/medium800/adafruit_io_Screen_Shot_2017-02-21_at_9.18.11_AM.png?1487686713)

Next, we will look at wiring the circuit.

# Adafruit IO Basics: Servo

## Wiring

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

* **1x** Adafruit IO compatible Feather
* **3x** jumper wires
* **1x** micro servo

You will need to connect the following pins to the servo using the three jumper wires:

* Feather **GND** to the **brown** or **black** servo wire
* Feather **3V** to the **red** servo wire
* Feather **Pin 2** to the **yellow** servo wire

![](https://cdn-learn.adafruit.com/assets/assets/000/059/227/medium800/sensors_servo-3v-rz.png?1534367720)

# Adafruit IO Basics: Servo

## 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.4.3** of the Adafruit IO Arduino library installed before continuing.

![](https://cdn-learn.adafruit.com/assets/assets/000/039/590/medium800/adafruit_io_Screen_Shot_2017-02-21_at_4.00.55_PM.png?1487710865)

For this example, you will need to open the **adafruitio\_16\_servo** example in the **Adafruit IO Arduino** library.

![](https://cdn-learn.adafruit.com/assets/assets/000/039/584/medium800/adafruit_io_Screen_Shot_2017-02-21_at_9.29.51_AM.png?1487687431)

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

# Adafruit IO Basics: Servo

## 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: Servo

## Arduino Code

The **adafruitio\_16\_servo** example uses **pin 2** by default, and that can be modified by changing the **SERVO_PIN** define at the top of the sketch.


```auto
// pin used to control the servo
#define SERVO_PIN 2
```

The next chunk of code sets up an instance of the Servo class, and also an instance of the Adafruit IO Feed class for a feed called **servo**.

```auto
// create an instance of the servo class
Servo servo;

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

In the setup function, we attach a function called **handleMessage** to the **servo_feed**, which will be called whenever your device receives messages for that feed. We also tell the servo class which pin we are using with the `servo.attach()` method.

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.

```auto
void setup() {

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

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

  // tell the servo class which pin we are using
  servo.attach(SERVO_PIN);

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

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

  // wait for a connection
  while(io.status() < 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.

```auto
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 **servo_feed** gets a message.

We use the `data-&gt;toInt()` function to convert the incoming data to an **int**, and set the angle of the servo to that value using `servo-&gt;write()`. We also check to make sure that the incoming angle value is not less than 0, or greater than 180.

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

  // convert the data to integer
  int angle = data->toInt();

  // make sure we don't exceed the limit
  // of the servo. the range is from 0
  // to 180.
  if(angle < 0)
    angle = 0;
  else if(angle > 180)
    angle = 180;

  servo.write(angle);

}
    
```

If you would like your servo to switch directions, you can subtract the angle from 180, and write the result to the servo.

```auto
 servo.write(180 - angle);
```

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

```auto
Connecting to Adafruit IO....

Adafruit IO connected.
```

Change the slider value on your Adafruit IO dashboard, and you should see the servo change position depending on the value you send.

![](https://cdn-learn.adafruit.com/assets/assets/000/039/589/medium800thumb/adafruit_io_servo.jpg?1487709661)

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

# Adafruit IO Basics: Servo

## 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:

### Assembled Pi T-Cobbler Plus - GPIO Breakout

[Assembled Pi T-Cobbler Plus - GPIO Breakout](https://www.adafruit.com/product/2028)
 **This is the assembled version of the Pi T-Cobbler Plus. &nbsp;It only works with the Raspberry Pi Model Zero, A+, B+, Pi 2, Pi 3, Pi 4, and Pi 5!** (Any Pi with 2x20 connector)  
  
The Raspberry Pi has landed on the Maker World like a 40-GPIO pinned, quad-USB ported,...

In Stock
[Buy Now](https://www.adafruit.com/product/2028)
[Related Guides to the Product](https://learn.adafruit.com/products/2028/guides)
![Angled shot of Assembled Pi T-Cobbler Plus next to GPIO ribbon cable](https://cdn-shop.adafruit.com/640x480/2028-07.jpg)

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.&nbsp;_This guide requires only one for the servo.

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.

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

Out of Stock
[Buy Now](https://www.adafruit.com/product/815)
[Related Guides to the Product](https://learn.adafruit.com/products/815/guides)
![Adafruit 16-Channel 12-bit PWM/Servo Driver with I2C interface](https://cdn-shop.adafruit.com/640x480/815-05.jpg)

We are powering the servo from an external 5V 2A switching power supply connected to the terminal block on the breakout board via a DC adapter.&nbsp;

### 

Switching directions on the servo can cause a lot of noise on the supply, and the servo(s) will cause the voltage to fluctuate significantly, which is a bad situation for the Pi. It's highly recommended to use an external 5V supply with servo motors to avoid problems caused by voltage drops on the Pi's 5V line.

### Part: Power Supply
quantity: 1
5V 2A (2000mA) switching power supply.
[Power Supply](https://www.adafruit.com/product/276)

### Part: Female DC Power Adapter
quantity: 1
2.1mm jack to screw terminal block.
[Female DC Power Adapter](https://www.adafruit.com/product/368)

![](https://cdn-learn.adafruit.com/assets/assets/000/058/618/medium800/sensors_servo_Resized.png?1533324205)

Danger: 

Make the following connections between the Raspberry Pi and the PCA9685:

- **Pi 3.3V&nbsp;** to&nbsp; **Power Rail**
- **Pi GND&nbsp;** to&nbsp; **Ground Rail**
- **3.3V** to&nbsp; **PCA9685 VCC**
- **GND** to **PCA9685 GND**
- **Pi SDA** to&nbsp; **PCA9685 SDA**
- **Pi SCL** to&nbsp; **PCA9685**  **SCL**

Make the following connections between the servo and the&nbsp;PCA9685's Channel 0:

- **Servo Black/Brown** to&nbsp; **PCA9685 GND**
- **Servo Red** to&nbsp; **PCA9685 V+**
- **Servo Yellow** to **&nbsp;PCA9685 PWM**

Finally, connect the&nbsp;PCA9685's screw terminal to the external power supply:

- **PCA9685 V+** to the&nbsp;**Power Supply + (positive)**
- **PCA9685 GND** to the&nbsp;**Power Supply - (negative)**

# Adafruit IO Basics: Servo

## Python Setup

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 + Adafruit IO Setup](https://learn.adafruit.com/adafruit-io-basics-digital-input/python-setup)

Warning: 

# 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/616/medium800/sensors_i2cdetect.png?1533316018)

## Install 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 on 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`

**Note:** While this package is dependent on two other packages&nbsp; **adafruit-circuitpython-busdevice** and **adafruit-circuitpython-register** , they're installed with the package.&nbsp;

## Install the CircuitPython-Motor Library

Controlling the PCA9865's channels directly is not an easy task. You'll need to manually set the duty cycle of each channel. Luckily_, "there's a CircuitPython library for that"_.

**CircuitPython-Motor** is a helper library for easily controlling motors, servos, and PWM-based outputs.

Run the following command to install the **CircuitPython-Motor** library:&nbsp;

`pip3 install adafruit-circuitpython-motor`

# Adafruit IO Basics: Servo

## Python Code

The imports for this guide are similar to the other guides in this series involving analog PWM output ([Color](https://learn.adafruit.com/adafruit-io-basics-color), [Analog Output](https://learn.adafruit.com/adafruit-io-basics-analog-output)), except this time it uses an extra library: **adafruit-circuitpython-motor**

```auto
import time # system 
from board import SCL, SDA # blinka 
from busio import I2C
from adafruit_pca9685 import PCA9685 # PCA Module 
from Adafruit_IO import Client, Feed, RequestError # adafruit io 
from adafruit_motor import servo # servo library

```

By default, the servo channel is on channel 0 of the PCA9685. If you'd like to change this, you can do so by modifying the SERVO\_CHANNEL variable at the top of the code:

`SERVO_CHANNEL = 0`

Before we run the script, we'll need to change `ADAFRUIT_IO_USERNAME` and `ADAFRUIT_IO_KEY` to the username and key for your Adafruit IO account.

```auto
# Set to your Adafruit IO username.
ADAFRUIT_IO_USERNAME = 'YOUR_IO_USERNAME'

# Set to your Adafruit IO key.
ADAFRUIT_IO_KEY = 'YOUR_IO_KEY'
```

Next, we set up the PCA9685 by creating an I2C bus, and passing that into a PCA9685 class. Then, we set the PWM frequency.&nbsp;

```auto
i2c_bus = I2C(SCL, SDA)
pca = PCA9685(i2c_bus)
pca.frequency = 50
```

Then, we instantiate a servo object called **my\_servo:&nbsp;**

`my_servo = servo.Servo(pca.channels[SERVO_CHANNEL])`

in the **while True&nbsp;** loop, we first grab the servo feed value. Then, we compare it against the previous feed value. If it the feed value is different from the previous value, we set the servo angle to the feed's value.

```auto
while True:
    # grab the `servo` feed value
    servo_angle = aio.receive(servo_feed.key)
    if servo_angle.value != prev_angle:
        print('received <- ', servo_angle.value)
        # write the servo to the feed-specified angle
        my_servo.angle = int(servo_angle.value)
    prev_angle = servo_angle.value
    # timeout so we don't flood IO with requests
    time.sleep(0.5)
```

Unlike the Arduino example code, we don't need to handle the servo going past it's maximum or minimum angle, the **adafruit-circuitpython-motor** library handles that for us.

Change the slider value on your Adafruit IO dashboard, and you should see the values output from your terminal:

```auto
received <-  120 Degrees
received <-  70 Degrees
received <-  30 Degrees
received <-  90 Degrees
```

You should also observe the servo change position depending on what value you send:

![](https://cdn-learn.adafruit.com/assets/assets/000/058/790/medium800thumb/sensors_adafruit_io_servo.jpg?1533828645)

# Adafruit IO Basics: Servo

## 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

### Huzzah! Adafruit.io Internet of Things Feather ESP8266

[Huzzah! Adafruit.io Internet of Things Feather ESP8266](https://www.adafruit.com/product/2680)
OK you've signed up for [Adafruit.io](http://adafruit.io/) and you're ready to build something cool and Internet-connected. All you need is this starter kit which will get you going with lots of parts that go very well with our service and are the most common sensors and...

In Stock
[Buy Now](https://www.adafruit.com/product/2680)
[Related Guides to the Product](https://learn.adafruit.com/products/2680/guides)
### AdaBox003 – The World of IoT – Curated by Digi-Key

[AdaBox003 – The World of IoT – Curated by Digi-Key](https://www.adafruit.com/product/3268)
**AdaBox003 –&nbsp;The World of IoT (Curated by Digi-Key)** is the perfect gift for folks who are just getting started in the world of DIY electronics. It's an excellent&nbsp;introduction to our wide world of the [Internet...](https://www.adafruit.com/category/342)

No Longer Stocked
[Buy Now](https://www.adafruit.com/product/3268)
[Related Guides to the Product](https://learn.adafruit.com/products/3268/guides)
### Adafruit Feather HUZZAH with ESP8266 - Loose Headers

[Adafruit Feather HUZZAH with ESP8266 - Loose Headers](https://www.adafruit.com/product/2821)
Feather is the new development board from Adafruit, and like its namesake, it is thin, light, and lets you fly! We designed Feather to be a new standard for portable microcontroller cores.

This is the&nbsp; **Adafruit Feather HUZZAH ESP8266** &nbsp;- our take on an...

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

[Micro servo](https://www.adafruit.com/product/169)
Tiny little servo can rotate approximately 180 degrees (90 in each direction) and works just like the standard kinds you're used to but _smaller_. You can use any servo code, hardware, or library to control these servos. Good for beginners who want to make stuff move without...

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

## Related Guides

- [Adafruit Feather HUZZAH ESP8266](https://learn.adafruit.com/adafruit-feather-huzzah-esp8266.md)
- [MicroPython Basics: What is MicroPython?](https://learn.adafruit.com/micropython-basics-what-is-micropython.md)
- [CircuitPython Hardware: LED Backpacks & FeatherWings](https://learn.adafruit.com/micropython-hardware-led-backpacks-and-featherwings.md)
- [Adafruit IO](https://learn.adafruit.com/adafruit-io.md)
- [Mini Smart Home with Huzzah, HASSio and Crickit](https://learn.adafruit.com/mini-smart-home-with-esp8266-huzzah-feather-raspberry-pi-hassio-crickit.md)
- [Feather Weather Lamp](https://learn.adafruit.com/feather-weather-lamp.md)
- [Adafruit IO Basics: Temperature & Humidity](https://learn.adafruit.com/adafruit-io-basics-temperature-and-humidity.md)
- [MicroPython Basics: Load Files & Run Code](https://learn.adafruit.com/micropython-basics-load-files-and-run-code.md)
- [Automatic Twitch On-Air Sign](https://learn.adafruit.com/automatic-twitch-on-air-sign.md)
- [MicroPython Basics: How to Load MicroPython on a Board](https://learn.adafruit.com/micropython-basics-how-to-load-micropython-on-a-board.md)
- [Introducing Adafruit Feather](https://learn.adafruit.com/adafruit-feather.md)
- [All the Internet of Things - Episode Two: Protocols](https://learn.adafruit.com/alltheiot-protocols.md)
- [Gmailbox](https://learn.adafruit.com/gmailbox.md)
- [WiFi Music Alert Box ](https://learn.adafruit.com/wifi-music-alert-box.md)
- [CheerLights](https://learn.adafruit.com/cheerlights.md)
