diff --git a/README.md b/README.md index 0f88770..2a473c1 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ Download the [Repository](https://github.com/s00500/ESPUI/archive/master.zip), G ESPUI **NEEDS** its files burnt on the SPIFFS filesystem on the ESP. **Without this ESPUI will NOT work at all** There are now two ways to do this: you can either use the upload tool or you use the library function `ESPUI.prepareFileSystem()` -#### Simple filesystem preparation (recomended) +#### Simple filesystem preparation (recomended, but currently not working well on esp32, see issues) Just open the example sketch **prepareFileSystem** and run it on the ESP, (give it 5 - 10 seconds), The library will create all needed files. @@ -81,10 +81,13 @@ Now you are set to go and use any code you want to with this library - ~~Setup SPIFFS using values in program memory~~ - ~~ESP8266 support~~ - Document slider +- New images in docu - proper return value (as int and not as string) for slider - Maybe a slider range setting, meanwhile please use map() - Improve slider stability - Improve general stability +- Multiline Labels +- PlattformIO Integration ## Documentation diff --git a/src/ESPUI.cpp b/src/ESPUI.cpp index 5c7cd57..db2a1e7 100644 --- a/src/ESPUI.cpp +++ b/src/ESPUI.cpp @@ -108,11 +108,19 @@ void writeFile(const char *path, const char *data) { Serial.println("Failed to open file for writing"); return; } + #if defined(ESP32) + if (file.print(data)) { + Serial.println("File written"); + } else { + Serial.println("Write failed"); + } + #else if (file.print(FPSTR(data))) { Serial.println("File written"); } else { Serial.println("Write failed"); } + #endif file.close(); } @@ -140,15 +148,15 @@ void ESPUIClass::prepareFileSystem() { // TODO: This is a workaround, have to find out why SPIFFS on ESP32 behaves // incredibly strangely, see issue #6 /* - deleteFile("/index.htm"); + deleteFile("/index.htm"); - deleteFile("/css/style.css"); - deleteFile("/css/normalize.css"); + deleteFile("/css/style.css"); + deleteFile("/css/normalize.css"); - deleteFile("/js/zepto.min.js"); - deleteFile("/js/controls.js"); - deleteFile("/js/slider.js"); - */ + deleteFile("/js/zepto.min.js"); + deleteFile("/js/controls.js"); + deleteFile("/js/slider.js"); + */ Serial.println("Cleanup done"); @@ -202,7 +210,7 @@ void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, return; } Control *c = - ESPUI.controls[msg.substring(msg.lastIndexOf(':') + 1).toInt()]; + ESPUI.controls[msg.substring(msg.lastIndexOf(':') + 1).toInt()]; if (msg.startsWith("bdown:")) { c->callback(*c, B_DOWN); @@ -236,7 +244,7 @@ void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, c->callback(*c, S_INACTIVE); } else if (msg.startsWith("slvalue:")) { int value = - msg.substring(msg.indexOf(':') + 1, msg.lastIndexOf(':')).toInt(); + msg.substring(msg.indexOf(':') + 1, msg.lastIndexOf(':')).toInt(); ESPUI.updateSlider(c->id, value, client->id()); c->callback(*c, SL_VALUE); } @@ -244,7 +252,7 @@ void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, } } -void ESPUIClass::label(const char *label, int color, String value) { +int ESPUIClass::label(const char *label, int color, String value) { if (labelExists(label)) { if (debug) Serial.println("UI ERROR: Element " + String(label) + @@ -264,11 +272,12 @@ void ESPUIClass::label(const char *label, int color, String value) { newL->id = cIndex; controls[cIndex] = newL; cIndex++; + return cIndex - 1; } // TODO: this still needs a range setting -void ESPUIClass::slider(const char *label, void (*callBack)(Control, int), - int color, String value) { +int ESPUIClass::slider(const char *label, void (*callBack)(Control, int), + int color, String value) { if (labelExists(label)) { if (debug) Serial.println("UI ERROR: Element " + String(label) + @@ -288,10 +297,11 @@ void ESPUIClass::slider(const char *label, void (*callBack)(Control, int), newSL->id = cIndex; controls[cIndex] = newSL; cIndex++; + return cIndex - 1; } -void ESPUIClass::button(const char *label, void (*callBack)(Control, int), - int color, String value) { +int ESPUIClass::button(const char *label, void (*callBack)(Control, int), + int color, String value) { if (labelExists(label)) { if (debug) Serial.println("UI ERROR: Element " + String(label) + @@ -313,10 +323,11 @@ void ESPUIClass::button(const char *label, void (*callBack)(Control, int), newB->id = cIndex; controls[cIndex] = newB; cIndex++; + return cIndex - 1; } -void ESPUIClass::switcher(const char *label, bool startState, - void (*callBack)(Control, int), int color) { +int ESPUIClass::switcher(const char *label, bool startState, + void (*callBack)(Control, int), int color) { if (labelExists(label)) { if (debug) Serial.println("UI ERROR: Element " + String(label) + @@ -333,10 +344,11 @@ void ESPUIClass::switcher(const char *label, bool startState, newS->id = cIndex; controls[cIndex] = newS; cIndex++; + return cIndex - 1; } -void ESPUIClass::pad(const char *label, bool center, - void (*callBack)(Control, int), int color) { +int ESPUIClass::pad(const char *label, bool center, + void (*callBack)(Control, int), int color) { if (labelExists(label)) { if (debug) Serial.println("UI ERROR: Element " + String(label) + @@ -355,6 +367,7 @@ void ESPUIClass::pad(const char *label, bool center, newP->id = cIndex; controls[cIndex] = newP; cIndex++; + return cIndex - 1; } void ESPUIClass::print(int id, String value) { @@ -510,7 +523,9 @@ void ESPUIClass::begin(const char *_title) { }); server->onNotFound( - [](AsyncWebServerRequest *request) { request->send(404); }); + [](AsyncWebServerRequest *request) { + request->send(404); + }); server->begin(); if (debug) diff --git a/src/ESPUI.h b/src/ESPUI.h index f080766..e0d874c 100644 --- a/src/ESPUI.h +++ b/src/ESPUI.h @@ -86,44 +86,44 @@ typedef struct Control { class ESPUIClass { public: - void begin(const char *_title); // Setup servers and page +void begin(const char *_title); // Setup servers and page - void prepareFileSystem(); // Initially preps the filesystem and loads a lot of stuff into SPIFFS +void prepareFileSystem(); // Initially preps the filesystem and loads a lot of stuff into SPIFFS void list(); - // Creating Elements - void label(const char *label, int color, String value = ""); // Create Label - void button(const char *label, void (*callBack)(Control, int), int color, - String value = ""); // Create Event Button - void switcher(const char *label, bool startState, - void (*callBack)(Control, int), - int color); // Create Toggle Button - void pad(const char *label, bool centerButton, void (*callBack)(Control, int), - int color); // Create Pad Control - void slider(const char *label, void (*callBack)(Control, int), int color, String value); // Create Slider Control +// Creating Elements +int label(const char *label, int color, String value = ""); // Create Label +int button(const char *label, void (*callBack)(Control, int), int color, + String value = ""); // Create Event Button +int switcher(const char *label, bool startState, + void (*callBack)(Control, int), + int color); // Create Toggle Button +int pad(const char *label, bool centerButton, void (*callBack)(Control, int), + int color); // Create Pad Control +int slider(const char *label, void (*callBack)(Control, int), int color, String value); // Create Slider Control - // Update Elements - void print(int id, String value); - void print(String label, String value); +// Update Elements +void print(int id, String value); +void print(String label, String value); - void updateSwitcher(int id, bool nValue, int clientId = -1); - void updateSwitcher(String label, bool nValue, int clientId = -1); +void updateSwitcher(int id, bool nValue, int clientId = -1); +void updateSwitcher(String label, bool nValue, int clientId = -1); - void updateSlider(int id, int nValue, int clientId = -1); - void updateSlider(String label, int nValue, int clientId = -1); +void updateSlider(int id, int nValue, int clientId = -1); +void updateSlider(String label, int nValue, int clientId = -1); - void textThem(String text, int clientId); +void textThem(String text, int clientId); - // Variables --- - const char *ui_title = "ESPUI"; // Store UI Title and Header Name - int cIndex = 0; // Control index - Control *controls[25]; - void jsonDom(AsyncWebSocketClient *client); - int getIdByLabel(String label); - bool labelExists(String label); +// Variables --- +const char *ui_title = "ESPUI"; // Store UI Title and Header Name +int cIndex = 0; // Control index +Control *controls[25]; +void jsonDom(AsyncWebSocketClient *client); +int getIdByLabel(String label); +bool labelExists(String label); private: - AsyncWebServer *server; - AsyncWebSocket *ws; +AsyncWebServer *server; +AsyncWebSocket *ws; }; extern ESPUIClass ESPUI;