Skip to content
Open
13 changes: 13 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -657,6 +657,19 @@ Graph points are saved in the browser in **localstorage** to be persistant, clea

_There are many issues with the graph component currently and work is ongoing. Consider helping us out with development!_

Upgrade From Version 2.2.3 to 2.3.1

A significant change that breaks backwards compatibility with 2.2.3 and earlier based applications has been made in this upgrade.

All of the control type and control color enums and definitions have been moved inside of the control class public name space. This means that the usage of the Type and Color values now requires the Control::Type and Control::Color prefixes

To do this:

- Replace all instances of ControlType with Control::Type
- Replace all instances of ControlColor with Control::Color
- If your code has been created directly using the control type without the scope, then you will need to add Control::Type:: in front of the type usage. Ex. Control::Type::Button
- If your code has been created directly using the control color without the scope, then you will need to add Control::Color:: in front of the color usage. Ex. Control::Color::Carrot

### Captive Portal

ESPUI will redirect all unknown URLs it is asked for to the 'root' of the local HTTP server instead of responding with an HTTP code 404. This makes it act as a simple 'captive portal'. Note you must also set up the ESP to be a DNS server that responds to all DNS requests with the IP address of the ESP. This only effective when the ESP is acting as a WiFi hotspot in AP mode and assigning itself as the DNS server to connected clients.
Expand Down
198 changes: 99 additions & 99 deletions examples/completeExample/completeExample.cpp

Large diffs are not rendered by default.

202 changes: 101 additions & 101 deletions examples/completeLambda/completeLambda.ino

Large diffs are not rendered by default.

36 changes: 18 additions & 18 deletions examples/gui-generic-api/gui-generic-api.ino
Original file line number Diff line number Diff line change
Expand Up @@ -77,15 +77,15 @@ void buttonExample(Control* sender, int type, void* param)
Serial.println("Status: Start");
ESPUI.updateControlValue(status, "Start");

ESPUI.getControl(button1)->color = ControlColor::Carrot;
ESPUI.getControl(button1)->color = Control::Color::Carrot;
ESPUI.updateControl(button1);
break;

case B_UP:
Serial.println("Status: Stop");
ESPUI.updateControlValue(status, "Stop");

ESPUI.getControl(button1)->color = ControlColor::Peterriver;
ESPUI.getControl(button1)->color = Control::Color::Peterriver;
ESPUI.updateControl(button1);
break;
}
Expand Down Expand Up @@ -252,33 +252,33 @@ void setup(void)
{ HeapSelectIram doAllocationsInIRAM;
#endif

status = ESPUI.addControl(ControlType::Label, "Status:", "Stop", ControlColor::Turquoise);
status = ESPUI.addControl(Control::Type::Label, "Status:", "Stop", Control::Color::Turquoise);

uint16_t select1 = ESPUI.addControl(
ControlType::Select, "Select:", "", ControlColor::Alizarin, Control::noParent, &selectExample);
Control::Type::Select, "Select:", "", Control::Color::Alizarin, Control::noParent, &selectExample);

ESPUI.addControl(ControlType::Option, "Option1", "Opt1", ControlColor::Alizarin, select1);
ESPUI.addControl(ControlType::Option, "Option2", "Opt2", ControlColor::Alizarin, select1);
ESPUI.addControl(ControlType::Option, "Option3", "Opt3", ControlColor::Alizarin, select1);
ESPUI.addControl(Control::Type::Option, "Option1", "Opt1", Control::Color::Alizarin, select1);
ESPUI.addControl(Control::Type::Option, "Option2", "Opt2", Control::Color::Alizarin, select1);
ESPUI.addControl(Control::Type::Option, "Option3", "Opt3", Control::Color::Alizarin, select1);

ESPUI.addControl(
ControlType::Text, "Text Test:", "a Text Field", ControlColor::Alizarin, Control::noParent, &textCall);
Control::Type::Text, "Text Test:", "a Text Field", Control::Color::Alizarin, Control::noParent, &textCall);

millisLabelId = ESPUI.addControl(ControlType::Label, "Millis:", "0", ControlColor::Emerald, Control::noParent);
millisLabelId = ESPUI.addControl(Control::Type::Label, "Millis:", "0", Control::Color::Emerald, Control::noParent);
button1 = ESPUI.addControl(
ControlType::Button, "Push Button", "Press", ControlColor::Peterriver, Control::noParent, &buttonCallback);
Control::Type::Button, "Push Button", "Press", Control::Color::Peterriver, Control::noParent, &buttonCallback);
ESPUI.addControl(
ControlType::Button, "Other Button", "Press", ControlColor::Wetasphalt, Control::noParent, &buttonExample, (void*)19);
Control::Type::Button, "Other Button", "Press", Control::Color::Wetasphalt, Control::noParent, &buttonExample, (void*)19);
ESPUI.addControl(
ControlType::PadWithCenter, "Pad with center", "", ControlColor::Sunflower, Control::noParent, &padExample);
ESPUI.addControl(ControlType::Pad, "Pad without center", "", ControlColor::Carrot, Control::noParent, &padExample);
Control::Type::PadWithCenter, "Pad with center", "", Control::Color::Sunflower, Control::noParent, &padExample);
ESPUI.addControl(Control::Type::Pad, "Pad without center", "", Control::Color::Carrot, Control::noParent, &padExample);
switchOne = ESPUI.addControl(
ControlType::Switcher, "Switch one", "", ControlColor::Alizarin, Control::noParent, &switchExample);
Control::Type::Switcher, "Switch one", "", Control::Color::Alizarin, Control::noParent, &switchExample);
ESPUI.addControl(
ControlType::Switcher, "Switch two", "", ControlColor::None, Control::noParent, &otherSwitchExample);
ESPUI.addControl(ControlType::Slider, "Slider one", "30", ControlColor::Alizarin, Control::noParent, &slider);
ESPUI.addControl(ControlType::Slider, "Slider two", "100", ControlColor::Alizarin, Control::noParent, &slider);
ESPUI.addControl(ControlType::Number, "Number:", "50", ControlColor::Alizarin, Control::noParent, &numberCall);
Control::Type::Switcher, "Switch two", "", Control::Color::None, Control::noParent, &otherSwitchExample);
ESPUI.addControl(Control::Type::Slider, "Slider one", "30", Control::Color::Alizarin, Control::noParent, &slider);
ESPUI.addControl(Control::Type::Slider, "Slider two", "100", Control::Color::Alizarin, Control::noParent, &slider);
ESPUI.addControl(Control::Type::Number, "Number:", "50", Control::Color::Alizarin, Control::noParent, &numberCall);

/*
* .begin loads and serves all files from PROGMEM directly.
Expand Down
30 changes: 15 additions & 15 deletions examples/gui/gui.ino
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ DNSServer dnsServer;
#ifndef CORE_MOCK
#ifndef MMU_IRAM_HEAP
#warning Try MMU option '2nd heap shared' in 'tools' IDE menu (cf. https://arduino-esp8266.readthedocs.io/en/latest/mmu.html#option-summary)
#warning use decorators: { HeapSelectIram doAllocationsInIRAM; ESPUI.addControl(...) ... } (cf. https://arduino-esp8266.readthedocs.io/en/latest/mmu.html#how-to-select-heap)
#warning use decorators: { HeapSelectIram doAllocationsInIRAM; ESPUI.addControl(Control::Type::...) ... } (cf. https://arduino-esp8266.readthedocs.io/en/latest/mmu.html#how-to-select-heap)
#warning then check http://<ip>/heap
#endif // MMU_IRAM_HEAP
#ifndef DEBUG_ESP_OOM
Expand Down Expand Up @@ -242,20 +242,20 @@ void setup(void)
{ HeapSelectIram doAllocationsInIRAM;
#endif

statusLabelId = ESPUI.label("Status:", ControlColor::Turquoise, "Stop");
millisLabelId = ESPUI.label("Millis:", ControlColor::Emerald, "0");
ESPUI.button("Push Button", &buttonCallback, ControlColor::Peterriver, "Press");
ESPUI.button("Other Button", &buttonExample, ControlColor::Wetasphalt, "Press", (void*)19);
ESPUI.padWithCenter("Pad with center", &padExample, ControlColor::Sunflower);
ESPUI.pad("Pad without center", &padExample, ControlColor::Carrot);
testSwitchId = ESPUI.switcher("Switch one", &switchExample, ControlColor::Alizarin, false);
ESPUI.switcher("Switch two", &otherSwitchExample, ControlColor::None, true);
ESPUI.slider("Slider one", &slider, ControlColor::Alizarin, 30);
ESPUI.slider("Slider two", &slider, ControlColor::None, 100);
ESPUI.text("Text Test:", &textCall, ControlColor::Alizarin, "a Text Field");
ESPUI.number("Numbertest", &numberCall, ControlColor::Alizarin, 5, 0, 10);

graphId = ESPUI.graph("Graph Test", ControlColor::Wetasphalt);
statusLabelId = ESPUI.label("Status:", Control::Color::Turquoise, "Stop");
millisLabelId = ESPUI.label("Millis:", Control::Color::Emerald, "0");
ESPUI.button("Push Button", &buttonCallback, Control::Color::Peterriver, "Press");
ESPUI.button("Other Button", &buttonExample, Control::Color::Wetasphalt, "Press", (void*)19);
ESPUI.padWithCenter("Pad with center", &padExample, Control::Color::Sunflower);
ESPUI.pad("Pad without center", &padExample, Control::Color::Carrot);
testSwitchId = ESPUI.switcher("Switch one", &switchExample, Control::Color::Alizarin, false);
ESPUI.switcher("Switch two", &otherSwitchExample, Control::Color::None, true);
ESPUI.slider("Slider one", &slider, Control::Color::Alizarin, 30);
ESPUI.slider("Slider two", &slider, Control::Color::None, 100);
ESPUI.text("Text Test:", &textCall, Control::Color::Alizarin, "a Text Field");
ESPUI.number("Numbertest", &numberCall, Control::Color::Alizarin, 5, 0, 10);

graphId = ESPUI.graph("Graph Test", Control::Color::Wetasphalt);

/*
* .begin loads and serves all files from PROGMEM directly.
Expand Down
42 changes: 21 additions & 21 deletions examples/tabbedGui/tabbedGui.ino
Original file line number Diff line number Diff line change
Expand Up @@ -76,15 +76,15 @@ void buttonExample(Control* sender, int type, void* param)
Serial.println("Status: Start");
ESPUI.updateControlValue(status, "Start");

ESPUI.getControl(button1)->color = ControlColor::Carrot;
ESPUI.getControl(button1)->color = Control::Color::Carrot;
ESPUI.updateControl(button1);
break;

case B_UP:
Serial.println("Status: Stop");
ESPUI.updateControlValue(status, "Stop");

ESPUI.getControl(button1)->color = ControlColor::Peterriver;
ESPUI.getControl(button1)->color = Control::Color::Peterriver;
ESPUI.updateControl(button1);
break;
}
Expand Down Expand Up @@ -250,33 +250,33 @@ void setup(void)
{ HeapSelectIram doAllocationsInIRAM;
#endif

uint16_t tab1 = ESPUI.addControl(ControlType::Tab, "Settings 1", "Settings 1");
uint16_t tab2 = ESPUI.addControl(ControlType::Tab, "Settings 2", "Settings 2");
uint16_t tab3 = ESPUI.addControl(ControlType::Tab, "Settings 3", "Settings 3");
uint16_t tab1 = ESPUI.addControl(Control::Type::Tab, "Settings 1", "Settings 1");
uint16_t tab2 = ESPUI.addControl(Control::Type::Tab, "Settings 2", "Settings 2");
uint16_t tab3 = ESPUI.addControl(Control::Type::Tab, "Settings 3", "Settings 3");

// shown above all tabs
status = ESPUI.addControl(ControlType::Label, "Status:", "Stop", ControlColor::Turquoise);
status = ESPUI.addControl(Control::Type::Label, "Status:", "Stop", Control::Color::Turquoise);

uint16_t select1
= ESPUI.addControl(ControlType::Select, "Select:", "", ControlColor::Alizarin, tab1, &selectExample);
ESPUI.addControl(ControlType::Option, "Option1", "Opt1", ControlColor::Alizarin, select1);
ESPUI.addControl(ControlType::Option, "Option2", "Opt2", ControlColor::Alizarin, select1);
ESPUI.addControl(ControlType::Option, "Option3", "Opt3", ControlColor::Alizarin, select1);
= ESPUI.addControl(Control::Type::Select, "Select:", "", Control::Color::Alizarin, tab1, &selectExample);
ESPUI.addControl(Control::Type::Option, "Option1", "Opt1", Control::Color::Alizarin, select1);
ESPUI.addControl(Control::Type::Option, "Option2", "Opt2", Control::Color::Alizarin, select1);
ESPUI.addControl(Control::Type::Option, "Option3", "Opt3", Control::Color::Alizarin, select1);

ESPUI.addControl(ControlType::Text, "Text Test:", "a Text Field", ControlColor::Alizarin, tab1, &textCall);
ESPUI.addControl(Control::Type::Text, "Text Test:", "a Text Field", Control::Color::Alizarin, tab1, &textCall);

// tabbed controls
ESPUI.addControl(ControlType::Label, "Millis:", "0", ControlColor::Emerald, tab1);
ESPUI.addControl(Control::Type::Label, "Millis:", "0", Control::Color::Emerald, tab1);
button1 = ESPUI.addControl(
ControlType::Button, "Push Button", "Press", ControlColor::Peterriver, tab1, &buttonCallback);
ESPUI.addControl(ControlType::Button, "Other Button", "Press", ControlColor::Wetasphalt, tab1, &buttonExample, (void*)19);
ESPUI.addControl(ControlType::PadWithCenter, "Pad with center", "", ControlColor::Sunflower, tab2, &padExample);
ESPUI.addControl(ControlType::Pad, "Pad without center", "", ControlColor::Carrot, tab3, &padExample);
switchOne = ESPUI.addControl(ControlType::Switcher, "Switch one", "", ControlColor::Alizarin, tab3, &switchExample);
ESPUI.addControl(ControlType::Switcher, "Switch two", "", ControlColor::None, tab3, &otherSwitchExample);
ESPUI.addControl(ControlType::Slider, "Slider one", "30", ControlColor::Alizarin, tab1, &slider);
ESPUI.addControl(ControlType::Slider, "Slider two", "100", ControlColor::Alizarin, tab3, &slider);
ESPUI.addControl(ControlType::Number, "Number:", "50", ControlColor::Alizarin, tab3, &numberCall);
Control::Type::Button, "Push Button", "Press", Control::Color::Peterriver, tab1, &buttonCallback);
ESPUI.addControl(Control::Type::Button, "Other Button", "Press", Control::Color::Wetasphalt, tab1, &buttonExample, (void*)19);
ESPUI.addControl(Control::Type::PadWithCenter, "Pad with center", "", Control::Color::Sunflower, tab2, &padExample);
ESPUI.addControl(Control::Type::Pad, "Pad without center", "", Control::Color::Carrot, tab3, &padExample);
switchOne = ESPUI.addControl(Control::Type::Switcher, "Switch one", "", Control::Color::Alizarin, tab3, &switchExample);
ESPUI.addControl(Control::Type::Switcher, "Switch two", "", Control::Color::None, tab3, &otherSwitchExample);
ESPUI.addControl(Control::Type::Slider, "Slider one", "30", Control::Color::Alizarin, tab1, &slider);
ESPUI.addControl(Control::Type::Slider, "Slider two", "100", Control::Color::Alizarin, tab3, &slider);
ESPUI.addControl(Control::Type::Number, "Number:", "50", Control::Color::Alizarin, tab3, &numberCall);

/*
* .begin loads and serves all files from PROGMEM directly.
Expand Down
9 changes: 4 additions & 5 deletions pio_examples/gui/platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,8 @@ framework = arduino
board_build.filesystem = littlefs
lib_extra_dirs = ../../
lib_deps =
; bblanchon/ArduinoJson @ ^6.18.5
bblanchon/ArduinoJson @ ^7.0.4
https://github.com/bmedici/ESPAsyncWebServer ; Use a fork of the library that has a bugfix for the compile.... https://github.com/esphome/ESPAsyncWebServer/pull/17

lib_ignore =
ESP Async WebServer ; force the use of the esphome version
AsyncTCP ; force the use of the esphome version
Expand All @@ -36,6 +34,8 @@ board = nodemcuv2
upload_port = COM8
monitor_port = COM8
monitor_speed = 115200
build_flags =
; -D DEBUG_ESPUI

[env:esp32]
platform = espressif32
Expand All @@ -44,10 +44,9 @@ monitor_filters = esp32_exception_decoder
board_build.flash_mode = dout
build_flags =
; -D DEBUG_ESPUI

lib_deps =
${env.lib_deps}
me-no-dev/AsyncTCP
upload_port = COM6
monitor_port = COM6
upload_port = COM10
monitor_port = COM10
monitor_speed = 115200
41 changes: 21 additions & 20 deletions pio_examples/gui/src/gui.ino
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,15 @@ void numberCall(Control* sender, int type)
void textCall(Control* sender, int type)
{
Serial.print("Text: ID: ");
Serial.print(sender->id);
Serial.print(sender->GetId());
Serial.print(", Value: ");
Serial.println(sender->value);
}

void slider(Control* sender, int type)
{
Serial.print("Slider: ID: ");
Serial.print(sender->id);
Serial.print(sender->GetId());
Serial.print(", Value: ");
Serial.println(sender->value);
// Like all Control Values in ESPUI slider values are Strings. To use them as int simply do this:
Expand Down Expand Up @@ -130,7 +130,7 @@ void padExample(Control* sender, int value)
}

Serial.print(" ");
Serial.println(sender->id);
Serial.println(sender->GetId());
}

void switchExample(Control* sender, int value)
Expand All @@ -147,7 +147,7 @@ void switchExample(Control* sender, int value)
}

Serial.print(" ");
Serial.println(sender->id);
Serial.println(sender->GetId());
}

void otherSwitchExample(Control* sender, int value)
Expand All @@ -164,14 +164,15 @@ void otherSwitchExample(Control* sender, int value)
}

Serial.print(" ");
Serial.println(sender->id);
Serial.println(sender->GetId());
}

void setup(void)
{
ESPUI.setVerbosity(Verbosity::VerboseJSON);
Serial.begin(115200);


memset(HugeText, 0x0, sizeof(HugeText));
memset(HugeText, 'a', sizeof(HugeText)-1);

Expand Down Expand Up @@ -237,26 +238,26 @@ void setup(void)
Serial.print("IP address: ");
Serial.println(WiFi.getMode() == WIFI_AP ? WiFi.softAPIP() : WiFi.localIP());

statusLabelId = ESPUI.label("Status:", ControlColor::Turquoise, "Stop");
millisLabelId = ESPUI.label("Millis:", ControlColor::Emerald, "0");
ESPUI.button("Push Button", &buttonCallback, ControlColor::Peterriver, "Press");
ESPUI.button("Other Button", &buttonExample, ControlColor::Wetasphalt, "Press", (void*)19);
ESPUI.padWithCenter("Pad with center", &padExample, ControlColor::Sunflower);
ESPUI.pad("Pad without center", &padExample, ControlColor::Carrot);
testSwitchId = ESPUI.switcher("Switch one", &switchExample, ControlColor::Alizarin, false);
ESPUI.switcher("Switch two", &otherSwitchExample, ControlColor::None, true);
ESPUI.slider("Slider one", &slider, ControlColor::Alizarin, 30, 0, 30);
ESPUI.slider("Slider two", &slider, ControlColor::None, 100);
ESPUI.text("Text Test:", &textCall, ControlColor::Alizarin, "a Text Field");
statusLabelId = ESPUI.label("Status:", Control::Color::Turquoise, "Stop");
millisLabelId = ESPUI.label("Millis:",Control::Color::Emerald, "0");
ESPUI.button("Push Button", &buttonCallback,Control::Color::Peterriver, "Press");
ESPUI.button("Other Button", &buttonExample,Control::Color::Wetasphalt, "Press", (void*)19);
ESPUI.padWithCenter("Pad with center", &padExample,Control::Color::Sunflower);
ESPUI.pad("Pad without center", &padExample,Control::Color::Carrot);
testSwitchId = ESPUI.switcher("Switch one", &switchExample,Control::Color::Alizarin, false);
ESPUI.switcher("Switch two", &otherSwitchExample,Control::Color::None, true);
ESPUI.slider("Slider one", &slider,Control::Color::Alizarin, 30, 0, 30);
ESPUI.slider("Slider two", &slider,Control::Color::None, 100);
ESPUI.text("Text Test:", &textCall,Control::Color::Alizarin, "a Text Field");

ESPUI.text("Huge Text Test:", &textCall, ControlColor::Alizarin, HugeText);
ESPUI.text("Huge Text Test:", &textCall,Control::Color::Alizarin, HugeText);

ESPUI.number("Numbertest", &numberCall, ControlColor::Alizarin, 5, 0, 10);
ESPUI.number("Numbertest", &numberCall,Control::Color::Alizarin, 5, 0, 10);

fileDisplayId = ESPUI.fileDisplay("Filetest", ControlColor::Turquoise, DisplayTestFileName);
fileDisplayId = ESPUI.fileDisplay("Filetest",Control::Color::Turquoise, DisplayTestFileName);

#ifdef TEST_GRAPH
graphId = ESPUI.graph("Graph Test", ControlColor::Wetasphalt);
graphId = ESPUI.graph("Graph Test",Control::Color::Wetasphalt);
#endif // def TEST_GRAPH

/*
Expand Down
Loading