Finally picked up an ESP8266 and got it controlling a small 24 NeoPixel Ring with FastLED, via a web app 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. 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. Is it this slow for anyone else, or just me? 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.
The firmware implements basic RESTful web services using the ESP8266WebServer library. It can run in connected or standalone access point modes. Current values are requested with HTTP GETs, and values are set with POSTs using query string parameters.
Thanks to @Juergen_Bruegl for sharing your code and inspiring me to take a crack at it myself. Thanks to @Garrett_Durland for pointing out SPIFFS! And, of course, thank you to @Daniel_Garcia and @Mark_Kriegsman for getting FastLED working on the ESP8266 and sharing all of your fantastic code!
Source code (firmware and web) is all there. It’s all pretty standard jQuery and Bootstrap. Let me know if you have any questions, comments, suggestions.
https://github.com/jasoncoon/esp8266-fastled-webserver
Oh, almost forgot. IR remote control also works! https://github.com/markszabo/IRremoteESP8266
This gives the ESP8266 a major advantage over the Photon, since nobody seems to have ported the IRremote library to the Photon yet (and I lack the skill required). Plus the lower price, better dev tools, local compile, faster compile/upload, and ability to use the FastLED master branch code instead of a fork. I think I have a new favorite dev board… 
I’ve found spiffs upload via Arduino ide is very slow… It is because the entire file system gets uploaded not just the changed or used portion.
@Jason_Coon Wow! This is exactly what I was hoping for! Thank you so much for your work.
How can I give you 100 points?
Set it up right away and was able to connect as AP or WebServer;
however when I open the URL I get on the page just a “Not found: /”.
I assume that the files of the data folder were not uploaded.
Could you please explain how to load those files into SPIFFS (Win 10)
WRT to the upload speed: On my PC it takes roughly 20 secs; regardless of Flash Mode DIO or QIO
http://www.esp8266.com/viewtopic.php?f=33&t=3838
@Jason_Coon , thank you so much for building this, it is also just what I have been trying to build/ looking for.
@Juergen_Bruegl , have you installed the SPIFFS tool? https://github.com/esp8266/arduino-esp8266fs-plugin
I love your jQuery color picker. Great work. It’s a nice improvement of the code posted by Juergen Bruegl a few days ago. I was already experimenting on it, adding some of the effects I used for my xmas light last december
Can’t wait to play with the polar coordinates lib next year. Thanks for the share.
@Jeremy_Spencer ahhh, I love this community! Now I was able to upload the data bin.
I get it in my browser, but whatever I do I can’t get it to change anything (e.g. pressing the status button or power ON/OFF or reloading the browser window). It just sits there showing white. Reflashed the code, as well as the SPIFFS. My settings for flash size are 4M(3M SPIFFS)
Uploading firmware and SPIFFS is quite a bit faster now that I increased the ‘Upload Speed’ setting. Adafruit’s instructions say to use 115200, but it seems to work fine even at 921600. SPIFFS upload takes about 30 seconds now, compared to several minutes before. 
@Jason_Coon Depending on which ESP you’re using, look at ArduinoOTA, makes the code and spiffs upload really fast.
@Jason_Coon just be careful. I already bricked one Huzzah as soon as I changed the upload speed to 256000.
No fix on that 
https://forums.adafruit.com/viewtopic.php?f=19&t=81073
great work i cant get the SPIFFS tools to show up anyhelp please have downloaded java file and put it in tools folder ?
I’ve got a D1 mini module and a nodemcu board.
http://s.aliexpress.com/Y73a6r6v
And I have the same problem as @Juergen_Bruegl . I’ve tried various pin conjugations, and will keep trying others.
The other thing I noticed is that only three patterns are uploaded to the pattern chooser.
Uploading at 921600 is fine on both boards.
When I get it working I’ll let you know.
@dave_windsor , did you get the path exactly right?
home_dir>/Arduino/tools/ESP8266FS/tool/esp8266fs.jar
@dave_windsor @Jeremy_Spencer Had the same problem first. Then I downloaded from the release page
looked in Arduino IDE preferences for the Sketchbook location (in my case: C:\Users\ASUS\Documents\Arduino )
and installed the zip file there.
@Juergen_Bruegl cool thanks ill make sure and the mini d1 has different pin outputs ill post a picture in few min hope it helps
I’m not sure, but I think the problem I have is with the java side of things. The webpage loads with just three patterns to choose from, it never manages to call the java function getAll(), so the number of patterns in the selection box is just the three hard coded into index.htm. This also means that there is no web control 
I’m using Arduino 1.6.5, ESP8266 2.1.0 (and have tried 2.0.0), and the latest FastLED.
@Jason_Coon , should there be jQuery and or bootstrap files in the data folder? Thanks 
I combined all of the js files (jQuery, Bootstrap, and my own) into the one scripts.js file, to cut down on the number of requests the browser has to make to the ESP. I did the same with the css files. The browser downloads and parses index.htm, and immediately issues simultaneous requests for all the resources specified. The ESP was crashing trying to handle them all at once. I found a few suggestions online to have everything inline in the html file, but that seemed excessive, and this strategy works fine on my board.
If you’re having problems with the web app, I would suggest making sure the sketch is working fine on its own first. Set autoplayEnabled = true on line 113, and make sure it starts up, connect to your wifi (or starts up its own access point), and then cycles through all of the patterns.
Then, if everything works fine, start troubleshooting the web app. Get used to working with your browser’s dev tools (I use Chrome, which is great). Open a new browser tab, go to the network tab in dev tools, then navigate to the index.htm page. You should see the browser’s requests for the index.html, scripts.js, styles.css, etc. If everything gets loaded, you should then see a GET request for /all. Click the On button, and you should see a POST request for /power?value=1. Each control in the web form should send a request and receive a response.
@Jason_Coon @Jeremy_Spencer
I got it !!
The app is calling for 192.168.1.24 but there is no such IP address defined in my settings.
https://drive.google.com/file/d/0B95I9Cyf8XgnazVUWFJRTlcwSG8/view
The URL is defined in \data\js\scripts.js
https://drive.google.com/file/d/0B95I9Cyf8XgnVE01bHpYd203TUE/view?usp=sharing
The solution is simple: comment out line 25 and uncomment line 26.
Upload the data bin again and now it works BEAUTYFULLY. Thanks a million to Jason for his great job !
@Juergen_Bruegl , I’ve just found the very same thing
It’s showing as lines 86 and 87 in scripts.js on my editor. Comment out line 86 and uncomment line 87. Then it works fantastically well, thank you @Jason_Coon