ESP8266 Wifi LED Pixel Table
This is the sourcecode of my project creating a Wifi LED Pixel Table with the ESP8266.
With this software it is possible to control a 7x7 LED Pixel Table with any webbrowser in the same wifi. It is possible to set a solid color or even set the color of single LEDs. You can set different color fades as well.
This project is based on and extends another github project:
This is the initial readme:
FastLED + ESP8266 Web Server
Control an addressable LED strip with an ESP8266 via a web browser or infrared remote control.
An ESP8266 development board, such as the Adafruit HUZZAH ESP8266 Breakout:
Addressable LED strip, such as the Adafruit NeoPixel Ring:
- Turn the NeoPixel Ring on and off
- Adjust the brightness
- Change the display pattern
- Adjust the color
Patterns are requested by the app from the ESP8266, so as new patterns are added, they're automatically listed in the app.
The web app is stored in SPIFFS (on-board flash memory).
The web app is a single page app with separate files for js and css, using jQuery and Bootstrap. It has buttons for On/Off, a slider for brightness, a pattern selector, and a color picker (using jQuery MiniColors). Event handlers for the controls are wired up, so you don't have to click a 'Send' button after making changes. The brightness slider and the color picker use a delayed event handler, to prevent from flooding the ESP8266 web server with too many requests too quickly.
The only drawback to SPIFFS that I've found so far is uploading the files is extremely slow, requiring several minutes, regardless of how large the files are. It's so slow that I've been just developing the web app and debugging locally on my desktop (with a hard-coded IP for the ESP8266), before uploading to SPIFFS and testing on the ESP8266.
These programs are installed via the Arduino IDE which can be downloaded here. The ESP8266 boards will need to be added to the Arduino IDE which is achieved as follows. Click File > Preferences and copy and paste the URL "http://arduino.esp8266.com/stable/package_esp8266com_index.json" into the Additional Boards Manager URLs field. Click OK. Click Tools > Boards: ... > Boards Manager. Find and click on ESP8266 (using the Search function may expedite this). Click on Install. After installation, click on Close and then select your ESP8266 board from the Tools > Board: ... menu.
These programs depend on the FastLED LED animation library and the IRremoteESP8266 library. The FastLED library can be downloaded from GitHub and placed in the Arduino 'libraries' folder or alternatively installed as described here by typing 'fastled' in the search filter box. The IRremoteESP8266 must be insalled manually by downloading and placing the uncompressed folder in the Arduino 'libraries' folder.
Download the programs from GitHub using the green Clone or Download button from the GitHub project main page and click Download ZIP. Decompress the ZIP file in your Arduino sketch folder.
The web app needs to be uploaded to the ESP8266's SPIFFS. You can do this within the Arduino IDE after installing the Arduino ESP8266FS tool.
With ESP8266FS installed run the sketch and then upload the web app using
ESP8266 Sketch Data Upload command in the Arduino Tools menu.
The web app files can be gzip compressed before uploading to SPIFFS by running the following command:
gzip -r data/
The ESP8266WebServer will automatically serve any .gz file. The file index.htm.gz will get served as index.htm, with the content-encoding header set to gzip, so the browser knows to decompress it. The ESP8266WebServer doesn't seem to like the Glyphicon fonts gzipped, though, so I decompress them with this command:
gunzip -r data/fonts/
REST Web services
The firmware implements basic RESTful web services using the ESP8266WebServer library. Current values are requested with HTTP GETs, and values are set with POSTs using query string parameters. It can run in connected or standalone access point modes.
Infrared Remote Control
Control via infrared remote control is also supported, via the ESP8266 port of the IRremote library.