Want to make your project talk to the Internet? Connect your existing project to the Internet to log, stream, and interact with the data it produces? What about all this Internet-of-Things (IoT) stuff?

Adafruit IO is a platform designed (by us!) to display, respond, and interact with your project's data. We also keep your data private (data feeds are private by default) and secure (we will never sell or give this data away to another company) for you. It's the internet of things - for everyone!

Why We Built Adafruit IO

Here at Adafruit, we sell all of these amazing components, but we couldn't find a good way to interact with them over the Internet. There are certainly a lot of great services out there for datalogging, or communicating with your microcontroller over the web, but these services are either too complicated to get started, or they aren't particularly fun to use. So, we decided to experiment with our own system, and that's Adafruit IO.

What is Adafruit IO?

Adafruit.io is a cloud service - that just means we run it for you and you don't have to manage it. You can connect to it over the Internet. It's meant primarily for storing and then retrieving data but it can do a lot more than just that!

What can Adafruit IO do for me?

  • Display your data in real-time, online
  • Make your project internet-connected: Control motors, read sensor data, and more!
  • Connect projects to web services like Twitter, RSS feeds, weather services, etc.
  • Connect your project to other internet-enabled devices
  • The best part? All of the above is do-able for free with Adafruit IO

Dashboards

Adafruit.io can handle and visualize multiple feeds of data. Want to display data from a temperature-humidity sensor alongside data from an air quality sensor and add a button to turn on the air-conditioner in your room?

No problem! Dashboards are a feature integrated into Adafruit IO which allow you to chart, graph, gauge, log, and display your data. You can view your dashboards from anywhere in the world. 

Triggers

Use triggers in Adafruit IO to control and react to your data. Configure triggers to email you when your system goes offline, react to a temperature sensor getting too hot, and publish a message to a new feed.  

Integration with IFTTT and Zapier

Want to make your project react to an email, display trending tweets, or turn on the front lights when your pizza is on the way? We baked in integrations with IFTTT and Zapier to connect your project's sensors to hundreds of web services.  

Getting Started with Adafruit IO

GOOD NEWS - we integrated Adafruit IO with your adafruit.com account so you don't need to create yet-another-online-account! 

You need an account because we want to make sure the data you upload is available to you and only you until you are ready to make it public

Head over to io.adafruit.com and click Sign In to log into IO using your Adafruit account. It's free and fast to join.

You will be directed to your profile page showing your plan, connected services, and account data:

From here, you'll want to learn about two important features of Adafruit IO before proceeding further -  Feeds and Dashboards

Feeds

Feeds are the core of Adafruit IO. They hold both the data you uploaded and meta-data about the data your sensors push to Adafruit IO. For example, the date and time when it was uploaded. Or, the GPS coordinates where the data came from.

 

Want to share your data feed with the world, a group of people, or just a friend? Adafruit IO has integrated feed sharing with fine-tuned privacy controls to allow (and restrict) access to your data. 

 

Click here to learn more about Feeds in Adafruit IO Basics: Feeds

Dashboards

Dashboards are a feature integrated into Adafruit IO which allow you to chart, graph, gauge, log, and visualize your data. You can view your dashboards from anywhere in the world. 

 

Click here to learn more about Dashboards in Adafruit IO Basics: Dashboards

Arduino and Adafruit IO

Have an Arduino or Arduino-Compatable board which you want to use with Adafruit IO? Want to adapt your sketch to Adafruit IO? It's easy! We provide two libraries which work with lots of compatable hardware. 

Need inspiration or project examples? We built sixteen examples sketches to get you up and running, along with six guides to follow-along to. 

CircuitPython and Adafruit IO

Ready to bring your CircuitPython project online? Quickly connect it to Adafruit IO using the CircuitPython Adafruit IO library! 

Using CircuitPython with Adafruit IO lets you rapidly update your code without having to re-compile. You can also store your WiFi and Adafruit IO API keys directly on the device. This means that there's no editing code and re-uploading whenever you move your project to another network - just update a file and you're set. 

The CircuitPython Adafruit IO module can communicate with Adafruit IO using either the HTTP API or the MQTT API.

Compatible Hardware

Adafruit IO for CircuitPython requires an M4 or better microcontroller! The M0 will not work.

You can connect a CircuitPython board with a M4 microcontroller to Adafruit IO with an AirLift breakout.

Adafruit AirLift – ESP32 WiFi Co-Processor Breakout Board

PRODUCT ID: 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...
OUT OF STOCK

If you're using a Feather-form-factor CircuitPython device (with a M4 microcontroller), the AirLift FeatherWing can plug into a doubler. But, you can also pick up a set of stacking headers to stack above/below your Feather.

Adafruit AirLift FeatherWing – ESP32 WiFi Co-Processor

PRODUCT ID: 4264
Give your Feather project a lift with the Adafruit AirLift FeatherWing - a FeatherWing that lets you use the powerful ESP32 as a WiFi co-processor. You probably have your...
OUT OF STOCK

If you do not want to attach extra hardware and want a powerful all-in-one CircuitPython device, pick up a board such as the Metro M4 AirLift or PyPortal.

Adafruit Metro M4 Express AirLift (WiFi) - Lite

PRODUCT ID: 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 Adafruit Metro...
$34.95
IN STOCK

Adafruit PyPortal - CircuitPython Powered Internet Display

PRODUCT ID: 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...
OUT OF STOCK

For a full list of Adafruit IO compatible CircuitPython hardware, visit the CircuitPython.org downloads page, click the sort icon, and select WiFi from the options listed.

Get Started with CircuitPython and Adafruit IO

Have a CircuitPython project you'd like to connect to Adafruit IO? We've written an Adafruit IO CircuitPython module to provide simple interaction with the Adafruit IO MQTT or HTTP API.

Python and Adafruit IO

Want to use Adafruit IO with your computer, a Raspberry Pi, Beaglebone, or your favorite single-board linux computer? 

The Adafruit IO Python library provides two clients for accessing Adafruit IO (MQTT and HTTP) and lots of examples. It's compatible with any system running CPython3 and also compatible with Single-Board computers like the Raspberry Pi or BeagleBone

Other Client Libraries

We also support a few other languages with our client libraries:

Node.js

Writing a Node.js web application? We provide a Node.js client, local server, and TLS tunnel for io.adafruit.com on our GitHub. This library can use both the REST API and the MQTT API to access feeds and data on Adafruit IO.

The library readme on GitHub describes how to install and use the library.

Ruby

If you have a Ruby program you'd like to interface with Adafruit IO, we provide a Ruby Client on our Github. This library wraps the REST API to access feeds and data on Adafruit IO. The library readme shown on GitHub describes how to install and use the library.  

Be sure to also see the examples included for use with this library.

Go

You can also talk to your io.adafruit.com account using our go client library. The library requires go version 1.2 and running tests requires the testify library, which can be installed with:

Download: file
$ go get github.com/stretchr/testify

Be sure to also see our usage notes along with the godoc page for full package documentation.

Your Adafruit IO experience is even better with IO+. The 'plus' stands for MORE STUFF! More feeds, dashboards, storage, speed. IO+ unlocks more data, more storage, and more feeds than our free service.

Upgrading your account to IO+ gives you:

  • 60 data points per minute
  • 60 days of data storage
  • Unlimited dashboards
  • Unlimited feeds

Subscribing to Adafruit.IO

Ready to subscribe to Adafruit IO+? Visit your profile page and click the Upgrade to IO+ button:

Then, fill out your payment information, and your Adafruit IO account will be upgraded to IO Plus!

IO Plus FAQ

Why should I subscribe to IO Plus? How is it billed?

For one, uncomplicated price you get unlimited feeds and dashboards, a higher data input rate, and longer data storage.

IO+ subscriptions are billed immediately when you subscribe and then monthly or yearly, repeating each month or year on the same day you signed up until you cancel.

Payments and Credit Card Processing

We use Stripe for payment processing and subscription management and are currently able to accept every major credit card including: Visa, Master Card, American Express, Discover, JCB, and Diners Club. All charges are denominated in USD (United States dollars) but international customers are welcome!

What if I want to cancel my IO+ Subscription?

It's easy and painless - when you cancel your Adafruit IO+ subscription, your access to IO+ will continue until the end of your current billing cycle. At then end of your subscription period you account will be restored to IO Free account limits. Right now that's 10 feeds, 5 dashboards, 30 days of data storage, and a 30 data points per minute data rate. Data that has already been stored will be preserved, and all extra feeds and dashboards will be archived.

I'm having trouble with billing, or payment processing. Can you help?

Absolutely! If you have a question we haven't answered here or on the Adafruit IO forums, or if you have a question about your subscription specifically, you can use the Adafruit Contact page to get in touch with our support team directly.

Is there a way to purchase IO+ for a yearly fee instead of billing monthly?

Sure, we offer a one-year subscription pass in the Adafruit store. 

Can I gift an IO Plus subscription to my friend, coworker, family-member, or a fellow maker?

You can purchase the subscription pass for yourself or as a gift, and send it to a family or friend. Code is redeemable within https://io.adafruit.com once you are signed in to your account. The code is not locked to any specific account until it is redeemed.

Securing Your IO Account

Your IO Account includes a secret API key. This key is private and should not be shared with anyone.

Common pitfalls of the key is it may be accidentally shared by posted code on GitHub or social media.

If anyone gains access to your key, they will have access to your Adafruit IO account.

Key Regeneration

Your key can be regenerated within IO by clicking the yellow AIO Key text in the header of the page.

Once you click that link, a dialog box will show which will allow you to click REGENERATE AIO KEY.

This process is not reversible.

Troubleshooting your Adafruit IO Project

The Problem with IoT Project Troubleshooting

Much like a sandwich, Adafruit IO projects have a lot of layers where things can go wrong. As a result, it becomes much harder to troubleshoot these types of projects.

There's the hardware (like a Feather ESP8266) layer which brings issues such as "why isn't my motor turning". Your wiring may be an issue. The code could be incorrect. It could even be a networking issue, which brings us to the next layer...

Then, there's networking which connects your internet-controlled project to the internet. Problems could arise here resulting to DNS configuration, port forwarding problems, or your router simply not talking to The Internet™.

There's also The Internet™, and that brings a lot of problems too. Finally there's Adafruit IO, a web service that we built and support. 

...and there could be problems with any layer of this delicious sandwich. 

How to Help Out ("I have a problem that's not listed here, what now?")

If your project is not working properly, the Adafruit community is here to help you out. Post up in the Adafruit IO Forums or chat with Adafruit staff and community members in real-time on the adafruit-io channel on the Adafruit Discord server.

While we help out and see repeated issues, we'll add them to this page to help others. 

Common Issues

My Serial Monitor prints "..." endlessly after the "Connecting to Adafruit IO" message

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

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

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 Serial.println(.); to 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 Network disconnected error message, the board is not able to talk to the internet. Re-check your hardware, connections, and router settings. 

If it's still not showing Adafruit IO connected, check the IO status on the Adafruit Status page to make sure the service is online.

My data isn't displaying, is Adafruit IO's {service/MQTT/API} down?

Is my data being sent properly? Am I sending too much data?

There's a monitor page built-into Adafruit IO 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. 

My dashboard is reporting a temperature reading in Fahrenheit/Celsius but I need it in the opposite unit

The dashboard displays information from feeds. Chances are, the sensor you are using is outputting a temperature in Fahrenheit/Celsius but you need to convert it (in your code) to the opposite unit. Here's some handy pseudo-code to help out:

From Fahrenheit to Celsius:

   degreesFahrenheit = degreesCelsius × 9/5 + 32

From Celsius to Fahrenheit: 

   degreesCelsius = (degreesFahrenheit - 32) × 5/9

I'm using an Feather M0 WiFi (ATWINC1500) and it's not connecting to Adafruit IO.

If you're using a Feather M0 WiFi and receiving a Disconnected from Adafruit IO message in your serial monitor, you'll want to check two things:

  1. Make sure that you have the correct Adafruit IO Keys in your sketch, and that the router/network configuration is correct. 
  2. The SSL ceritifcates on your device for Adafruit IO need to be up-to-date. It's hard to check if they're up-to-date from the device, so we suggest running through the process of adding a new SSL certificate through the Arduino IDE. You can find the guide for that here.

Board-Specific Issues

ESP8266

Error: 'AdafruitIO_WiFi' does not name a type

From Boards Manager, downgrade from ESP8266 v2.5.0-beta2 to stable 2.4.2.

Can I build my own Client Library for Adafruit IO?

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

My data isn't displaying, is Adafruit IO's {service/MQTT/API} down?

Possibly - you can check IO status on the Adafruit Status page

Is my data being sent properly? Am I sending too much data?

There's a monitor page built-into Adafruit IO 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. 

What about the data that my project generates? Where does it go? What happens to it? Are you going to sell it?

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.

I have an Alexa/Echo Dot/AI Voice Assistant. How do I interface it with Adafruit IO?

Currently, the easiest way of doing this is by chaining events through a web-service such as IFTTT which has integrated Alexa Skills and Google Assistant Skills.

I don't see my question listed.

If you have any questions or issues with Adafruit IO, post up in the Adafruit IO Forums or chat with Adafruit staff and community members in real-time on the adafruit-io channel on the Adafruit Discord server.

This guide was first published on Jun 13, 2018. It was last updated on Jun 13, 2018.