I started this project as a gift for my little cousin. The goal was to create an LED strip that could be controlled by a kid via touchscreen. The graphical layout is based on Googles Material Design Guidelines.
FASTLED_RGBW
in custom_values.h
.Using VisualStudio Code and the PlatformIO Extension the necessary libraries are installed automatically vis platformio.ini
.
Here is the Dependency Graph with the latest successfully tested versions.
Dependency Graph
|-- <Homie> 3.0.1
| |-- <ArduinoJson> 6.11.5
| |-- <AsyncMqttClient> 0.8.2
| | |-- <ESPAsyncTCP> 1.2.0
| | | |-- <ESP8266WiFi> 1.0
| |-- <Bounce2> 2.55.0
| |-- <ESP Async WebServer> 1.2.3
| | |-- <ESPAsyncTCP> 1.2.0
| | | |-- <ESP8266WiFi> 1.0
| | |-- <Hash> 1.0
| | |-- <ESP8266WiFi> 1.0
| | |-- <ArduinoJson> 6.11.5
| |-- <Ticker> 1.0
| |-- <ESP8266WiFi> 1.0
| |-- <DNSServer> 1.1.1
| | |-- <ESP8266WiFi> 1.0
| |-- <ESP8266HTTPClient> 1.2
| | |-- <ESP8266WiFi> 1.0
| |-- <ESPAsyncTCP> 1.2.0
| | |-- <ESP8266WiFi> 1.0
| |-- <ESP8266mDNS> 1.2
| | |-- <ESP8266WiFi> 1.0
|-- <ArduinoJson> 6.11.5
|-- <ESPAsyncTCP> 1.2.0
| |-- <ESP8266WiFi> 1.0
|-- <DHT sensor library> 1.4.0
| |-- <Adafruit Unified Sensor> 1.1.4
|-- <DallasTemperature> 3.9.1
| |-- <OneWire> 2.3.5
|-- <OneWire> 2.3.5
|-- <Nextion> 0.0.0+20201108223110.sha.b8e2a3b
| |-- <EspSoftwareSerial> 6.8.5
|-- <Embedis> 1.2.0
|-- <Adafruit Unified Sensor> 1.1.4
|-- <elapsedMillis> 1.0.6
|-- <FastLED> 3.3.3
| |-- <SPI> 1.0
| |-- <EspSoftwareSerial> 6.8.5
|-- <EEPROM> 1.0
|-- <EspSoftwareSerial> 6.8.5
In case you want to edit the content of the display to use other theme colors or add/replace some LED patterns, you also need the following programs.
Only tested and used with Windows 10.
Before you can start to compile the project you need to make some changes to the Nextion library.
This is already done in the branch linked in the platformio.ini
.
Open the following file with a text editor.
C:\Users\<username>\Documents\Arduino\libraries\ITEADLIB_Arduino_Nextion\NexConfig.h
Disable debug by commenting it.
//#define DEBUG_SERIAL_ENABLE
And replace
//#define nexSerial Serial
with
#include <SoftwareSerial.h>
extern SoftwareSerial HMISerial;
#define nexSerial HMISerial
see:
You also might want to change some custom values in custom_values.h
.
Like DISPLAY_TITLE
, DATA_PIN
, NUM_LEDS
, LEDS_PER_METER
, LED_TYPE
or COLOR_ORDER
.
When using the custom FastLED library you are also able to use RGBW SK6812 strips and DMA mode by defining these features.
First you need to combine the hardware components.
There is also a pcb view when you are done testing. (not tested!)
Next you need to compile and upload the Arduino sketch to your device. After you installed the libraries you define the parameters of your device before you can hit the upload button.
Be aware to not connect the LED stripe while the system is only powered by usb via the Arduino, because this will put to much power through the Arduino. I recomment to disconnect the LED strip and the display while programming the Arduino.
After this you copy the compiled HMI file (will be uploaded to the release page) to an FAT32 formatted microSD card, plug it into the display, and connect power to the display. This will automatically start the flashing of the firmware.
Since version 3.1.0
SuperLEDstrip supports controlling a WLED device.
WLED_JSON_URL
in custom_values.h
befor compiling0.12.0
.You can configure the purpose of your buttons in custom_values.h
.
Like changing tha state of one or multiple output pins or switching between pre-defined scenes.
Just change the values of button01_do[]
.
You can also define some output pins in custom_values.h
.
They can be inverted and you can define the initial state at start up.
Let's say you want to add an LED pattern you developed as the function mynewpattern()
.
First you need to add the pattern in SuperLEDstripe.ino
if you create a new animation.
If your are only ading a new color pattern for an existing animation (like runningPalette
) you can skip this part.
// Pattern IDs 0 1 2 3 4 5 6 7 8 9 10
SimplePatternList gPatterns = { oneColor, stars, confetti, rainbow, bpm, kitt, flashingLights, runningPalette, xmas, Fire2012, mynewpattern};
Add the new secen to the setScene()
function in led_functions.h
.
case 304: // swedish flag
setupPaletteSweden();
break;
While you are developing you might want to change the default scene to be your new one.
#define DEFAULT_SCENE 304
To start the pattern from a cell (virtual button) from the display, you add the pattern to the according callback function in nextion_callback_functions.h
.
Here it is p01c07PopCallback
(p01 = page 1; c07 = cell 7).
void p01c07PopCallback(void *ptr) { gCurrentPatternNumber = 10; }
You also need to change the graphics of the display, if you add a new pattern. First you need to download some pictures from the internet that are not includes in this project.
./Display/exported/get_images.sh
Now you can open the Display\exported\display_matarial_design.svg
with Inkscape and enable the object manger.
Next you insert or create your new graphic (we will call it "tile" on top of the cell and group this with the object manager under the tile group of your choice (e.g. "tiles specials").
This is necessary, because the export script will automatically mark the different tile groups as (in-)visible.
In case you manually export the graphics you might want to change the theme colors and make the individual groups (in-)visible before each export.
For each tile group (settings, flags, ...) you need two exports. One with the pressed
group disabled and one with it enabled.
The export script Display\exported\create_colored_svg_custom.bat
will do all this automatically.
To use other theme colors you can change these in line 20.
call:SetColor dark, white
If you run create_colored_svg.bat
the script will create all possible color combinations according to Googles material design color palette.
It took my computer about 24 hours to do this!
After the graphics are exported you need to replace the old ones in the Nextion file.
Open Display\400x240_black_white_light.HMI
with the Nextion Editor.
Each tabulator of the interface has two pictures within the Nextion file. One with and one without 'pressed' objects.
So for the first tab you need to replace pictures 1 and 2.
Then you select the page (top right corner) and the tile you want the new pattern to be displayed at (here: p01c07
) and change the attributes (bottem right) picc
to 1
and picc2
to 2
.
Now you can see the result by clicking Debug
or hit Compile
to create a binary file. Put this file (File | Open build folder) in the root directory of your microSD card , put it into the display, connect power and wait while the new firmware is flashed.
With the integration of homie-esp8266 there comes the ability to flash the firmware via wifi.
upload_firmware.sh
scriptInstead of configuriong your device via the Config-Mode of Homie, you can define your Homie-Configuration in `Data/config.json'. To upload the file via Seriel (USB) connection use the following command:
pio run -t uploadfs
If you use a d1_mini_pro
board you still need to define board = d1_mini
in your platformio.ini
.
Otherwise you get an std::bad_alloc
error.
Once you got your device connected to your mqtt broker you can configure your smart home (in this case openHAB) to control SuperLEDstrip.
You can find configuration examples in the openhab
folder.