ECE434 Smart Mirror

Jump to: navigation, search

thumb‎ Embedded Linux Class by Mark A. Yoder

Team Members: Mark Procter and Andy Barbour

Grading Template

I'm using the following template to grade. Each slot is 10 points. 0 = Missing, 5=OK, 10=Wow!

00 Executive Summary
00 Installation Instructions 
00 User Instructions
00 Highlights
00 Theory of Operation
00 Work Breakdown
00 Future Work
00 Conclusions
00 Demo
00 Late
Comments: I'm looking forward to seeing this.

Score:  10/100

(Inline Comment)

Executive Summary

This project consists of a reflective pane of acrylic with a monitor behind it, creating a mirror that can display useful widgets like the date, the weather, and a daily fortune, among other things. It is a sleek device useful for quickly gathering daily information while, for instance, getting dressed or brushing teeth.

To visit our page, follow this link:

To visit our GitHub repository, follow this link:


All hardware components of this smart mirror are enclosed in a wooden frame that hides and protects the monitor, BeagleBone, and electrical wiring. The actual construction of the frame is outlined in our page which can be access from the link above.

Installation Instructions

  1. Install the Debian kernel bone-debian-9.11-lxqt-armhf-2019-11-02-4gb.img.xz from the following link
  2. Clone the repository using $git clone
  3. Enter the repository and run the install file with $./
  4. Create a Blynk project with a single button labelled "Toggle Mirror Display" that will toggle the V0 pin between 1 and 0, starting at 1
  5. Retrieve the Blynk authorization key and copy it into the variable BLYNK_AUTH in the file

Note that in doing this, the user will only display Terre Haute data and our custom dashboard. If the user wants to alter the dashboard and data being transmitted, follow the steps in our

User Instructions

To boot up the system for the first time after powering on, a mouse and keyboard are required. Navigate to the ECE434SmartMirror repository and run the Python script. In order to toggle the smart display dashboard, simply press the button created in the Blynk app. Nothing more needs to be done!


Smart Mirror Dashboard

This smart mirror displays the current date, temperature outside, what that temperature feels like, the current forecast, the current wind speed, and a philosophical fortune. All is displayed on a section of the mirror so the mirror itself is still completely usable. All hardware components are enclosed in a frame, and the display can be toggled on and off with a mobile phone.

Theory of Operation

The customization of the appearance of the displayed widgets was done through InitialState, a tool used for collecting and displaying data fed to it. The raw InitialState page created for this project can be seen here. On the startup of the BeagleBone system, the main Python script will run. It will first open the customized HTML for the InitialState page that formats it properly, then simulate an F11 key press to enter full-screen. The program will then continually listen for button presses in the Blynk program to toggle the output to the HDMI port. Periodically, the Python script will retrieve information from various APIs to obtain the current data to display, then feed it to the InitialState dashboard, causing it to update.

Work Breakdown

Mark Procter

  • Formatting of dashboard display
  • Integration of weather API
  • Functionality of automatically launching dashboard HTML file and forcing it to be full-screen

Andy Barbour

  • Formatting of HTML and CSS files
  • Integration of date API
  • Integration of timers which periodically update widget data

Both Team Members

  • Integration of fortune API
  • Integration of Blynk
  • Construction of mirror enclosure and hardware
  • Documentation of wiki and Hackster pages

Future Work

There are a number of features that could be added to this project to improve the overall quality and make it more interesting.

  • Integration of more interesting APIs, possibly connecting to personal calendars, home automation systems, or electronic assistants
  • More polished and professional enclosure and frame
  • Additional options to make mirror more easily customizable by user
  • Integration of speaker, camera, and / or microphone for better user feedback and input, for instance automatic sleeping and waking of system


This was an interesting project for us to work on, forcing us to develop our skills with using a variety of APIs and a challenging development environment, given the slowness of the BeagleBone running this kernel. There are a number of different directions the project could take from this stage, some of which are highlighted in the section above. It's a neat project, and overall we're quite satisfied with how it ultimately panned out!

thumb‎ Embedded Linux Class by Mark A. Yoder