Table of contents
- Hardware Design
- Controller Software
- Web Interface
- Web Client
- Remaining Tasks
IntroductionThis project is meant to serve as a reference base platform for nearly any IoT project. Various aspects of the architecture were chosen for modularity even though something this simple might have been possible with a smaller set of components. Some key features of this project are the fully formed web interface, a 3d printed enclosure, and a local user interface. Each of these items are important for any practical project yet it seems like there are few if any project examples online that document every aspect of a complete device; especially the enclosure and web interface.
Every aspect of the project is open source or open hardware.
RoadmapThis is an incomplete list of activities that must be completed before the project is finished.
|Faceplate Label||Not Started|
|LCD Menu||Not Started|
|ESP Server||WiFi Client Code||Started|
|Debugging w/o Serial||Started|
Local Display w/ Navigation Keys
WiFi and Web Interface
Serial Command Interface
LCD and Keypad Menu
ArchitectureThe web interface is implemented in an ESP8266 WiFi module. This was chosen because it has a lot of community support and will run the Arduino libraries. The Arduino libraries were chosen to complement the same libraries in the attached ATMega AVR. The ESP8266 is responsible for all the Internet facing functions such as NTP time keeping, REST interface, serving static web resources, and the MQTT client.
Serial Command Interface
WiFi Network Management and mDNS
Controller Time Update Task
ArchitectureThe web client interface implemented as an Angular 1.x single page application. The web client talks directly to the REST interface in the ESP8266 web server. Each of the pages are dynamically populated from the REST interface. The user interface is based on the model-view-controller concept implemented in Angular services, controllers, and html templates.
This is the part of the project where I have the least experience and I am sure there are aspects that can be vastly improved.
REST InterfaceThe REST interface is designed for both the web interface and as a general automation interface for access by other systems. Using the REST interface for all the web client interaction ensures that alternative clients can be created that have complete control over every aspect of the system.
|5-Med||Web Client: Add error handling for connectivity loss||"19-Jun-2016"|
|1-High||Web Server: Serial Command Interface||"19-Jun-2016"|
|1-High||Web Server: WiFi Network Management and mDNS||"19-Jun-2016"|
|1-High||Web Server: Controller Time Update Task||"19-Jun-2016"|
|1-High||Web Server: REST Interface||"19-Jun-2016"|
|1-High||Web Server: Parameter Storage||"19-Jun-2016"|
|1-High||Controller: LCD menu||"19-Jun-2016"|
|5-Med||Hardware: Face plate||"19-Jun-2016"|
|5-Med||Hardware: Schematic capture||"19-Jun-2016"|
|8-Low||Hardware: Create board layout for Arduino striped||"9-Jan-2017"|
|1-High||Web Server: SNTP Client / overall time sync strategy||"16-Feb-2017"|
|8-Low||Project: Create GitHub repository for the project||"16-Feb-2017"|
|1-High||Web Server: Debugging ESP8266 w/o serial console (MQTT)||"16-Feb-2017"|
|1-High||Web Server: Tracking key performance indicators||"16-Feb-2017"|