When days start to feel monotonous, having a way to transform mundane activities into an interesting, interactive experience is a welcome addition to life at home. Whether it's reminding you to do everyday chores or motivating you to try new activities, TaskBoard provides a brand new interface—inspired by the popular game "Among Us"—to make performing tasks around the house significantly more fun!
What it does
TaskBoard is an extremely versatile task management system that visualizes all of your most pressing tasks. Its highly customizable user interface and clean integration with external services lends it to a broad range of applications, from doing chores around the house to planning errands around a city.
TaskBoard syncs with the online reminder service Todoist, printing out your most urgent tasks and illuminating a map of your house according to what tasks need to be done. The color of each room is determined by the urgency of the task(s) to be done in that room, allowing you to easily visualize your todo list. The TaskBoard also allows you to easily check these tasks off of your Todoist lists with the push of a button.
Since a majority of the processing occurs in the cloud, multiple TaskBoards can be connected to the same account—such as if a user wishes to have one in each room of their house—and they will all synchronize with no modifications necessary. Additionally, changing the color codes or text formatting can be done remotely through the AWS console, minimizing the need for firmware updates.
To save energy, the display and LEDs automatically turns off after no activity has been sensed. To reactivate the display and LEDs, the user simply has to wave their hand in front of the board or press one of the two buttons.
How we built it
Using Lambda on Amazon Web Services, we built a custom API wrapper for the Todoist API from which an ESP32 microcontroller, connected to a local network, can retrieve all your most urgent tasks. That ESP32 microcontroller then prints out those tasks on an SSD1306 OLED display so the user can see their most pressing tasks and check them off one by one using two pushbuttons. RGB LEDs controlled via a shift register illuminate the map, and an infrared distance sensor wakes up the map from sleep mode when a user is nearby. To make it completely independent of any external wires, it is powered by an onboard USB power bank.
Challenges we ran into
Having the ESP32 microcontroller communicate directly with the Todoist API would be stretching the capabilities of the microcontroller, so we implemented a custom python API wrapper running on AWS Lambda that extracts, analyzes, and organizes the relevant tasks from Todoist. Adding this intermediary was difficult to implement, as we had never used AWS before, but the results greatly increased the organization and performance of the TaskBoard.
Additionally, controlling 5 RGB LEDs along with two pushbuttons and the OLED display requires more GPIO pins than are available on the ESP32 microcontroller. So, we had to implement 74HC595 shift registers with a custom control function, to allow us to control all 5 RGB LEDs.
Finding an effective method of mounting the map to a wall also presented a challenge. We explored several ideas—including velcro, mounting brackets, and more—but we eventually settled on what is known as the French cleat mounting system. This mounting system beautifully and securely mounts the map to the wall, leading to a very clean and safe mount.
How to Use it
To customize the experience to your account and house, the user needs to input their unique Todoist API token, which can be found in settings --> integrations from the Todoist web interface. That token needs to be loaded in the formware, on line 16 of TaskBoard.ino.
To change the rooms in the house to match the rooms listed on a user's Todoist account, the values of room_array on line 18 of Todoist.ino can be updated. Note that the order of the rooms does matter, as the main room (the room whose tasks are displayed at the top of the list) that is specified by the variable main_room is used to index into this list.
The two scripts used to implement the custom AWS wrapper:
- lambda_function.py is the landing function that parses the request and calls analysis functions
- taskBoard.py communicates with the Todoist API to pull the most users tasks, group them by project, organize the tasks by priority, and generates the colors for each room Note that the todoist and requests packagaes must be uplaoded to AWS in order for this script to work.
The custom API wrapper outputs the number of tasks to be completed; an array of strings that show the names of the tasks to display on the OLED display; the color codes of the 5 rooms in the form of a dictionary of arrays of 3 integers; and a copy of the ordered array of room labels to verify that the indices used by AWS and the local machine match.
Accomplishments that we're proud of
We are very proud of the clean design of the map. The precisely laser cut enclosure makes for a very aesthetic presentation that is a beautiful addition to any wall. Additionally, the map itself is completely customizable, with a standard 8.5x11 sheet of paper easily sliding into the slot.
We are also proud of the integration with Todoist, as we were able to make use of Todoist's extensive features and organizational features. Most notably, the organization of the tasks into different projects lends itself perfectly to the compartmentalization into specific rooms in the house.
What we learned
In IDEA Hacks 2020, we spend a significant amount of time getting the ESP8266 microcontroller to work, so this year we were able to expand on that knowledge with more complicated network interactions. This involved performing https GET and POST calls, as well as parsing through json outputs.
We also built our own API interface on AWS Lambda, which involved a rather steep learning curve but was essential for building our final product. Because of this external processing on AWS, the calculations performed on the ESP32 are greatly simplified and the data flow is much cleaner.
We also applied our knowledge of bit level operations from UCLA Computer Science classes to write our own control functions for the shift registers that drive the RGB LEDs. With this, we can accurately control all 5 RGB LEDs with a range of colors.
What's next for TaskBoard
Improving the customization of the TaskBoard is the next step, with more options for maps and colors for the LEDs. The paper map can be easily slid in and out of the case, allowing for easy customization through the design of new maps. One potential use for this is seasonal decoration; for example, the user's house could be decorated with flowers once Winter turns to Spring.
A more advanced LED driver and larger display would allow for more unique and clear displays. More colors allows for a more precise depiction of the urgency of each task, and a larger display would both allow for larger fonts and more tasks to be displayed at once. Larger display
There exist a large number of integrations with Todoist, and we would like to make use of those. For example, integrations with Google Calendar and the IOS notes app already exist. Implementing those integrations, for example through ifttt.com, would greatly simplify the users' experience.