Welcome to my first Instructable; Task: The Ambient Planner!

I believe smartphones and social media lead us to feel overwhelmed and overloaded by the amount of detailed information we consume each day. Add in the fact that some jobs expect almost 24/7 reachability, and our once organized planners begin to look a lot like daunting novels.

Enter Task: The Ambient Planner. By connecting an online to-do list (Todoist, https://todoist.com/) to Task, we can reduce some of the informational clutter we get assaulted with each day.

Now, when you add or complete an item on your list, Task will light up or turn off an LED in turn. In doing so, we can simply glance at an ambient display to see how much we have on our plates, rather than get overwhelmed with written or typed text.

Required for this project are the latest version of Arduino IDE (https://www.arduino.cc/en/Main/Software) and subscriptions to the following three services: Adafruit IO (https://io.adafruit.com/), If This Then That (IFTTT; https://ifttt.com), and the online task management program, Todoist (https://todoist.com/).

Step 1: The Materials

ESP8266 HUZZAH Breakout (https://www.adafruit.com/products/2471)

FTDI Serial TTL-232 USB Cable (https://www.adafruit.com/products/70)

NeoPixel Ring – 24 x WS2812 5050 RGB LED w. Integrated Drivers (https://www.adafruit.com/products/1586)

5V 2A (2000mA) switching power supply - UL Listed (https://www.adafruit.com/products/276)

Panel Mount 2.1mm DC barrel jack (https://www.adafruit.com/products/610)

Half-size Breadboard (https://www.adafruit.com/product/64)


Wire Strippers

Soldering Iron


Wood Shop Equipment (Drill press, Table Saw)


12" x 24" x 0.5" Plywood (more than enough for this project)

12" x 24" x 0.25" Plywood (more than enough for this project)

Optional: 12" x 24" x 1/16" Acrylic Sheet

Step 2: Circuit Diagram

It's time to construct your circuit. Luckily, this part isn't too hard. Please refer to the steps below as well as the Fritzing diagram in the pictures.

1. Solder all pins onto ESP8266 HUZZAH board by following Adafruit's great ESP8266 tutorial (found here). The Adafruit tutorial includes information on how to solder the board, the different pinouts, and how to test it with your Arduino IDE.

2. When you have completed soldering together your ESP8266 board, insert it into your half-size breadboard wherever you like.

3. Solder positive (+) and ground (-) wires to the positive and negative terminals of your Panel mount DC 2.1mm barrel jack. Insert these wires into either of the positive and negative rails found on both sides of your breadboard. These connections will power both rails when the 5V, 2A power supply is plugged into it.

4. Using wires, connect VBAT on your ESP8266 board to the positive rail, and GND to the negative/ground rail.

Note: For the following NeoPixel soldering, place the wires through the FRONT side of the NeoPixel ring and solder it together on the back side. This is because the LEDs are very close together and are easily damaged by solder.

5. Similarly, solder wire to the PWR and G holes on your NeoPixel Ring and insert the other ends into the same positive and negative rails on the breadboard. Please note that there are two PWR and two GND holes, and either is fine to use for this project.

6. Lastly, solder a wire into the INPUT hole on your NeoPixel Ring, and insert this wire into one of the free pins on the ESP8266. For this tutorial, I chose Pin 12.

Important: Inserting the wires now is just for testing purposes. After we build our box, we will have to put all our parts in before we insert the wires into the breadboard.

Step 3: Coding!

Here comes the fun part!

Attached is the code that will help you make Task work in your home.

Please note that you will need the following:


Adafruit HUZZAH ESP8266. You can get this from Arduino IDE > Tools > Board > Board Manager and searching for "ESP8266". Note: You may need to copy an exact hyperlink from Arduino if you can't find the board in the Manager. Find those steps https://learn.adafruit.com/adafruit-huzzah-esp8266-breakout/using-arduino-ide.


You will need the Adafruit IO and Adafruit NeoPixel Library, which you can get by going to Arduino IDE > Sketch > Libraries > Manage Libraries and typing in "Adafruit IO" and "Adafruit NeoPixel".

It is also a good to idea to get the Adafruit IO ESP8266 sample code for "Digital Output", found here, under the "Adafruit IO Basics Sketches" link. This will download a small library of examples to look at. Please look at the Digital Output code. Please ignore the information regarding the Power Switch Tail as the example shown is for turning on a lamp from your phone. Unless you want to do that.

Uploading Code

Any time you want to upload code into your ESP8266 board, you must first connect the FTDI cable and put into "boot mode". The FTDI cable, as it states in the tutorial mentioned earlier, should have the black wire going to GND.

Setting the board into "boot mode" is accomplished by holding down the small GP100 button on your board, pressing the adjacent Reset button, then letting go of the GPIO0 button. A faint red light should appear on the board, meaning it is ready to have code uploaded to it. After uploading, you can remove the FTDI cable.

Important: In the Digital Out example code we will be modifying for this example, we have to include the NeoPixel library. In addition, you will need to input your WiFi Network Name, WiFi SSID, Adafruit IO Username and Adafruit IO key into the appropriate locations.

Test NeoPixel Code with "strandtest"

You can now test the status of your ESP8266 board and your NeoPixel ring by uploading the attached "strandtest24" code. If all goes well, you ring should light up. Really, really brightly.

Step 4: Sign Up and Create Feeds in Adafruit IO

So, now we have to create our New Task and Completed Task feeds in Adafruit IO. This will eventually get read by our code and inspire our board to turn some LEDs on (or off)!

1. Adafruit has a create series of tutorials on getting set up with feeds, dashboards, and digital input/output using Adafruit IO. Read them (here).

2. After you have learned how to create “Feeds” in Adafruit IO, we will now create two feeds – one for our New Tasks and one for our Completed Tasks.

3. On Adafruit IO, selected “Create Feed”.

4. Important: Whatever you name these feeds is what you have to replicate EXACTLY in your code, so choose simple names. In this example, I titled my feeds “Todoist_New_Tasks” and “Todoist_Completed_Tasks”.

5. Optional: You can also create dashboards that visualize these feeds. Though this isn’t required (as your code is pulling data from the Adafruit IO Feeds), it is highly suggested as it provides a check to make sure that your IFTTT triggers are properly pushing data to Adafruit IO.

Speaking of IFTTT…

Step 5: Linking IFTTT and Adafruit IO for New Tasks

Now we need to link our Adafruit IO account to our IFTTT trigger. You can do this for anything; however, for this specific case, we are linking it to our online task planner, Todoist. So,

1. Go to ifttt.com.

2. Click on “Create Recipe”.

3. For your “this” trigger, click on Todoist. It should prompt you for access to your Todoist account. Click “yes”. You will need to input your Todoist Login information to complete this step.

4. You can now choose your trigger. For this example, I chose “New Task Created” in “Any Project”. Hypothetically, you can choose any project folder you want such as “Work”, “Birthdays”, etc. depending on how you have set up your Todoist lists.

5. For your “that” action, select Adafruit IO. After giving access to IFTTT, the only option available to you should be “Send value to feed”. You will need to input your Adafruit IO "Access Key", which is a large alphanumeric string that can be found on your Adafruit IO account, to complete this step.

6. Choose the appropriate feed that corresponds to new tasks being created. Under “Data to save”, choose any data. The “taskcounter” counter in our code makes it so that this data does not matter to our device.

7. Create the recipe.

Step 6: Linking IFTTT and Adafruit IO for Completed Tasks

Repeat Step 5, however, the Adafruit IO feed that should be chosen this time is the feed you created for Completed Tasks.

Step 7: Optional: Checking IFTTT Recipes

IFTTT has its own relationship checker to make sure the recipe is working, but we can also do this ourselves using Adafruit IO's dashboards as we stated earlier.

Here, we can see that the numbers we input into Todoist (0,1,2,3,4) have been successfully pushed to the Adafruit IO dashboard.

Step 8: Creating the Box

We've now got our circuit, our code and our accounts all setup. Let's create the project box!

You will need access to some fairly advanced shop tools, so look for one locally. I created a 4.25" cube since I decided to lay down my 3.25" half-size breadboard horizontally inside the box. If you decide to go vertical, I'm sure you can get a much tighter, smaller cube shape.

I began by measuring out my front and back, top and bottom, and side wall dimensions. I chose 0.5" plywood for the front and back, as these pieces had to be drilled into to insert the NeoPixel ring and 5V barrel jack, respectively. The top and bottom, as well as the sides, were cut from 0.25" plywood. Feel free to use any wood you want!

My final dimensions ended up being:

Front and back: 3.75" high x 4.25" wide x 0.5" thick

Top and bottom: 4.25" high x 4.25" wide x 0.25" thick

Lid registration piece (not pictured): 3.75" long x 3.25" wide x 0.25" thick

Side walls: 3.75" high x 3.25" wide x 0.25" thick

Next, I used a 65mm Forstner-like drill bit and drilled to a depth of ~10mm (sorry for the switch in dimensional units, but it's easier to measure than x/64ths of an inch). This bit also has a tip that creates a hole in the center of the ring. This hole is very important as we will run our wires through it later.

Note: You may require some sanding of the inside of the depression in order to get the ring to fit properly.

I then cut a 65mm circle out of 1/16th" clear acrylic sheet to act as a cover piece to sit over the ring.

Then, I drilled a 15/32" hole in the back piece of the box. This allows for a good friction fit to plug the barrel jack into.

Note: The 10mm hole depth allowed me to inset both the NeoPixel ring as well an acrylic cover piece over the ring and have it sit flush on the the front surface.

Next, I began gluing the box together. I used wood glue and clamps to bring all the sides together except the top. The top and the registration piece were glued separately. The registration piece allows the lid to be placed on top of the box without sliding off.

After allowing the glue to dry overnight, I sanded all the sides and used stain to add some color to the plywood. Stain can be applied lightly with a rag.

Step 9: Bringing It All Together!

We have our box.

We have our code.

We have our circuit and soldered parts.

It's time to put it all together.

1. Insert your breadboard into the box interior. These breadboards have a film on the bottom. If you peel this off, it reveals an adhesive layer you can use to firmly attach your board to the box floor.

2. Insert the ESP8266 HUZZAH board into the breadboard. Connect Vbat and GND from the board to the power and ground rails of the breadboard.

3. Insert your wired barrel jack into the back panel hole you drilled earlier if you haven't already. Place the power and ground wires into the power and ground rails of the breadboard as you did before.

4. Insert your wired NeoPixel ring into the depression you made with the Forstner-like bit. Run wires through the center hole. Insert power and ground wires into rails as before. Insert input wire into your desired PIN input.

Important: The orientation of the ring is important. You will need to determine what the 0th (first) LED to light up is and orient the ring accordingly. For me, the 0th LED was right next to my Input wire.

5. Optional: You can now insert your clear acrylic circle over the NeoPixel ring. In my case, as you saw earlier, I also cut a circle out of vinyl to add light diffusion.

6. Upload your code via the FTDI cable.

Important: In the Digital Out example code we will be modifying for this example, we have to include the NeoPixel library. In addition, you will need to input your WiFi Network Name, WiFi SSID, Adafruit IO Username and Adafruit IO key into the appropriate locations.

7. Plug in the box.

Step 10: Enjoy!

You're good to go!

Any time you create or complete tasks on Todoist, the LEDs will light up or turn off. As you add more tasks, and if you have followed the code here exactly, the lights will shift from green to yellow to red.

The best part of the Task cube is that it utilizes IFTTT and Adafruit IO, which themselves have robust, diverse capabilities. In other words, you can link any IFTTT trigger you want to Adafruit IO and have the task cube respond through the lighting up, shutting off, changing of color, or blinking of the NeoPixel LEDs.

Feel free to experiment with triggers like e-mails and weather, and enjoy!

I hope you've enjoyed this tutorial, and thanks for reading!

<p>Like the idea. Like the idea of the addition of a clock face, but to take one step further, find a way to use the priority of the task to determine the color of the LED. High, Med, Low, -&gt; Red, Yellow, Green. Looks like it might require a todoist premium to use labels in IFTTT, but the priority is an ingredient available to use with a standard when task is created recipe.</p>
<p>Nice project. I think it would be nice to add a clock to the middle of the ring. I almost thought you did that by seeing the green, red and black wire that go through the middle to the pixel ring in one of your pictures. </p>
<p>Thanks for the comments and the idea! Adding a center clock would certainly be useful and make it look aesthetically pleasing if the right clock was chosen.</p>
<p>It looks simple, but I think a planner should be able to tell you what exactly your task is at first glance. Anyway - great idea.</p>
<p>Thanks for the feedback! The best part is that the IFTTT trigger can track (almost) anything you want, so it doesn't necessarily have to be tasks.</p>
<p>I really like this idea. Great work!</p>
<p>Thanks for the kind comment!</p>

About This Instructable




More by AKalyanpur:Task: The Ambient Planner 
Add instructable to: