This project is a reboot of a LED Lightbar that I designed last year (see this link for a video). The original goal was to create a color-adjustable LED Light for use in filmmaking and photography applications. The original prototype worked well but there were a few issues. The app and device periodically disconnected, the app was for Android only, and animations and multiple device support were not implemented. This update addresses all of those problems and provides a much more intuitive final product. Code is available on GitHub
My V1 lightbar prototype had various connection and useability problems.
I built a second lightbar, re-wrote the arduino and ESP8266 firmware, and created a brand new app for control.
This time around, I decided to develop the app using the Flutter SDK so the app can be easily compiled for both Android and IOS. Additionally, I updated the connection protocol from a TCP Socket interface to a WebSocket interface. This greatly improves the reliability of the connection between the app and the lightbar. Finally, the lighbar serves a simple web interface for direct control without use of the app, adding control functionality to any device with a WiFi connection and internet browser. There have been few hardware updates since V1 but the ones that have been made are notable. I adapted the perf-board circuit design into a custom PCB layout which will make the hardware much more robust and greatly cut down on manufacturing time for additional prototypes.
To create the exact interface I wanted required a significant amount of tinkering within Flutter but, in the end, I'm glad I stuck it out. The centerpiece of the app is the color wheel color picker which is a major usability improvement over the color sliders from version 1. The Flutter API allowed me to create the color wheel as a self-contained widget that can also be used elsewhere in the app. This allows me to use the same color picker to control the lightbar live on the main screen and to select a color for a keyframe in a popup dialog. Another major feature is the new preset system that shows the color saved into the preset on the UI making presets much more intuitive.
Learning a new language and framework presented a number of new challenges but going into the project, I felt that the benefits of using the Flutter framework greatly outweighed the difficulties. Once I made it over the initial learning curve, developing with the flutter framework was a breeze and felt very familiar as I could use it right within Android Studio. The hardware didn't present any new challenges this time around and designing a custom PCB was a breeze using EasyEDA and my circuit diagram from Version 1.
There's still quite a bit of work to do mostly on the animation engine and support for connecting multiple devices but I'm equipped to knock it out in my spare time during the school year. The final product is coming soon.