ESPixelStick ESP32 Build (Alpha)
First off, FYI- there is a new release of ESPIxelStick v.3.2 that fixes the Mac flashing issues that have been a problem for v3.1. If you are running the original ESPixelSticks, or NodeMCUs based on ESP12, like D1 Mini or similar- get that release as it is pre-compiled and just works.
https://github.com/forkineye/ESPixelStick
Note: I am just covering my experience and outlining the process of compiling (building) the firmware for ESP32. I am not covering the basics of how to use the Arduino IDE to install libraries and compile/flash code to an MCU. There are other resources for that. This is for those already comfortable doing so that might need a few tips to get it to work. It’s not very difficult, but this isn’t a detailed tutorial.
If you are experimenting, like me, with ESP32 dev boards, I was able to get the soon-to-be (hopefully) ESPixelStick v.4 to work. I have not tested SD card support as I am just building on stock ESP32 boards (Heltec and Expressif clones).
One of the first things you will need to do is add the following URL to your Boards Manager. This will enable ESP32 support in Arduino IDE:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
You need to download the latest “Unify” branch from the ForkInEye Github. Specifically this is the one I was able to compile, although newer commits may also work fine:
https://github.com/forkineye/ESPixelStick/commit/7b31be497e626bc2a1f9dcf80b964da98d374616
The major changes in this new version (that I know of) are:
- Support for ESP32!
- Uses LittleFS instead of SPIFFS for Web file system.
- Supports SD card for FPP-Remote functionality (TBD)
- Supports DDP protocol (!)
ESP32 is a big deal for me an others, because the ESP32 has a much better WiFi radio, and of-course is a faster processor. DDP is also huge- as most new Pixel controllers prefer it to E1.31. DDP is significantly more efficient and much easier to set up.
You can find out more about DDP here:
http://www.3waylabs.com/ddp/
You must use the Arduino IDE and install all of the prerequisites in the README file. Be sure to use the links provided! In some cases there are multiple versions/releases of a library using the same name, and they can have different functionality. It’s almost a footnote in the README- but be sure to install the “LittleFS-32” library. It’s a standard library in Aruino IDE.
Note: I really wanted to make this work with VS-Code and PlatformIO, since almost everyone, including me, has moved away from Arduino IDE. Unfortunately I couldn’t get it to work, so had to dust off Ardino IDE for this. I hope Shelby or one of the other developers working on this will set it up with a proper PlatformIO configuration. VS-Code is significantly faster and has a better debugging and managed library system.
Note that if you have already installed ESP32fs-plugin for other projects, this one needs a specific fork of it to support LittleFS. It is here:
https://github.com/lorol/arduino-esp32fs-plugin
I copied the .jar file to {arduino root}/tools/ESP32FS/tool, overwriting the stock one that is there. If you haven’t already installed ESP32FS- follow the instructions on the page for setting up the tools folder.
You also need to download the correct mklittlefs utility for your OS, and copy it to the same folder as the above. You can download here:
https://github.com/earlephilhower/mklittlefs/releases
After getting the prerequisites, I ran the ESP32fs (Sketch Data Upload) utility first, which calls mklittlefs. The mklittlefs utility has an option to “Erase Flash”. I did this first so I was starting from a clean slate. I recommend doing this even on new boards, as some come with pre-loaded WiFi AP or other code.
One thing of note- there is no WiFi setting section in ESPixelStick.ino. If you compile and upload it as-is, it won’t connect to WiFi because it keeps trying to connect to “DEFAULT_SSID_NOT_SET”.
If you read the comments in WiFiMgr.cpp, you can either provide your WiFi SSID and password there, or in a file called “secrets.h”. The latter is preferred. Just create a file called “secrets.h” with the following in it:
#define SECRETS_SSID "YourWiFiSSID"
#define SECRETS_PASS "YourWiFiLogin"
You will have to create the file using a text editor or another code editor, since ArduinoIDE won’t edit .h files. (One of many reasons to move away from it.)
Once you have that done- you should be able to compile and upload the sketch to the ESP32!
Similar to setting up the older ESP devices, you will also need to install gulp-cli, and run gulp in the build root to minify and organize the Web UI in the /data folder. Instructions are in the README for this, and you should already be familiar with this if you have built any other version of ESPixelStick.
You will need to upload the WebUI to the ESP32 using the Tools -> “ESP32 Sketch Data Upload” utility, you will get a new dialog that will prompt for the file system to use. Select “LittleFS”, which should be the default, and click OK.
As of the commit I tested on Nov. 5th, everything seems to be working EXCEPT the network settings in the “Network Configuration” tab. Nothing will save out of there, so for now- you are stuck with setting WiFi info in the source and living with DHCP. I know Shelby and others are working on it, but they have their hands full with other things as well. If anything- set up DHCP reservations on your router so at least your IPs will be consistent.
I tested it with DDP output from xLights in test mode and using a sequence, and it seems to work just fine. I didn’t test E1.31, but I’m assuming it will be okay as-well. I’m mostly interested in DDP.
The new ESPixelStick hardware has an SD card built-in and uses a D1 Mini ESP. This is supposed to enable FPP-Remote functionality, but as of now- there isn’t any actual release firmware for it. You can buy the ESPixelStick, and support Shelby’s efforts, here:
https://www.amazon.com/ESPixelStick-Wireless-DMX-Pixel-Controller/dp/B072XT1V77/
I believe there are some SD Card “Hats” for the D1 Mini as-well. Unfortunately none of these are ESP32. I don’t know if there is an ESP32 SD card hat/cape/whatever. I will dig into that more after the holidays. I have not tried compiling this for the D1 Mini, but it should work similarly.
So- it’s “Alpha” but seems pretty close. Not sure if it will be done in time to take advantage of this year. It doesn’t have the overhead of WLED so at least in-theory should work better on ESP32 hardware. I don’t plan to use it this year, but definitely want to look at it again for next year. I still have some WiFi props that I would like to keep that way, and I’m not sure WLED is going to pan out, although they are also working on a DDP release!