The Wafer Frame is a simple decorative project. Displaying two 6" wafers (and eventually an 8" wafer in the center) is a simple 'floating' frame from Michaels, to which I added 2 meters of DotStar LED strip to, at 30 LEDs/meter.
The code to run the display is fairly simple, and is implemented in Lua using NodeMCU and an Adafruit Huzzah. The code waits for WiFi to connect and then sets its RTC based on NTP time (synchronizing to pool.ntp.org). The Lua code also connects to an MQTT broker that it uses to get control information for the current mode and an optional maximum brightness. The display has 8 modes ranging from a generic 'rainbow' effect to a party mode, 2 LED chaser modes, or seasonal fare such as christmas lights.
Came back and revisited this project more, recently. I wasn't happy with some of the code quality and as it was my first ESP / NodeMCU Lua project some of the programming strategies were... questionable, at best. So, having learned a few things from other code I'd written for this device I chose to redo the code, utilizing the proper event systems present in the firmware and also to redesign the code to use Overlays, so that I wouldn't need to worry about one mode's memory use clobbering another's.
I also took the opportunity to remove NTP time support from the program. While a nice feature and one I did appreciate, I see no reason why I couldn't just set that up running on Home Assistant or some other automation software, and make it a smarter system than a fixed uneditable value anyways. And the extra RAM it would free up (even if it wasn't much) wouldn't hurt either. The new code is now far, far simpler and didn't need to be "minified" or even compiled, for everything to fit nicely and run without a problem. And I've nearly doubled the number of modes that the frame can run, to boot!
Overall I'm quite happy with the quality of the new code and its capabilities, and while I have one or two additions in mind (telnet support being one of them), the new code is definitely working out great.
NodeMCU is great, and it really did make this project an absolute joy to work on - having built-in MQTT, SNTP, RTC, etc code really made for a very convenient coding environment. Oh course, with convenience come caveats, and in this case the caveats include extremely limited memory space.
After spending time on programming and hitting more and more memory limits, I've noticed that you really cannot do anything complex with NodeMCU (the ESP just doesn't have enough RAM), and this application alone very nearly exhausts the available memory. I already have had to compile the bulk of the program code down to an .lc file with the debugging symbols removed, and will likely have to do so again with the modes programming should I wish to add additional capabilities to the project in future.