// пример обновления виджетов #include #define AP_SSID "Alex" #define AP_PASS "alexpass" #include GyverHub hub; /* 1. Обновить можно любой параметр виджета, который он поддерживает (кроме size) 2. Отправлять обновления из билдера можно только по действию 3. Отправлять обновления из остальной программы можно в любое время Общий синтаксис: hub.update("имя").параметр(значение).параметр(значение)... */ void build(gh::Builder& b) { if (b.beginRow()) { // для обновления нужно знать имя виджета, поэтому задаём его // укажу стартовые параметры, например цвет и значение b.Input_("inp").size(3).value("hello").color(gh::Colors::Blue); // обновлять будем например по нажатию на кнопку. Кнопки для значения и цвета if (b.Button().size(1).label("value").click()) hub.update("inp").value(random(1000)); if (b.Button().label("color").click()) hub.update("inp").color(gh::Colors::Red); // если вызвать обновление вот тут (не по действию) - оно не будет отправлено! // hub.update("inp").value(random(1000)); // это не будет работать b.endRow(); } if (b.beginRow()) { b.Slider_("sld").size(3); // а тут обновим сразу несколько параметров if (b.Button().size(2).label("update").click()) { hub.update("sld").value(random(100)).color(gh::Colors::Pink).unit("°"); // такие обновления доставляются всем подключенным клиентам. Чтобы отправить // только клиенту из билда - можно передать его в update // hub.update("sld", &b.build.client).value(random(100)).color(gh::Colors::Pink).unit("°"); } b.endRow(); } if (b.beginRow()) { b.Label_("lbl").size(3); // отправка всем клиентам и только текущему if (b.Button().label("all").size(1).click()) hub.update("lbl").value("all"); if (b.Button().label("client").click()) hub.update("lbl", &b.build.client).value("client"); b.endRow(); } // также можно обновить страницу if (b.Button().label("refresh").click()) b.refresh(); // этот виджет будем обновлять ниже в loop b.Title_("tit").value("Title"); } void setup() { Serial.begin(115200); #ifdef GH_ESP_BUILD WiFi.mode(WIFI_STA); WiFi.begin(AP_SSID, AP_PASS); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); Serial.println(WiFi.localIP()); hub.mqtt.config("test.mosquitto.org", 1883); #endif hub.config(F("MyDevices"), F("ESP"), F("")); hub.onBuild(build); hub.begin(); } void loop() { hub.tick(); // в основной программе тоже можно отправлять обновления, но не рекомендуется делать это слишком часто. // В библиотеке предусмотрен удобный таймер, например сделаем обновления каждую секунду static gh::Timer tmr(1000); if (tmr) { hub.update("tit").value(millis()); } // в библиотеке предусмотрены также пакетные обновления сразу для нескольких виджетов. Отправим по таймеру static gh::Timer tmr2(5000); if (tmr2) { // создаём обновление gh::Update upd(&hub); // синтаксис такой: // upd.update("name1").параметр(значение).параметр(значение)... // upd.update("name2").параметр(значение).параметр(значение)... // upd.update("name3").параметр(значение).параметр(значение)... // upd.send(); // таких компонентов у нас нет, это просто пример upd.update("name1").value(random(100)); upd.update("name2").color(gh::Colors::Red).label("kek"); // отправляем upd.send(); } }