This is my custom version of the original firmware written by Jason Coon (Evil Genius Labs) for his Tree v2 project. It also adopts some of the project hierarchy, code, and patterns from his esp8266-fastled-web-server project. However, I've made many significant changes while retaining some of the core APIs.
Hardware wise, my Tree is a near-identical clone of Jason's. I replaced the XT-60 connectors for the power lines with crimped ferrules and Wago-style connectors. Otherwise, it's running a Wemos D1 Mini and 250 WS2812 LEDs, powered by a 15A 5V AC adapter.
I developed this project using PlatformIO, and recommend using that if you're compiling from source. I used Node.js and gulp for the frontend development, so I recommend those as well if you'd like to customize that. The Bulma SCSS is provided, so you can change the colors, fonts, etc. if you'd like.
👀 Video tour of the new web UI
- The frontend has been completely rewritten using Bulma CSS, Jquery roundslider, and a fairly extensive and feature-rich Javascript app.
- The fields library has been completely rewritten to facilitate the introduction of new fields in the frontend, with the corresponding endpoints dynamically generated.
- A new brightness scheduling feature has been introduced.
- The project now uses ESPAsyncWebServer for faster handling of HTTP requests and websockets.
- A custom wifi manager backend with styled frontend has been written.
- The firmware update UI and backend has been rewritten.
- All device configurations are now stored as json in the filesystem.
- The editor UI has been removed.
- The timezone field in the web UI currently lists IANA standard time zones, but the scheduler uses Espressif's time.h library, which requires POSIX time zones. I have a plan to convert from IANA to POSIX-style in the frontend, but for now this means you'll need to compile from source or upload a custom schedule.json file with the data folder if you want to change it from CDT/CST time.
- The filesystem upgrade feature does not work at this time. Uploading a pre-built FS image exceeds the storage, so I think I'll need to rewrite the Javascript to accept a ZIP (or smth.), unpack it, and upload the files one at a time to the LittleFS mount.
- The geolocation feature in the scheduler settings doesn't work because the web UI doesn't support SSL. Unfortunately, the ESPAsyncTCP library uses OpenSSL, which was removed from the Espressif SDK some time ago. There are various hints for making it work out there, but I couldn't pull it together. It seems like it might require revising ESPAsyncTCP to use BearSSL to do this. Pasting your latitude/longitude coordinates does work, though.
- I've removed Jason's other product configurations for now (though not their pattern code), but I'd like to replace them at some point in the future.
There's plenty more I'd like to add when I pull the tree out of storage again in the years to come:
- Matching frontends for the Pride Playground and Color Waves Playground patterns seem like they'd be a lot of fun.
- The ability to enable/disable certain patterns or palettes from the front end would be nice, and seems easily within reach.
- On a related note, if I'm changing the data model for patterns in the backend, I'd might as well indicate the sliders each supports so the UI can focus on only the relevant set of controls at any given time.
- Signed firmware upgrades would be a nice security upgrade.